Class: Gem::RequestSet::GemDependencyAPI
- Inherits:
-
Object
- Object
- Gem::RequestSet::GemDependencyAPI
- Defined in:
- lib/rubygems/request_set/gem_dependency_api.rb
Overview
A semi-compatible DSL for the Bundler Gemfile and Isolate formats.
Constant Summary collapse
- ENGINE_MAP =
:nodoc:
{ # :nodoc: :jruby => %w[jruby], :jruby_18 => %w[jruby], :jruby_19 => %w[jruby], :maglev => %w[maglev], :mri => %w[ruby], :mri_18 => %w[ruby], :mri_19 => %w[ruby], :mri_20 => %w[ruby], :mri_21 => %w[ruby], :rbx => %w[rbx], :ruby => %w[ruby rbx maglev], :ruby_18 => %w[ruby rbx maglev], :ruby_19 => %w[ruby rbx maglev], :ruby_20 => %w[ruby rbx maglev], :ruby_21 => %w[ruby rbx maglev], }
- PLATFORM_MAP =
:nodoc:
{ # :nodoc: :jruby => Gem::Platform::RUBY, :jruby_18 => Gem::Platform::RUBY, :jruby_19 => Gem::Platform::RUBY, :maglev => Gem::Platform::RUBY, :mingw => x86_mingw, :mingw_18 => x86_mingw, :mingw_19 => x86_mingw, :mingw_20 => x86_mingw, :mingw_21 => x86_mingw, :mri => Gem::Platform::RUBY, :mri_18 => Gem::Platform::RUBY, :mri_19 => Gem::Platform::RUBY, :mri_20 => Gem::Platform::RUBY, :mri_21 => Gem::Platform::RUBY, :mswin => Gem::Platform::RUBY, :rbx => Gem::Platform::RUBY, :ruby => Gem::Platform::RUBY, :ruby_18 => Gem::Platform::RUBY, :ruby_19 => Gem::Platform::RUBY, :ruby_20 => Gem::Platform::RUBY, :ruby_21 => Gem::Platform::RUBY, :x64_mingw => x64_mingw, :x64_mingw_20 => x64_mingw, :x64_mingw_21 => x64_mingw }
- VERSION_MAP =
:nodoc:
{ # :nodoc: :jruby => gt_eq_0, :jruby_18 => tilde_gt_1_8_0, :jruby_19 => tilde_gt_1_9_0, :maglev => gt_eq_0, :mingw => gt_eq_0, :mingw_18 => tilde_gt_1_8_0, :mingw_19 => tilde_gt_1_9_0, :mingw_20 => tilde_gt_2_0_0, :mingw_21 => tilde_gt_2_1_0, :mri => gt_eq_0, :mri_18 => tilde_gt_1_8_0, :mri_19 => tilde_gt_1_9_0, :mri_20 => tilde_gt_2_0_0, :mri_21 => tilde_gt_2_1_0, :mswin => gt_eq_0, :rbx => gt_eq_0, :ruby => gt_eq_0, :ruby_18 => tilde_gt_1_8_0, :ruby_19 => tilde_gt_1_9_0, :ruby_20 => tilde_gt_2_0_0, :ruby_21 => tilde_gt_2_1_0, :x64_mingw => gt_eq_0, :x64_mingw_20 => tilde_gt_2_0_0, :x64_mingw_21 => tilde_gt_2_1_0, }
- WINDOWS =
:nodoc:
{ # :nodoc: :mingw => :only, :mingw_18 => :only, :mingw_19 => :only, :mingw_20 => :only, :mingw_21 => :only, :mri => :never, :mri_18 => :never, :mri_19 => :never, :mri_20 => :never, :mri_21 => :never, :mswin => :only, :rbx => :never, :ruby => :never, :ruby_18 => :never, :ruby_19 => :never, :ruby_20 => :never, :ruby_21 => :never, :x64_mingw => :only, :x64_mingw_20 => :only, :x64_mingw_21 => :only, }
Instance Attribute Summary collapse
-
#git_set ⇒ Object
readonly
A set of gems that are loaded via the
:git
option to #gem. -
#requires ⇒ Object
readonly
A Hash containing gem names and files to require from those gems.
-
#vendor_set ⇒ Object
readonly
A set of gems that are loaded via the
:path
option to #gem. -
#without_groups ⇒ Object
The groups of gems to exclude from installation.
Instance Method Summary collapse
-
#find_gemspec(name, path) ⇒ Object
Finds a gemspec with the given
name
that lives atpath
. -
#gem(name, *requirements) ⇒ Object
:category: Gem Dependencies DSL :call-seq: gem(name) gem(name, *requirements) gem(name, *requirements, options).
-
#gem_deps_file ⇒ Object
Returns the basename of the file the dependencies were loaded from.
-
#gemspec(options = {}) ⇒ Object
:category: Gem Dependencies DSL.
-
#git(repository) ⇒ Object
:category: Gem Dependencies DSL.
-
#group(*groups) ⇒ Object
:category: Gem Dependencies DSL Block form for placing a dependency in the given
groups
. -
#initialize(set, path) ⇒ GemDependencyAPI
constructor
Creates a new GemDependencyAPI that will add dependencies to the Gem::RequestSet
set
based on the dependency API description inpath
. -
#load ⇒ Object
Loads the gem dependency file.
-
#platform(what) ⇒ Object
(also: #platforms)
:category: Gem Dependencies DSL.
-
#ruby(version, options = {}) ⇒ Object
:category: Gem Dependencies DSL Restricts this gem dependencies file to the given ruby
version
. -
#source(url) ⇒ Object
:category: Gem Dependencies DSL.
Constructor Details
#initialize(set, path) ⇒ GemDependencyAPI
Creates a new GemDependencyAPI that will add dependencies to the Gem::RequestSet set
based on the dependency API description in path
.
134 135 136 137 138 139 140 141 142 143 144 145 146 147 |
# 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 |
Instance Attribute Details
#git_set ⇒ Object (readonly)
A set of gems that are loaded via the :git
option to #gem
113 114 115 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 113 def git_set @git_set end |
#requires ⇒ Object (readonly)
A Hash containing gem names and files to require from those gems.
118 119 120 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 118 def requires @requires end |
#vendor_set ⇒ Object (readonly)
A set of gems that are loaded via the :path
option to #gem
123 124 125 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 123 def vendor_set @vendor_set end |
#without_groups ⇒ Object
The groups of gems to exclude from installation
128 129 130 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 128 def without_groups @without_groups end |
Instance Method Details
#find_gemspec(name, path) ⇒ Object
Finds a gemspec with the given name
that lives at path
.
166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 166 def find_gemspec name, path # :nodoc: glob = File.join path, "#{name}.gemspec" spec_files = Dir[glob] case spec_files.length when 1 then spec_file = spec_files.first spec = Gem::Specification.load spec_file return spec if spec raise ArgumentError, "invalid gemspec #{spec_file}" when 0 then raise ArgumentError, "no gemspecs found at #{Dir.pwd}" else raise ArgumentError, "found multiple gemspecs at #{Dir.pwd}, " + "use the name: option to specify the one you want" end end |
#gem(name, *requirements) ⇒ Object
:category: Gem Dependencies DSL :call-seq:
gem(name)
gem(name, *requirements)
gem(name, *requirements, )
Specifies a gem dependency with the given name
and requirements
. You may also supply options
following the requirements
206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 206 def gem name, *requirements = requirements.pop if requirements.last.kind_of?(Hash) ||= {} [:git] = @current_repository if @current_repository source_set = false source_set ||= gem_path name, source_set ||= gem_git name, source_set ||= gem_github name, return unless gem_platforms groups = gem_group name, return unless (groups & @without_groups).empty? pin_gem_source name, :default unless source_set gem_requires name, @set.gem name, *requirements end |
#gem_deps_file ⇒ Object
Returns the basename of the file the dependencies were loaded from
378 379 380 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 378 def gem_deps_file # :nodoc: File.basename @path end |
#gemspec(options = {}) ⇒ Object
:category: Gem Dependencies DSL
Loads dependencies from a gemspec file.
387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 387 def gemspec = {} name = .delete(:name) || '{,*}' path = .delete(:path) || '.' development_group = .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, end |
#git(repository) ⇒ Object
:category: Gem Dependencies DSL
Block form for specifying gems from a git repository
.
366 367 368 369 370 371 372 373 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 366 def git repository @current_repository = repository yield ensure @current_repository = nil end |
#group(*groups) ⇒ Object
:category: Gem Dependencies DSL Block form for placing a dependency in the given groups
.
409 410 411 412 413 414 415 416 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 409 def group *groups @current_groups = groups yield ensure @current_groups = nil end |
#load ⇒ Object
Loads the gem dependency file
192 193 194 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 192 def load instance_eval File.read(@path).untaint, @path, 1 end |
#platform(what) ⇒ Object Also known as: platforms
:category: Gem Dependencies DSL
Block form for restricting gems to a particular platform.
445 446 447 448 449 450 451 452 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 445 def platform what @current_platform = what yield ensure @current_platform = nil end |
#ruby(version, options = {}) ⇒ Object
:category: Gem Dependencies DSL Restricts this gem dependencies file to the given ruby version
. The :engine
options from Bundler are currently ignored.
466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 |
# File 'lib/rubygems/request_set/gem_dependency_api.rb', line 466 def ruby version, = {} engine = [:engine] engine_version = [: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 = "Your Ruby version is #{RUBY_VERSION}, " + "but your #{gem_deps_file} requires #{version}" raise Gem::RubyVersionMismatch, end if engine and engine != Gem.ruby_engine then = "Your ruby engine is #{Gem.ruby_engine}, " + "but your #{gem_deps_file} requires #{engine}" raise Gem::RubyVersionMismatch, end if engine_version then my_engine_version = Object.const_get "#{Gem.ruby_engine.upcase}_VERSION" if engine_version != my_engine_version then = "Your ruby engine version is #{Gem.ruby_engine} #{my_engine_version}, " + "but your #{gem_deps_file} requires #{engine} #{engine_version}" raise Gem::RubyVersionMismatch, end end return true end |
#source(url) ⇒ Object
:category: Gem Dependencies DSL
Sets url
as a source for gems for this dependency API.
508 509 510 511 512 513 514 |
# 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 |