Sha256: e35f6d433d7505c155af2dab30f9bf5821bfaebe45684cda5a56b88b0e8a5913

Contents?: true

Size: 1.49 KB

Versions: 8

Compression:

Stored size: 1.49 KB

Contents

# Copyright (c) 2020 Jerome Arbez-Gindre
# frozen_string_literal: true

module DefMastership
  # modify one line after another
  class UpdateDefVersionLineModifier < LineModifierBase
    attr_accessor :document, :ref_document

    def self.from_config(hash)
      new.from_config(hash)
    end

    def initialize
      super
      @config = {
        def_type: '',
        ref_document: '',
        first_version: ''
      }
    end

    def replace(line)
      match = matched?(line)

      return line unless match
      return line unless match[:type] == def_type

      version_and_checksum = ''
      if match[:explicit_checksum] || version_string(match)
        version_and_checksum = "(#{version_string(match)}#{match[:explicit_checksum]})"
      end

      line.gsub(Regexp.new("#{match[:reference]}#{DMRegexp::DEF_VERSION_AND_CHECKSUM}")) do
        "#{match[:reference]}#{version_and_checksum}"
      end
    end

    private

    def matched?(line)
      return if line.commented?
      return unless line =~ DMRegexp::DEFINITION

      Regexp.last_match
    end

    def version_string(match)
      ref_definition = @ref_document.ref_to_def(match[:reference])
      definition = @document.ref_to_def(match[:reference])

      return if ref_definition.nil?
      return ref_definition.explicit_version if definition.sha256 == ref_definition.sha256

      ref_version = @ref_document.ref_to_def(match[:reference]).explicit_version
      ref_version.nil? ? @config[:first_version] : ref_version.next
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
defmastership-1.0.17 lib/defmastership/update_def_version_line_modifier.rb
defmastership-1.0.16 lib/defmastership/update_def_version_line_modifier.rb
defmastership-1.0.15 lib/defmastership/update_def_version_line_modifier.rb
defmastership-1.0.14 lib/defmastership/update_def_version_line_modifier.rb
defmastership-1.0.13 lib/defmastership/update_def_version_line_modifier.rb
defmastership-1.0.12 lib/defmastership/update_def_version_line_modifier.rb
defmastership-1.0.11 lib/defmastership/update_def_version_line_modifier.rb
defmastership-1.0.10 lib/defmastership/update_def_version_line_modifier.rb