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.safe_load(file.read, [Date])
  else ## as Object
    @yaml = file
  end
  @yaml ||= {}
end

Instance Method Details

#appendixObject



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

def appendix
  @yaml['APPENDIX'] || []
end

#chapsObject



18
19
20
21
22
23
24
25
26
27
28
# File 'lib/review/catalog.rb', line 18

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
end

#partsObject



30
31
32
33
34
35
36
37
38
39
40
# File 'lib/review/catalog.rb', line 30

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
end

#parts_with_chapsObject



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

def parts_with_chaps
  return [] unless @yaml['CHAPS']

  @yaml['CHAPS'].flatten.compact
end

#postdefObject



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

def postdef
  @yaml['POSTDEF'] || []
end

#predefObject



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

def predef
  @yaml['PREDEF'] || []
end

#replace_part(old_name, new_name) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/review/catalog.rb', line 42

def replace_part(old_name, new_name)
  @yaml['CHAPS'].map! do |e|
    if e.is_a?(Hash) && (e.keys.first == old_name)
      e = { new_name => e.values.first }
    end
    e
  end
end

#to_sObject



65
66
67
# File 'lib/review/catalog.rb', line 65

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

#validate!(config, basedir) ⇒ Object



69
70
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
# File 'lib/review/catalog.rb', line 69

def validate!(config, basedir)
  filenames = []
  if predef.present?
    filenames.concat(predef)
  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)
  end
  if postdef.present?
    filenames.concat(postdef)
  end
  filenames.each do |filename|
    refile = File.expand_path(File.join(config['contentdir'], filename), basedir)
    unless File.exist?(refile)
      raise FileNotFound, "file not found in catalog.yml: #{refile}"
    end
  end
end