class Gem::RequestSet::GemDependencyAPI
Eine semi-kompatible DSL für die Bundler Gemfile und Isolate gem Abhängigkeitsdateien.
Um mit beiden Formaten, der Bundler Gemfile und Isolate, zu arbeiten, nimmt diese Implementierung einige Freiheiten, um Kompatibilität mit beiden zu ermöglichen, insbesondere in source.
Eine grundlegende Gem-Abhängigkeitsdatei sieht wie folgt aus:
source 'https://rubygems.org' gem 'rails', '3.2.14a gem 'devise', '~> 2.1', '>= 2.1.3' gem 'cancan' gem 'airbrake' gem 'pg'
RubyGems empfiehlt, dies als gem.deps.rb anstelle von Gemfile oder Isolate zu speichern.
Um die Gems in dieser Gemfile zu installieren, verwenden Sie 'gem install -g`, um sie zu installieren und eine Lockfile zu erstellen. Die Lockfile stellt sicher, dass bei Änderungen an Ihrer Gem-Abhängigkeitsdatei nur minimale Änderungen an den Abhängigkeiten Ihrer Gems vorgenommen werden.
RubyGems kann alle Gems in Ihrer Abhängigkeitsdatei beim Start aktivieren, indem es die Umgebungsvariable RUBYGEMS_GEMDEPS verwendet oder über Gem.use_gemdeps. Weitere Informationen und Warnungen finden Sie unter Gem.use_gemdeps.
Weitere Details finden Sie unter 'gem help install' und 'gem help gem_dependencies'.
Attribute
Die von gem-Anweisungen in der gem.deps.rb-Datei benötigten Gems.
Eine Hash, die Gem-Namen und die daraus zu ladenden Dateien enthält.
Öffentliche Klassenmethoden
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 197 def initialize(set, path) @set = set @path = path @current_groups = nil @current_platforms = nil @current_repository = nil @dependencies = {} @default_sources = true @git_set = @set.git_set @git_sources = {} @installing = false @requires = Hash.new {|h, name| h[name] = [] } @vendor_set = @set.vendor_set @source_set = @set.source_set @gem_sources = {} @without_groups = [] git_source :github do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include? "/" "https://github.com/#{repo_name}.git" end git_source :bitbucket do |repo_name| repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include? "/" user, = repo_name.split "/", 2 "https://#{user}@bitbucket.org/#{repo_name}.git" end end
Erstellt eine neue GemDependencyAPI, die Abhängigkeiten zur Gem::RequestSet set hinzufügt, basierend auf der Beschreibung der Abhängigkeits-API in path.
Öffentliche Instanzmethoden
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 605 def git_source(name, &callback) @git_sources[name] = callback end
Definiert eine benutzerdefinierte Git-Quelle, die name verwendet, um Git-Repositories für die Verwendung in Gems zu erweitern, die aus Git-Repositories erstellt werden. Sie müssen einen Block bereitstellen, der einen Git-Repository-Namen zur Erweiterung akzeptiert.
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 282 def load instance_eval File.read(@path), @path, 1 self end
Lädt die Gem-Abhängigkeitsdatei und gibt self zurück.
Private Instanzmethoden
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 695 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}" when :source then "source: #{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
Pinnt das Gem name an die angegebene source. Das Hinzufügen eines Gems mit demselben Namen aus einer anderen source löst eine Ausnahme aus.
Gem Dependencies DSL
Öffentliche Instanzmethoden
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 359 def gem(name, *requirements) options = requirements.pop if requirements.last.is_a?(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_git_source name, options source_set ||= gem_source name, options duplicate = @dependencies.include? name @dependencies[name] = if requirements.empty? && !source_set Gem::Requirement.default elsif source_set Gem::Requirement.source_set else Gem::Requirement.create requirements end return unless gem_platforms name, options groups = gem_group name, options return unless (groups & @without_groups).empty? pin_gem_source name, :default unless source_set gem_requires name, options if duplicate warn <<-WARNING Gem dependencies file #{@path} requires #{name} more than once. WARNING end @set.gem name, *requirements end
Gibt eine Gem-Abhängigkeit mit dem angegebenen name und requirements an. Sie können auch options nach den requirements angeben.
options beinhalten
- require
-
RubyGems bietet keine automatischen Ladefunktionen, daher werden Anforderungen in einer Gem-Abhängigkeitsdatei aufgezeichnet, aber ignoriert.
In Bundler überschreibt die Option require: die zu ladende Datei während
Bundler.require. Standardmäßig wird der Name der Abhängigkeit inBundlergeladen. Eine einzelne Datei oder eineArrayvon Dateien kann angegeben werden.Um das Laden einer Datei zu deaktivieren, geben Sie
falsean.gem 'rake', require: false
- group
-
Platzieren Sie die Abhängigkeiten in der angegebenen Abhängigkeitsgruppe. Eine einzelne Gruppe oder ein
Arrayvon Gruppen kann angegeben werden.Siehe auch
group - platform
-
Installieren Sie diese Abhängigkeit nur auf der angegebenen Plattform. Eine einzelne Plattform oder ein
Arrayvon Plattformen kann angegeben werden.Siehe
platformfür eine Liste der verfügbaren Plattformen. - path
-
Installieren Sie diese Abhängigkeit aus einem entpackten Gem im angegebenen Verzeichnis.
gem 'modified_gem', path: 'vendor/modified_gem'
- git
-
Installieren Sie diese Abhängigkeit aus einem Git-Repository.
gem 'private_gem', git: 'git@my.company.example:private_gem.git'
- gist
-
Installieren Sie diese Abhängigkeit aus der Gist-ID.
gem 'bang', gist: '1232884'
- github
-
Installieren Sie diese Abhängigkeit aus einem GitHub-Git-Repository.
gem 'private_gem', github: 'my_company/private_gem'
- submodules
-
Setzen Sie auf
true, um Submodule beim Abrufen des Git-Repositorys für git:, gist: und github: Abhängigkeiten einzuschließen. - ref
-
Verwenden Sie den angegebenen Commit-Namen oder SHA für git:, gist: und github: Abhängigkeiten.
- branch
-
Verwenden Sie den angegebenen Branch für git:, gist: und github: Abhängigkeiten.
- tag
-
Verwenden Sie das angegebene Tag für git:, gist: und github: Abhängigkeiten.
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 638 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, {} self_dep = Gem::Dependency.new spec.name, spec.version add_dependencies groups, [self_dep] add_dependencies groups, spec.runtime_dependencies @dependencies[spec.name] = Gem::Requirement.source_set spec.dependencies.each do |dep| @dependencies[dep.name] = dep.requirement end groups << development_group add_dependencies groups, spec.development_dependencies @vendor_set.add_vendor_gem spec.name, path gem_requires spec.name, options end
Lädt Abhängigkeiten aus einer gemspec-Datei.
options beinhalten
- name
-
Der Namensbestandteil der gemspec-Datei. Sucht standardmäßig nach jeder gemspec-Datei im aktuellen Verzeichnis.
gemspec name: 'my_gem'
- path
-
Der Pfad, in dem sich die gemspec befindet. Standardmäßig das aktuelle Verzeichnis.
gemspec 'my_gem', path: 'gemspecs', name: 'my_gem'
- development_group
-
Die Gruppe, zu der Entwicklung Abhängigkeiten hinzugefügt werden sollen. Standardmäßig ist dies :development. Es kann nur eine Gruppe angegeben werden.
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 592 def git(repository) @current_repository = repository yield ensure @current_repository = nil end
Blockform zur Angabe von Gems aus einem Git repository.
git 'https://github.com/rails/rails.git' do gem 'activesupport' gem 'activerecord' end
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 683 def group(*groups) @current_groups = groups yield ensure @current_groups = nil end
Blockform, um eine Abhängigkeit in die angegebenen groups zu platzieren.
group :development do gem 'debugger' end group :development, :test do gem 'minitest' end
Gruppen können zur Installationszeit mit 'gem install -g --without development' ausgeschlossen werden. Weitere Details finden Sie unter `gem help install` und `gem help gem_dependencies`.
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 757 def platform(*platforms) @current_platforms = platforms yield ensure @current_platforms = nil end
Blockform, um Gems auf eine Reihe von Plattformen zu beschränken.
Die Gem-Abhängigkeitsplattform unterscheidet sich von Gem::Platform. Eine Plattform gem.deps.rb Plattform stimmt mit der Ruby-Engine, der Ruby-Version und der Zulässigkeit von Windows überein.
- :ruby, :ruby_XY
-
Passt auf Nicht-Windows-, Nicht-JRuby-Implementierungen, wobei X und Y verwendet werden können, um Versionen der Serien 1.8, 1.9, 2.0 oder 2.1 abzugleichen.
- :mri, :mri_XY
-
Passt auf Nicht-Windows-C-Ruby (Matz Ruby) oder nur auf die Serien 1.8, 1.9, 2.0 oder 2.1.
- :mingw, :mingw_XY
-
Passt auf 32-Bit-C-Ruby unter MinGW oder nur auf die Serien 1.8, 1.9, 2.0 oder 2.1.
- :x64_mingw, :x64_mingw_XY
-
Passt auf 64-Bit-C-Ruby unter MinGW oder nur auf die Serien 1.8, 1.9, 2.0 oder 2.1.
- :mswin, :mswin_XY
-
Passt auf 32-Bit-C-Ruby unter Microsoft Windows oder nur auf die Serien 1.8, 1.9, 2.0 oder 2.1.
- :mswin64, :mswin64_XY
-
Passt auf 64-Bit-C-Ruby unter Microsoft Windows oder nur auf die Serien 1.8, 1.9, 2.0 oder 2.1.
- :jruby, :jruby_XY
-
Passt auf JRuby oder JRuby im 1.8- oder 1.9-Modus.
- :maglev
-
Passt auf Maglev.
- :rbx
-
Passt auf Nicht-Windows-Rubinius.
HINWEIS: Es gibt Inkonsistenzen darin, auf welche Umgebung eine Plattform passt. Möglicherweise müssen Sie den Quellcode lesen, um die genauen Details zu erfahren.
Blockform zum Beschränken von Gems auf eine bestimmte Gruppe von Plattformen. Siehe platform.
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 783 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 && !engine_version return true if @installing unless version == RUBY_VERSION message = "Your Ruby version is #{RUBY_VERSION}, " \ "but your #{gem_deps_file} requires #{version}" raise Gem::RubyVersionMismatch, message end if engine && engine != Gem.ruby_engine message = "Your Ruby engine is #{Gem.ruby_engine}, " \ "but your #{gem_deps_file} requires #{engine}" raise Gem::RubyVersionMismatch, message end if engine_version if engine_version != RUBY_ENGINE_VERSION message = "Your Ruby engine version is #{Gem.ruby_engine} #{RUBY_ENGINE_VERSION}, " \ "but your #{gem_deps_file} requires #{engine} #{engine_version}" raise Gem::RubyVersionMismatch, message end end true end
Beschränkt diese Gem-Abhängigkeitsdatei auf die angegebene Ruby version.
Sie können auch Optionen wie engine: und engine_version: angeben, um diese Gem-Abhängigkeitsdatei auf eine bestimmte Ruby-Engine und ihre Engine-Version zu beschränken. Diese Übereinstimmung wird durch die Konstanten RUBY_ENGINE und RUBY_ENGINE_VERSION durchgeführt.
Source
# File lib/rubygems/request_set/gem_dependency_api.rb, line 834 def source(url) Gem.sources.clear if @default_sources @default_sources = false Gem.sources << url end
Setzt url als Quelle für Gems für diese Abhängigkeits-API. RubyGems verwendet die standardmäßig konfigurierten Quellen, wenn keine Quelle angegeben wurde. Wenn eine Quelle gesetzt ist, wird nur diese Quelle verwendet.
Diese Methode unterscheidet sich im Verhalten von Bundler.
-
Die Quellen
:gemcutter, #:rubygemsund:rubyforgewerden nicht unterstützt, da sie in Bundler veraltet sind. -
Die Option
prepend:wird nicht unterstützt. Wenn Sie die Reihenfolge der Quellen ändern möchten, listen Sie sie in Ihrer bevorzugten Reihenfolge auf.