Sha256: 6b567ff23b87e43cca5c26f7a0874a63686cd9130f5e7953cf21877098530c29

Contents?: true

Size: 1.85 KB

Versions: 3

Compression:

Stored size: 1.85 KB

Contents

module Bundler
  class Definition
    def self.from_gemfile(gemfile)
      gemfile = Pathname.new(gemfile).expand_path

      unless gemfile.file?
        raise GemfileNotFound, "`#{gemfile}` not found"
      end

      Dsl.evaluate(gemfile)
    end

    def self.from_lock(lockfile)
      # gemfile_definition = from_gemfile(nil)
      locked_definition = Locked.new(YAML.load_file(lockfile))
      # raise GemfileError unless gemfile_definition.equivalent?(locked_definition)
      locked_definition
    end

    attr_reader :dependencies, :sources

    alias actual_dependencies dependencies

    def initialize(dependencies, sources)
      @dependencies = dependencies
      @sources = sources
    end

    def local_index
      @local_index ||= begin
        index = Index.from_installed_gems

        sources.each do |source|
          next unless source.respond_to?(:local_specs)
          index = source.local_specs.merge(index)
        end

        index
      end
    end

    # def equivalent?(other)
    #   self.matches?(other) && other.matches?(self)
    #   # other.matches?(self)
    # end

    # def matches?(other)
    #   dependencies.all? do |dep|
    #     dep =~ other.specs.find {|spec| spec.name == dep.name }
    #   end
    # end

    class Locked < Definition
      def initialize(details)
        @details = details
      end

      def sources
        @sources ||= @details["sources"].map do |args|
          name, options = args.to_a.flatten
          Bundler::Source.const_get(name).new(options)
        end
      end

      def actual_dependencies
        @actual_dependencies ||= @details["specs"].map do |args|
          Gem::Dependency.new(*args.to_a.flatten)
        end
      end

      def dependencies
        @dependencies ||= @details["dependencies"].map do |args|
          Gem::Dependency.new(*args.to_a.flatten)
        end
      end
    end
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
bundler-0.9.0.pre3 lib/bundler/definition.rb
bundler-0.9.0.pre2 lib/bundler/definition.rb
bundler-0.9.0.pre1 lib/bundler/definition.rb