Sha256: ea38f590cf86130fa8f39cd7a1d2d4206406c1fbaffbef1e5e8f20c55237957c

Contents?: true

Size: 1.21 KB

Versions: 3

Compression:

Stored size: 1.21 KB

Contents

require 'nokogiri'
require_relative '../core_ext.rb'

class VersionConfigFile
  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

  attr_reader :file_types
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
code_tools-4.2.1 lib/vamper/version_config_file.rb
code_tools-4.2.0 lib/vamper/version_config_file.rb
code_tools-4.1.0 lib/vamper/version_config_file.rb