class ReVIEW::Init
Constants
- TEX_DOCUMENTCLASS_OPTS
Public Class Methods
execute(*args)
click to toggle source
# File lib/review/init.rb, line 17 def self.execute(*args) new.execute(*args) end
new()
click to toggle source
# File lib/review/init.rb, line 26 def initialize @template = 'review-jsbook' @logger = ReVIEW.logger @review_dir = File.dirname(File.expand_path('..', __dir__)) end
Public Instance Methods
download_and_extract_archive(dir, filename)
click to toggle source
# File lib/review/init.rb, line 217 def download_and_extract_archive(dir, filename) begin require 'zip' rescue LoadError @logger.error 'extracting needs rubyzip.' exit 1 end if filename =~ %r{\Ahttps?://} begin @logger.info "Downloading from #{filename}" zipdata = Net::HTTP.get(URI.parse(filename)) rescue StandardError => e @logger.error "Failed to download #{filename}: #{e.message}" exit 1 end Tempfile.create('reviewinit') do |f| zipfilename = f.path f.write zipdata extract_archive(dir, zipfilename, filename) end else unless File.readable?(filename) @logger.error "Failed to open #{filename}" exit 1 end extract_archive(dir, filename, filename) end end
execute(*args)
click to toggle source
# File lib/review/init.rb, line 32 def execute(*args) initdir = parse_options(args) generate_dir(initdir) do |dir| generate_catalog_file(dir) generate_sample(dir) generate_images_dir(dir) generate_cover_image(dir) generate_layout(dir) generate_style(dir) generate_texmacro(dir) generate_config(dir) generate_locale(dir) if @locale generate_rakefile(dir) generate_gemfile(dir) generate_doc(dir) unless @without_doc download_and_extract_archive(dir, @archive) if @archive end end
extract_archive(dir, filename, originalfilename)
click to toggle source
# File lib/review/init.rb, line 249 def extract_archive(dir, filename, originalfilename) made = nil begin Zip::File.open(filename) do |zip| zip.each do |entry| fname = entry.name.gsub('\\', '/') if fname =~ /__MACOSX/ || fname =~ /\.DS_Store/ next end if fname =~ %r{\A/} || fname =~ /\.\./ # simple fool proof made = nil break end # `true' means override entry.extract(File.join(dir, fname)) { true } end made = true end raise Zip::Error unless made rescue Zip::Error => e @logger.error "#{originalfilename} seems invalid or broken zip file: #{e.message}" end end
generate_catalog_file(dir)
click to toggle source
# File lib/review/init.rb, line 116 def generate_catalog_file(dir) File.open(File.join(dir, 'catalog.yml'), 'w') do |file| file.write <<-EOS PREDEF: CHAPS: - #{File.basename(dir)}.re APPENDIX: POSTDEF: EOS end end
generate_config(dir)
click to toggle source
# File lib/review/init.rb, line 143 def generate_config(dir) today = Time.now.strftime('%Y-%m-%d') content = File.read(File.join(@review_dir, 'doc/config.yml.sample'), encoding: 'utf-8') content.gsub!(/^#\s*coverimage:.*$/, 'coverimage: cover.jpg') content.gsub!(/^ #\s*coverimage:.*$/, ' coverimage: cover-a5.ai') content.gsub!(/^#\s*date:.*$/, "date: #{today}") content.gsub!(/^#\s*history:.*$/, %Q(history: [["#{today}"]])) content.gsub!(/^#\s*texstyle:.*$/, 'texstyle: ["reviewmacro"]') content.gsub!(/^(#\s*)?stylesheet:.*$/, %Q(stylesheet: ["style.css"])) if @epub_version.to_i == 2 content.gsub!(/^#.*epubversion:.*$/, 'epubversion: 2') content.gsub!(/^#.*htmlversion:.*$/, 'htmlversion: 4') end if TEX_DOCUMENTCLASS_OPTS[@template] content.gsub!(/^#\s*texdocumentclass:.*$/, %Q(texdocumentclass: ["#{@template}", "#{TEX_DOCUMENTCLASS_OPTS[@template]}"])) end File.open(File.join(dir, 'config.yml'), 'w') { |f| f.write(content) } end
generate_cover_image(dir)
click to toggle source
# File lib/review/init.rb, line 136 def generate_cover_image(dir) FileUtils.cp(File.join(@review_dir, 'samples/sample-book/src/images/cover.jpg'), File.join(dir, 'images')) FileUtils.cp(File.join(@review_dir, 'samples/sample-book/src/images/cover-a5.ai'), File.join(dir, 'images')) end
generate_dir(dir) { |dir| ... }
click to toggle source
# File lib/review/init.rb, line 97 def generate_dir(dir) if File.exist?(dir) && !@force @logger.error "#{dir} already exists." exit 1 end FileUtils.mkdir_p dir yield dir end
generate_doc(dir)
click to toggle source
# File lib/review/init.rb, line 210 def generate_doc(dir) docdir = File.join(dir, 'doc') FileUtils.mkdir_p docdir md_files = Dir.glob(File.join(@review_dir, 'doc/*.md')).map.to_a FileUtils.cp md_files, docdir end
generate_gemfile(dir)
click to toggle source
# File lib/review/init.rb, line 199 def generate_gemfile(dir) File.open(File.join(dir, 'Gemfile'), 'w') do |file| file.write <<-EOS source 'https://rubygems.org' gem 'rake' gem 'review', '#{ReVIEW::VERSION}' EOS end end
generate_images_dir(dir)
click to toggle source
# File lib/review/init.rb, line 132 def generate_images_dir(dir) FileUtils.mkdir_p(File.join(dir, 'images')) end
generate_layout(dir)
click to toggle source
# File lib/review/init.rb, line 112 def generate_layout(dir) FileUtils.mkdir_p File.join(dir, 'layouts') end
generate_locale(dir)
click to toggle source
# File lib/review/init.rb, line 195 def generate_locale(dir) FileUtils.cp File.join(@review_dir, 'lib/review/i18n.yml'), File.join(dir, 'locale.yml') end
generate_rakefile(dir)
click to toggle source
# File lib/review/init.rb, line 180 def generate_rakefile(dir) FileUtils.mkdir_p File.join(dir, 'lib/tasks') File.open(File.join(dir, 'Rakefile'), 'w') do |file| file.write <<-EOS Dir.glob('lib/tasks/*.rake').sort.each do |file| load(file) end EOS end FileUtils.cp(File.join(@review_dir, 'samples/sample-book/src/lib/tasks/review.rake'), File.join(dir, 'lib/tasks/review.rake')) end
generate_sample(dir)
click to toggle source
# File lib/review/init.rb, line 106 def generate_sample(dir) unless @force File.write(File.join(dir, "#{File.basename(dir)}.re"), '= ') end end
generate_style(dir)
click to toggle source
# File lib/review/init.rb, line 164 def generate_style(dir) FileUtils.cp File.join(@review_dir, 'samples/sample-book/src/style.css'), dir end
generate_texmacro(dir)
click to toggle source
# File lib/review/init.rb, line 168 def generate_texmacro(dir) texmacrodir = File.join(dir, 'sty') FileUtils.mkdir_p texmacrodir tdir = File.join(@review_dir, 'templates/latex', @template) @logger.error "#{tdir} not found." unless File.exist?(tdir) FileUtils.cp Dir.glob(File.join(tdir, '*.*')), texmacrodir # provide jsbook from vendor/. current version is 2018/06/23 FileUtils.cp File.join(@review_dir, 'vendor/jsclasses/jsbook.cls'), File.join(texmacrodir, 'jsbook.cls') # provide gentombow from vendor/. current version is 2018/08/30 v0.9j FileUtils.cp File.join(@review_dir, 'vendor/gentombow/gentombow.sty'), File.join(texmacrodir, 'gentombow.sty') end
parse_options(args)
click to toggle source
# File lib/review/init.rb, line 52 def parse_options(args) opts = OptionParser.new opts.version = ReVIEW::VERSION opts.banner = "Usage: #{File.basename($PROGRAM_NAME)} [option] dirname" opts.on('-h', '--help', 'print this message and quit.') do puts opts.help exit 0 end opts.on('-f', '--force', 'generate files (except *.re) if directory has already existed.') do @force = true end opts.on('-l', '--locale', 'generate locale.yml file.') do @locale = true end opts.on('--latex-template name', 'specify LaTeX template name. (default: review-jsbook)') do |tname| @template = tname end opts.on('', '--epub-version VERSION', 'define EPUB version.') do |version| @epub_version = version end opts.on('', '--without-doc', "don't generate doc files.") do @without_doc = true end opts.on('-p', '--package archivefile', 'extract from local or network archive.') do |archive| @archive = archive end begin opts.parse!(args) rescue OptionParser::ParseError => e @logger.error e.message $stderr.puts opts.help exit 1 end if args.empty? $stderr.puts opts.help exit 1 end initdir = File.expand_path(args[0]) initdir end