Class: ReVIEW::Catalog

Inherits:
Object show all
Defined in:
lib/review/catalog.rb

Instance Method Summary collapse

Constructor Details

#initialize(file) ⇒ Catalog

Returns a new instance of Catalog.



5
6
7
8
9
10
11
12
# 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

Instance Method Details

#appendixObject



57
58
59
60
# File 'lib/review/catalog.rb', line 57

def appendix
  return '' unless @yaml['APPENDIX']
  @yaml['APPENDIX'].join("\n")
end

#chapsObject



19
20
21
22
23
24
25
26
27
28
29
# 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

#partsObject



31
32
33
34
35
36
37
38
39
40
41
# 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_chapsObject



52
53
54
55
# File 'lib/review/catalog.rb', line 52

def parts_with_chaps
  return [] unless @yaml['CHAPS']
  @yaml['CHAPS'].flatten.compact
end

#postdefObject



62
63
64
65
# File 'lib/review/catalog.rb', line 62

def postdef
  return '' unless @yaml['POSTDEF']
  @yaml['POSTDEF'].join("\n")
end

#predefObject



14
15
16
17
# File 'lib/review/catalog.rb', line 14

def predef
  return '' unless @yaml['PREDEF']
  @yaml['PREDEF'].join("\n")
end

#replace_part(old_name, new_name) ⇒ Object



43
44
45
46
47
48
49
50
# 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_sObject



67
68
69
# File 'lib/review/catalog.rb', line 67

def to_s
  YAML.dump(@yaml).gsub(/\A---\n/, '') # remove yaml header
end

#validate!(config, basedir) ⇒ Object



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
# 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