class ReVIEW::Catalog

Public Class Methods

new(file) click to toggle source
# File lib/review/catalog.rb, line 5
def initialize(file)
  if file.respond_to? :read
    @yaml = YAML.load(file.read)
  else ## as Object
    @yaml = file
  end
  @yaml ||= {}
end

Public Instance Methods

appendix() click to toggle source
# File lib/review/catalog.rb, line 57
def appendix
  return '' unless @yaml['APPENDIX']
  @yaml['APPENDIX'].join("\n")
end
chaps() click to toggle source
# File lib/review/catalog.rb, line 19
def chaps
  return '' unless @yaml['CHAPS']

  @yaml['CHAPS'].map do |entry|
    if entry.is_a?(String)
      entry
    elsif entry.is_a?(Hash)
      entry.values # chaps in a part
    end
  end.flatten.join("\n")
end
parts() click to toggle source
# File lib/review/catalog.rb, line 31
def parts
  return '' unless @yaml['CHAPS']

  part_list = @yaml['CHAPS'].map do |entry|
    if entry.is_a?(Hash)
      entry.keys
    end
  end

  part_list.flatten.compact.join("\n")
end
parts_with_chaps() click to toggle source
# File lib/review/catalog.rb, line 52
def parts_with_chaps
  return [] unless @yaml['CHAPS']
  @yaml['CHAPS'].flatten.compact
end
postdef() click to toggle source
# File lib/review/catalog.rb, line 62
def postdef
  return '' unless @yaml['POSTDEF']
  @yaml['POSTDEF'].join("\n")
end
predef() click to toggle source
# File lib/review/catalog.rb, line 14
def predef
  return '' unless @yaml['PREDEF']
  @yaml['PREDEF'].join("\n")
end
replace_part(old_name, new_name) click to toggle source
# File lib/review/catalog.rb, line 43
def replace_part(old_name, new_name)
  @yaml['CHAPS'].map! do |e|
    if e.is_a?(Hash) and (e.keys.first == old_name)
      e = { new_name => e.values.first }
    end
    e
  end
end
to_s() click to toggle source
# File lib/review/catalog.rb, line 67
def to_s
  YAML.dump(@yaml).gsub(/\A---\n/, '') # remove yaml header
end
validate!(config, basedir) click to toggle source
# File lib/review/catalog.rb, line 71
def validate!(config, basedir)
  filenames = []
  if predef.present?
    filenames.concat(predef.split(/\n/))
  end
  parts_with_chaps.each do |chap|
    if chap.is_a?(Hash)
      chap.each_key do |part|
        if File.extname(part) == '.re'
          filenames.push(part)
        end
      end
      filenames.concat(chap.values.flatten)
    else
      filenames.push(chap)
    end
  end
  if appendix.present?
    filenames.concat(appendix.split(/\n/))
  end
  if postdef.present?
    filenames.concat(postdef.split(/\n/))
  end
  filenames.each do |filename|
    refile = File.join(basedir, config['contentdir'], filename)
    unless File.exist?(refile)
      raise FileNotFound, "file not found in catalog.yml: #{refile}"
    end
  end
end