class Bookery::Project

Constants

DEFAULTS

Attributes

config[R]
dir[R]

Public Class Methods

new(project_dir, config = {}) click to toggle source
# File lib/bookery/project.rb, line 11
def initialize(project_dir, config = {})
  @dir = project_dir
  @config = DEFAULTS.merge(config)
end

Public Instance Methods

assets() click to toggle source
# File lib/bookery/project.rb, line 34
def assets
  Dir.glob(File.join(dir, config[:assets_dir], '**/*')).reject do |file|
    File.directory?(file) or file =~ /\/(includes|templates)\//
  end.sort
end
book_config() click to toggle source
# File lib/bookery/project.rb, line 16
def book_config
  @book_config ||= Proc.new do
    conf = config[:book]
    conf[:template] = File.join(dir, conf[:template])
    conf
  end.call
end
books() click to toggle source
# File lib/bookery/project.rb, line 30
def books
  @books ||= load_books
end
generator_config() click to toggle source
# File lib/bookery/project.rb, line 24
def generator_config
  conf = config[:generator]
  conf[:project_dir] = dir
  conf
end
publish(publishers) click to toggle source
# File lib/bookery/project.rb, line 40
def publish(publishers)
  books.each do |book|
    prepare_output_dir(book)
    publishers.each { |publisher| publisher.publish(book) }
  end
end

Private Instance Methods

load_books() click to toggle source
# File lib/bookery/project.rb, line 61
def load_books
  path = File.join(dir, config[:book_dir])
  Dir.entries(path).sort.collect do |language|
    make_book(path, language) unless language =~ /\.\.?\z/
  end.compact
end
make_book(path, language) click to toggle source
# File lib/bookery/project.rb, line 68
def make_book(path, language)
  Book.new(
    Factories::ChapterFactory.create_chapters(File.join(path, language)),
    Config.new(language, book_config)
  )
end
prepare_output_dir(book) click to toggle source
# File lib/bookery/project.rb, line 49
def prepare_output_dir(book)
  output_dir = File.join(dir, 'output', book.language)
  ::FileUtils.rm_rf(output_dir)
  ::FileUtils.mkdir_p(output_dir)

  assets.each do |asset|
    dest = File.dirname(File.join(output_dir, asset.sub("#{dir}/", '')))
    ::FileUtils.mkdir_p(dest)
    ::FileUtils.cp(asset, dest)
  end
end