class Gem::RequestSet::GemDependencyAPI
A semi-compatible DSL for the Bundler Gemfile and Isolate formats.
Public Class Methods
Creates a new GemDependencyAPI that
will add dependencies to the Gem::RequestSet set
based on the
dependency API description in path
.
# File lib/rubygems/request_set/gem_dependency_api.rb, line 134 def initialize set, path @set = set @path = path @current_groups = nil @current_platform = nil @current_repository = nil @default_sources = true @git_set = @set.git_set @requires = Hash.new { |h, name| h[name] = [] } @vendor_set = @set.vendor_set @gem_sources = {} @without_groups = [] end
Public Instance Methods
Loads the gem dependency file
# File lib/rubygems/request_set/gem_dependency_api.rb, line 192 def load instance_eval File.read(@path).untaint, @path, 1 end
Private Instance Methods
Pins the gem name
to the given source
. Adding a
gem with the same name from a different source
will raise an
exception.
# File lib/rubygems/request_set/gem_dependency_api.rb, line 422 def pin_gem_source name, type = :default, source = nil source_description = case type when :default then '(default)' when :path then "path: #{source}" when :git then "git: #{source}" else '(unknown)' end raise ArgumentError, "duplicate source #{source_description} for gem #{name}" if @gem_sources.fetch(name, source) != source @gem_sources[name] = source end
Gem Dependencies DSL
↑ topPublic Instance Methods
Specifies a gem dependency with the given name
and
requirements
. You may also supply options
following the requirements
# File lib/rubygems/request_set/gem_dependency_api.rb, line 206 def gem name, *requirements options = requirements.pop if requirements.last.kind_of?(Hash) options ||= {} options[:git] = @current_repository if @current_repository source_set = false source_set ||= gem_path name, options source_set ||= gem_git name, options source_set ||= gem_github name, options return unless gem_platforms options groups = gem_group name, options return unless (groups & @without_groups).empty? pin_gem_source name, :default unless source_set gem_requires name, options @set.gem name, *requirements end
Loads dependencies from a gemspec file.
# File lib/rubygems/request_set/gem_dependency_api.rb, line 387 def gemspec options = {} name = options.delete(:name) || '{,*}' path = options.delete(:path) || '.' development_group = options.delete(:development_group) || :development spec = find_gemspec name, path groups = gem_group spec.name, {} add_dependencies groups, spec.runtime_dependencies groups << development_group add_dependencies groups, spec.development_dependencies gem_requires spec.name, options end
Block form for specifying gems from a git repository
.
# File lib/rubygems/request_set/gem_dependency_api.rb, line 366 def git repository @current_repository = repository yield ensure @current_repository = nil end
Block form for placing a dependency in the given groups
.
# File lib/rubygems/request_set/gem_dependency_api.rb, line 409 def group *groups @current_groups = groups yield ensure @current_groups = nil end
Block form for restricting gems to a particular platform.
# File lib/rubygems/request_set/gem_dependency_api.rb, line 445 def platform what @current_platform = what yield ensure @current_platform = nil end
Restricts this gem dependencies file to the given ruby
version
. The :engine
options from Bundler are
currently ignored.
# File lib/rubygems/request_set/gem_dependency_api.rb, line 466 def ruby version, options = {} engine = options[:engine] engine_version = options[:engine_version] raise ArgumentError, 'you must specify engine_version along with the ruby engine' if engine and not engine_version unless RUBY_VERSION == version then message = "Your Ruby version is #{RUBY_VERSION}, " + "but your #{gem_deps_file} requires #{version}" raise Gem::RubyVersionMismatch, message end if engine and engine != Gem.ruby_engine then message = "Your ruby engine is #{Gem.ruby_engine}, " + "but your #{gem_deps_file} requires #{engine}" raise Gem::RubyVersionMismatch, message end if engine_version then my_engine_version = Object.const_get "#{Gem.ruby_engine.upcase}_VERSION" if engine_version != my_engine_version then message = "Your ruby engine version is #{Gem.ruby_engine} #{my_engine_version}, " + "but your #{gem_deps_file} requires #{engine} #{engine_version}" raise Gem::RubyVersionMismatch, message end end return true end
Sets url
as a source for gems for this dependency API.
# File lib/rubygems/request_set/gem_dependency_api.rb, line 508 def source url Gem.sources.clear if @default_sources @default_sources = false Gem.sources << url end