class GEPUB::ResourceBuilder
Public Class Methods
new(book, attributes = {}, &block)
click to toggle source
# File lib/gepub/resource_builder.rb, line 23 def initialize(book, attributes = {}, &block) @last_defined_item = nil @book = book @dir_prefix = "" @file_postprocess = {} @file_preprocess = {} @files_postprocess = {} @files_preprocess = {} current_wd = Dir.getwd Dir.chdir(attributes[:workdir]) unless attributes[:workdir].nil? instance_eval(&block) Dir.chdir current_wd true end
Public Instance Methods
add_resource_dir(name)
click to toggle source
# File lib/gepub/resource_builder.rb, line 121 def add_resource_dir(name) import "#{name}/resources.conf", :dir_prefix => name end
add_resource_dirs(dirs)
click to toggle source
# File lib/gepub/resource_builder.rb, line 125 def add_resource_dirs(dirs) dirs.each do |dir| add_resource_dir dir end end
cover_image(val)
click to toggle source
# File lib/gepub/resource_builder.rb, line 132 def cover_image(val) file(val) @last_defined_item.cover_image end
fallback_chain_files(*arg)
click to toggle source
# File lib/gepub/resource_builder.rb, line 182 def fallback_chain_files(*arg) files(*arg) @last_defined_item.inject(nil) { |item1, item2| if !item1.nil? item1.item.set_fallback(item2.item.id) end item2 } end
fallback_group() { || ... }
click to toggle source
# File lib/gepub/resource_builder.rb, line 159 def fallback_group raise 'fallback_group needs block.' unless block_given? count = 0 before = nil @files_preprocess['fallback_group'] = Proc.new { raise "can't use files within fallback_group" } @file_preprocess['fallback_group'] = Proc.new { before = @last_defined_item } @file_postprocess['fallback_group'] = Proc.new { if count > 0 before.item.set_fallback(@last_defined_item.item.id) end count += 1 } yield @files_preprocess.delete('fallback_group') @file_postprocess.delete('fallback_group') @file_preprocess.delete('fallback_group') end
file(val)
click to toggle source
# File lib/gepub/resource_builder.rb, line 44 def file(val) raise "can't specify multiple files on file keyword" if Hash === val && val.length > 1 @file_preprocess.each { |_k,p| p.call } @last_defined_item = ResourceItem.new(create_one_file(val)) @file_postprocess.each { |_k,p| p.call } end
files(*arg)
click to toggle source
# File lib/gepub/resource_builder.rb, line 58 def files(*arg) arg = arg[0] if arg.size == 1 && Hash === arg[0] @files_preprocess.each { |_k,p| p.call } @last_defined_item = arg.map { |val| ResourceItem.new(create_one_file(val)) } @files_postprocess.each { |_k,p| p.call } end
glob(arg)
click to toggle source
# File lib/gepub/resource_builder.rb, line 108 def glob(arg) files(*Dir.glob(arg).select{|x| !File.directory?(x)} ) end
handles(media_type)
click to toggle source
# File lib/gepub/resource_builder.rb, line 193 def handles(media_type) @last_defined_item.is_handler_of(media_type) end
heading(text, id = nil)
click to toggle source
# File lib/gepub/resource_builder.rb, line 142 def heading(text, id = nil) @last_defined_item.toc_text_with_id(text, id) end
id(the_id)
click to toggle source
# File lib/gepub/resource_builder.rb, line 146 def id(the_id) @last_defined_item.id = the_id end
import(conf, args = {})
click to toggle source
# File lib/gepub/resource_builder.rb, line 112 def import(conf, args = {}) dir_prefix_org = @dir_prefix @dir_prefix = args[:dir_prefix] || "" Dir.chdir(File.dirname(conf)) { instance_eval(File.new(File.basename(conf)).read) } @dir_prefix = dir_prefix_org end
linear(val)
click to toggle source
# File lib/gepub/resource_builder.rb, line 102 def linear val itemref = @book.spine.itemref_by_id[@last_defined_item.item.id] raise 'linear should be called inside ordered' if (itemref.nil?) itemref.linear = val end
ordered(&block)
click to toggle source
# File lib/gepub/resource_builder.rb, line 38 def ordered(&block) @book.ordered { instance_eval(&block) } end
page_spread_left()
click to toggle source
# File lib/gepub/resource_builder.rb, line 74 def page_spread_left itemref = @book.spine.itemref_by_id[@last_defined_item.item.id] raise 'page_spread_left should be called inside ordered' if (itemref.nil?) itemref.page_spread_left end
page_spread_right()
click to toggle source
# File lib/gepub/resource_builder.rb, line 80 def page_spread_right itemref = @book.spine.itemref_by_id[@last_defined_item.item.id] raise 'page_spread_right should be called inside ordered' if (itemref.nil?) itemref.page_spread_right end
rendition_layout(val)
click to toggle source
# File lib/gepub/resource_builder.rb, line 86 def rendition_layout val itemref = @book.spine.itemref_by_id[@last_defined_item.item.id] raise 'rendition should be called inside ordered' if (itemref.nil?) itemref.rendition_layout = val end
rendition_orientation(val)
click to toggle source
# File lib/gepub/resource_builder.rb, line 91 def rendition_orientation val itemref = @book.spine.itemref_by_id[@last_defined_item.item.id] raise 'rendition should be called inside ordered' if (itemref.nil?) itemref.rendition_orientation = val end
rendition_spread(val)
click to toggle source
# File lib/gepub/resource_builder.rb, line 96 def rendition_spread val itemref = @book.spine.itemref_by_id[@last_defined_item.item.id] raise 'rendition should be called inside ordered' if (itemref.nil?) itemref.rendition_spread = val end
with_media_type(*type) { || ... }
click to toggle source
# File lib/gepub/resource_builder.rb, line 150 def with_media_type(*type) raise 'with_media_type needs block.' unless block_given? @file_postprocess['with_media_type'] = Proc.new { media_type(*type) } @files_postprocess['with_media_type'] = Proc.new { media_type(*type) } yield @file_postprocess.delete('with_media_type') @files_postprocess.delete('with_media_type') end
Private Instance Methods
create_one_file(val)
click to toggle source
# File lib/gepub/resource_builder.rb, line 199 def create_one_file(val) name = val io = val if (String === val && !val.start_with?('http')) if Hash === val name = val.first[0] io = val.first[1] end if Array === val name = val[0] io = val[1] end name = "#{@dir_prefix}/#{name}" if !@dir_prefix.nil? && @dir_prefix.size > 0 && !name.start_with?('http') @book.add_item(name, content: io) end