Sha256: 4f025eb53a8e6ebbc73c53e2c19f102f00bb67575aa2692bc4d604128a0a2dd2

Contents?: true

Size: 1.48 KB

Versions: 149

Compression:

Stored size: 1.48 KB

Contents

# frozen_string_literal: true

require 'eac_ruby_utils/core_ext'

module Avm
  module EacRubyBase1
    module Rubygems
      class Gemspec
        class AddOrReplaceGemLine
          enable_method_class
          common_constructor :sender, :gem_name, :gem_specs
          delegate :lines, to: :sender

          DEPENDENCY_PREFIX = '  s.add_dependency'

          def existing_gem_line_index
            lines.index { |line| line.start_with?(gem_line_prefix) }
          end

          def result
            if existing_gem_line_index.present?
              replace_line
            else
              add_line
            end
          end

          def add_line
            lines.insert(add_line_index, new_gem_line)
          end

          def add_line_index
            (gems_lines_start_index..(lines.count - 1)).each do |e|
              return e if new_gem_line < lines[e]
            end
            lines.count
          end

          def gems_lines_start_index
            lines.index { |line| line.start_with?(DEPENDENCY_PREFIX) } || lines.count
          end

          def new_gem_line
            ([gem_line_prefix] + quoted_gem_specs).join(', ')
          end

          def gem_line_prefix
            "#{DEPENDENCY_PREFIX} '#{gem_name}'"
          end

          def replace_line
            lines[existing_gem_line_index] = new_gem_line
          end

          def quoted_gem_specs
            gem_specs.map { |gem_spec| "'#{gem_spec}'" }
          end
        end
      end
    end
  end
end

Version data entries

149 entries across 149 versions & 2 rubygems

Version Path
avm-eac_ruby_base1-0.35.0 lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.95.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
avm-eac_ruby_base1-0.34.1 lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.91.1 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
avm-eac_ruby_base1-0.34.0 lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.91.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
avm-eac_ruby_base1-0.33.1 lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.83.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.82.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.81.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
avm-eac_ruby_base1-0.33.0 lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.80.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.79.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
avm-eac_ruby_base1-0.32.1 lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.78.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
avm-eac_ruby_base1-0.32.0 lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.77.1 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.77.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.76.1 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb
eac_tools-0.76.0 sub/avm-eac_ruby_base1/lib/avm/eac_ruby_base1/rubygems/gemspec/add_or_replace_gem_line.rb