Sha256: 23469815cf0774e33b64d13606ae0b242f0e17a95c8b3c50a20faad424a6fd76

Contents?: true

Size: 1.36 KB

Versions: 3

Compression:

Stored size: 1.36 KB

Contents

module GemfileLocker
  class GemEntry
    module Versions
      EXTRA_VERSION_REGEXP = /\A[><]/

      def lock(options)
        version = options[:version]
        set_version(version) if version
        super
      end

      def unlock
        remove_version
        super
      end

      def locked?
        version_nodes.any?
      end

      def set_version(version) # rubocop:disable AccessorMethodName
        version_nodes = self.version_nodes
        if version_nodes.any?
          replace_string_node(version_nodes.first, version)
        else
          quote = name_quote
          rewriter.insert_after(node.children[2].loc.end, ", #{quote}#{version}#{quote}")
        end
      end

      def remove_version
        # If multiple version strings are given, keep that which start with `>, >=, <, <=`.
        version_nodes = self.version_nodes(strict: ->(versions) { versions.size > 1 })
        version_nodes.each do |arg_node|
          remove_node_with_comma(arg_node)
        end
      end

      protected

      def version_nodes(strict_if: nil, strict: !strict_if)
        result = node.children.drop(3).select { |arg_node| arg_node.type == :str }
        if strict_if && strict_if[result] || strict
          result = result.reject do |arg_node|
            EXTRA_VERSION_REGEXP =~ arg_node.children[0]
          end
        end
        result
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
gemfile_locker-0.4.0 lib/gemfile_locker/gem_entry/versions.rb
gemfile_locker-0.3.1 lib/gemfile_locker/gem_entry/versions.rb
gemfile_locker-0.3.0 lib/gemfile_locker/gem_entry/versions.rb