Class: VersionConfigFile

Inherits:
Object
  • Object
show all
Defined in:
lib/vamper/version_config_file.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(io, tags) ⇒ VersionConfigFile

Returns a new instance of VersionConfigFile.



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'lib/vamper/version_config_file.rb', line 5

def initialize(io, tags)
  doc = Nokogiri::XML(io)

  @file_types = []
  doc.xpath('/VersionConfig/FileType').each do |node|
    file_type_struct = Struct.new(:name, :file_specs, :updates, :write)
    search_replace_struct = Struct.new(:search, :replace)
    file_type = file_type_struct.new
    file_type.name = node.name
    file_type.file_specs = node.xpath('FileSpec').map { |sub_node|
      Regexp.new('^' + Regexp::escape(sub_node.text).gsub('\\*', '.*').gsub('\\?', '.') + '$')
    }
    update_node_set = node.xpath('Update')
    if update_node_set
      # Replace ${...} entries in the replace string with equivalent tags if available
      file_type.updates = update_node_set.map { |sub_node|
        s_and_r = search_replace_struct.new(
          %r(#{sub_node.at_xpath('Search').text.gsub(/\(\?'(\w+)'/, '(?<\\1>')}),
          sub_node.at_xpath('Replace').text.replace_tags(tags))
      }
    end
    write_node = node.at_xpath('Write')
    if write_node
      file_type.write = write_node.text.replace_tags(tags)
    end
    @file_types.push(file_type)
  end
end

Instance Attribute Details

#file_typesObject (readonly)

Returns the value of attribute file_types.



34
35
36
# File 'lib/vamper/version_config_file.rb', line 34

def file_types
  @file_types
end