Sha256: 8987c6a065b77c66894d8d80d211c73e4bdc9908c4ce8b605e83c2addddca19c

Contents?: true

Size: 1.25 KB

Versions: 36

Compression:

Stored size: 1.25 KB

Contents

module Berkshelf
  class Location
    class << self
      # Create a new instance of a Location class given dependency and options.
      # The type of class is determined by the values in the given +options+
      # Hash.
      #
      # If you do not provide an option with a matching location id, +nil+
      # is returned.
      #
      # @example Create a git location
      #   Location.init(dependency, git: 'git://github.com/berkshelf/berkshelf.git')
      #
      # @example Create a GitHub location
      #   Location.init(dependency, github: 'berkshelf/berkshelf')
      #
      # @param [Dependency] dependency
      # @param [Hash] options
      #
      # @return [~BaseLocation, nil]
      def init(dependency, options = {})
        if klass = klass_from_options(options)
          klass.new(dependency, options)
        else
          nil
        end
      end

      private

        # Load the correct location from the given options.
        #
        # @return [Class, nil]
        def klass_from_options(options)
          options.each do |key, _|
            id = key.to_s.capitalize

            begin
              return Berkshelf.const_get("#{id}Location")
            rescue NameError; end
          end

          nil
        end
    end
  end
end

Version data entries

36 entries across 36 versions & 1 rubygems

Version Path
berkshelf-3.2.4 lib/berkshelf/location.rb
berkshelf-3.2.3 lib/berkshelf/location.rb
berkshelf-3.2.2 lib/berkshelf/location.rb
berkshelf-3.2.1 lib/berkshelf/location.rb
berkshelf-3.2.0 lib/berkshelf/location.rb
berkshelf-3.1.5 lib/berkshelf/location.rb
berkshelf-3.1.4 lib/berkshelf/location.rb
berkshelf-3.1.3 lib/berkshelf/location.rb
berkshelf-3.1.2 lib/berkshelf/location.rb
berkshelf-3.1.1 lib/berkshelf/location.rb
berkshelf-3.1.0 lib/berkshelf/location.rb
berkshelf-3.0.1 lib/berkshelf/location.rb
berkshelf-3.0.0 lib/berkshelf/location.rb
berkshelf-3.0.0.rc1 lib/berkshelf/location.rb
berkshelf-3.0.0.beta9 lib/berkshelf/location.rb
berkshelf-3.0.0.beta8 lib/berkshelf/location.rb