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.



6
7
8
9
10
11
12
13
# File 'lib/review/catalog.rb', line 6

def initialize(file)
  @yaml = if file.respond_to?(:read)
            YAMLLoader.safe_load(file.read)
          else ## as Object
            file
          end
  @yaml ||= {}
end

Instance Method Details

#appendixObject



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

def appendix
  @yaml['APPENDIX'] || []
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
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
end

#parts_with_chapsObject



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

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

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

#postdefObject



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

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

#predefObject



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

def predef
  @yaml['PREDEF'] || []
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) && (e.keys.first == old_name)
      e = { new_name => e.values.first }
    end
    e
  end
end

#to_sObject



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

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

#validate!(config, basedir) ⇒ Object



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

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