class Gem::Specification
Die Klasse Specification enthält die Informationen für ein Gem. Typischerweise definiert in einer .gemspec-Datei oder einem Rakefile, und sieht so aus
Gem::Specification.new do |s| s.name = 'example' s.version = '0.1.0' s.licenses = ['MIT'] s.summary = "This is an example!" s.description = "Much longer explanation of the example!" s.authors = ["Ruby Coder"] s.email = 'rubycoder@example.com' s.files = ["lib/example.rb"] s.homepage = 'https://rubygems.org/gems/example' s.metadata = { "source_code_uri" => "https://github.com/example/example" } end
Ab RubyGems 2.0 kann eine Specification beliebige Metadaten enthalten. Siehe metadata für Einschränkungen auf Format und Größe von Metadatenelementen, die Sie zu einer Spezifikation hinzufügen dürfen.
Constants
- NONEXISTENT_SPECIFICATION_VERSION
-
Die Versionsnummer einer Spezifikation, die keine angibt (d. h. RubyGems 0.7 oder früher).
Öffentliche Instanzmethoden
Source
# File lib/rubygems/specification.rb, line 186 def removed_method_calls @removed_method_calls ||= [] end
Optionale gemspec-Attribute
Constants
- LATEST_RUBY_WITHOUT_PATCH_VERSIONS
Attribute
Der Pfad im Gem für ausführbare Skripte. Normalerweise „exe“
Verwendung
spec.bindir = 'exe'
Die Zertifikatskette, die zum Signieren dieses Gems verwendet wurde. Siehe Gem::Security für Details.
Eine Nachricht, die nach der Installation des Gems angezeigt wird.
Verwendung
spec.post_install_message = "Thanks for installing!"
Die von diesem Gem benötigte RubyGems-Version
Der Schlüssel, der zum Signieren dieses Gems verwendet wurde. Siehe Gem::Security für Details.
Öffentliche Instanzmethoden
Source
# File lib/rubygems/specification.rb, line 543 def add_dependency(gem, *requirements) if requirements.uniq.size != requirements.size warn "WARNING: duplicated #{gem} dependency #{requirements}" end add_dependency_with_type(gem, :runtime, requirements) end
Fügt eine Runtime-Abhängigkeit namens gem mit requirements zu diesem Gem hinzu.
Verwendung
spec.add_dependency 'example', '~> 1.1', '>= 1.1.4'
Source
# File lib/rubygems/specification.rb, line 532 def add_development_dependency(gem, *requirements) add_dependency_with_type(gem, :development, requirements) end
Fügt eine Entwicklungsabhängigkeit namens gem mit requirements zu diesem Gem hinzu.
Verwendung
spec.add_development_dependency 'example', '~> 1.1', '>= 1.1.4'
Entwicklungsabhängigkeiten werden nicht standardmäßig installiert und nicht aktiviert, wenn ein Gem angefordert wird.
Source
# File lib/rubygems/specification.rb, line 566 def executables @executables ||= [] end
Im Gem enthaltene ausführbare Dateien.
Beispiel: Das Rake-Gem hat Rake als ausführbare Datei. Sie geben nicht den vollständigen Pfad an (wie in bin/rake); alle anwendungsähnlichen Dateien müssen im bindir gefunden werden. Diese Dateien müssen ausführbare Ruby-Dateien sein. Dateien, die Bash oder andere Interpreter verwenden, funktionieren nicht.
Enthaltene ausführbare Dateien dürfen nur Ruby-Skripte sein, keine Skripte für andere Sprachen oder kompilierte Binärdateien.
Verwendung
spec.executables << 'rake'
Source
# File lib/rubygems/specification.rb, line 583 def extensions @extensions ||= [] end
Zu erweiternde Erweiterungen bei der Installation des Gems, insbesondere die Pfade zu extconf.rb-ähnlichen Dateien, die zur Kompilierung von Erweiterungen verwendet werden.
Diese Dateien werden bei der Installation des Gems ausgeführt und führen dazu, dass der C-Code (oder was auch immer) auf dem Rechner des Benutzers kompiliert wird.
Verwendung
spec.extensions << 'ext/rmagic/extconf.rb'
Siehe Gem::Ext::Builder für Informationen zum Schreiben von Erweiterungen für Gems.
Source
# File lib/rubygems/specification.rb, line 599 def extra_rdoc_files @extra_rdoc_files ||= [] end
Zusätzliche Dateien, die zu RDoc hinzugefügt werden sollen, wie z. B. README oder doc/examples.txt
Wenn der Benutzer wählt, die RDoc-Dokumentation für ein Gem zu generieren (typischerweise bei der Installation), werden alle Bibliotheksdateien an RDoc zur Verarbeitung gesendet. Diese Option ermöglicht es Ihnen, einige Nicht-Code-Dateien für einen vollständigeren Satz von Dokumentationen einzuschließen.
Verwendung
spec.extra_rdoc_files = ['README', 'doc/user-guide.txt']
Source
# File lib/rubygems/specification.rb, line 463 def platform=(platform) @original_platform = platform case platform when Gem::Platform::CURRENT then @new_platform = Gem::Platform.local @original_platform = @new_platform.to_s when Gem::Platform then @new_platform = platform # legacy constants when nil, Gem::Platform::RUBY then @new_platform = Gem::Platform::RUBY when "mswin32" then # was Gem::Platform::WIN32 @new_platform = Gem::Platform.new "x86-mswin32" when "i586-linux" then # was Gem::Platform::LINUX_586 @new_platform = Gem::Platform.new "x86-linux" when "powerpc-darwin" then # was Gem::Platform::DARWIN @new_platform = Gem::Platform.new "ppc-darwin" else @new_platform = Gem::Platform.new platform end @platform = @new_platform.to_s end
Die Plattform, auf der dieses Gem ausgeführt wird.
Dies ist normalerweise Gem::Platform::RUBY oder Gem::Platform::CURRENT.
Die meisten Gems enthalten reinen Ruby-Code; sie sollten einfach den Standardwert beibehalten. Einige Gems enthalten C-Code (oder anderen Code), der zu einer Ruby „Erweiterung“ kompiliert werden soll. Das Gem sollte den Standardwert beibehalten, es sei denn, der Code kompiliert nur auf einem bestimmten Systemtyp. Einige Gems bestehen aus vorkompiliertem Code („Binär-Gems“). Es ist besonders wichtig, dass sie das Plattform-Attribut entsprechend setzen. Eine Abkürzung ist, die Plattform auf Gem::Platform::CURRENT zu setzen, was den Gem-Builder veranlasst, die Plattform für das System festzulegen, auf dem der Build durchgeführt wird.
Wenn dieses Attribut auf einen Wert ungleich dem Standard gesetzt ist, wird es in den Dateinamen des Gems aufgenommen, wenn es erstellt wird, z. B.: nokogiri-1.6.0-x86-mingw32.gem
Verwendung
spec.platform = Gem::Platform.local
Source
# File lib/rubygems/specification.rb, line 629 def rdoc_options @rdoc_options ||= [] end
Gibt die RDoc-Optionen an, die bei der Generierung von API-Dokumentationen verwendet werden sollen.
Verwendung
spec.rdoc_options << '--title' << 'Rake -- Ruby Make' << '--main' << 'README' << '--line-numbers'
Source
# File lib/rubygems/specification.rb, line 507 def require_paths=(val) @require_paths = Array(val) end
Pfade im Gem, die zu $LOAD_PATH hinzugefügt werden sollen, wenn dieses Gem aktiviert wird. Wenn Sie eine Erweiterung haben, müssen Sie „ext“ nicht zum require-Pfad hinzufügen, der Erweiterungs-Build-Prozess kopiert die Erweiterungsdateien für Sie nach „lib“.
Der Standardwert ist „lib“
Verwendung
# If all library files are in the root directory... spec.require_paths = ['.']
Source
# File lib/rubygems/specification.rb, line 659 def required_ruby_version=(req) @required_ruby_version = Gem::Requirement.create req @required_ruby_version.requirements.map! do |op, v| if v >= LATEST_RUBY_WITHOUT_PATCH_VERSIONS && v.release.segments.size == 4 [op == "~>" ? "=" : op, Gem::Version.new(v.segments.tap {|s| s.delete_at(3) }.join("."))] else [op, v] end end end
Die von diesem Gem benötigte Ruby-Version. Die Ruby-Version kann bis zur Patch-Ebene angegeben werden
$ ruby -v -e 'p Gem.ruby_version' ruby 2.0.0p247 (2013-06-27 revision 41674) [x86_64-darwin12.4.0] #<Gem::Version "2.0.0.247">
Vorabversionen können ebenfalls angegeben werden.
Verwendung
# This gem will work with 1.8.6 or greater... spec.required_ruby_version = '>= 1.8.6' # Only with final releases of major version 2 where minor version is at least 3 spec.required_ruby_version = '~> 2.3' # Only prereleases or final releases after 2.6.0.preview2 spec.required_ruby_version = '> 2.6.0.preview2' # This gem will work with 2.3.0 or greater, including major version 3, but lesser than 4.0.0 spec.required_ruby_version = '>= 2.3', '< 4'
Source
# File lib/rubygems/specification.rb, line 674 def required_rubygems_version=(req) @required_rubygems_version = Gem::Requirement.create req end
Die von diesem Gem benötigte RubyGems-Version
Source
# File lib/rubygems/specification.rb, line 687 def requirements @requirements ||= [] end
Listet die externen (außerhalb von RubyGems) Anforderungen auf, die erfüllt sein müssen, damit dieses Gem funktioniert. Es sind einfach Informationen für den Benutzer.
Verwendung
spec.requirements << 'libmagick, v6.0' spec.requirements << 'A good graphics card'
Schreibgeschützte Attribute
Attribute
Die RubyGems-Version, die zum Erstellen dieses Gems verwendet wurde.
Öffentliche Instanzmethoden
Source
# File lib/rubygems/specification.rb, line 714 def extensions_dir @extensions_dir ||= super end
Der Pfad, an dem dieses Gem seine Erweiterungen installiert.
Gem::BasicSpecification#extensions_dir aufEmpfohlene gemspec-Attribute
Attribute
Eine ausführliche Beschreibung dieses Gems
Die Beschreibung sollte detaillierter sein als die Zusammenfassung, aber nicht übermäßig lang. Ein paar Absätze sind eine empfohlene Länge ohne Beispiele oder Formatierung.
Verwendung
spec.description = <<~EOF Rake is a Make-like program implemented in Ruby. Tasks and dependencies are specified in standard Ruby syntax. EOF
Eine Kontakt-E-Mail-Adresse (oder Adressen) für dieses Gem
Verwendung
spec.email = 'john.jones@example.com' spec.email = ['jack@example.com', 'jill@example.com']
Die URL der Homepage dieses Gems
Verwendung
spec.homepage = 'https://github.com/ruby/rake'
Die Metadaten enthalten zusätzliche Daten für dieses Gem, die für andere Konsumenten nützlich sein können und von Gem-Autoren gesetzt werden können.
Metadatenelemente unterliegen folgenden Einschränkungen
-
Die Metadaten müssen ein
Hash-Objekt sein -
Alle Schlüssel und Werte müssen Strings sein
-
Schlüssel dürfen maximal 128 Bytes und Werte maximal 1024 Bytes lang sein
-
Alle Strings müssen UTF-8 sein, keine Binärdaten sind erlaubt
Sie können Metadaten verwenden, um Links zur Homepage, zum Code, zur Dokumentation, zum Wiki, zur Mailingliste, zum Issue-Tracker und zur Änderungsliste Ihres Gems anzugeben.
s.metadata = { "bug_tracker_uri" => "https://example.com/user/bestgemever/issues", "changelog_uri" => "https://example.com/user/bestgemever/CHANGELOG.md", "documentation_uri" => "https://www.example.info/gems/bestgemever/0.0.1", "homepage_uri" => "https://bestgemever.example.io", "mailing_list_uri" => "https://groups.example.com/bestgemever", "source_code_uri" => "https://example.com/user/bestgemever", "wiki_uri" => "https://example.com/user/bestgemever/wiki", "funding_uri" => "https://example.com/donate" }
Diese Links werden auf der Gem-Seite auf rubygems.org verwendet und müssen die Validierung gegen den folgenden Regex bestehen.
%r{\Ahttps?:\/\/([^\s:@]+:[^\s:@]*@)?[A-Za-z\d\-]+(\.[A-Za-z\d\-]+)+\.?(:\d{1,5})?([\/?]\S*)?\z}
Die von diesem Gem benötigte Ruby-Version
Verwendung
spec.required_ruby_version = '>= 2.7.0'
Öffentliche Instanzmethoden
Source
# File lib/rubygems/specification.rb, line 348 def license=(o) self.licenses = [o] end
Die Lizenz für dieses Gem.
Die Lizenz darf nicht länger als 64 Zeichen sein.
Dies sollte nur der Name Ihrer Lizenz sein. Der vollständige Text der Lizenz sollte beim Erstellen des Gems (auf der obersten Ebene) enthalten sein.
Der einfachste Weg ist die Angabe der standardmäßigen SPDX-ID spdx.org/licenses/ für die Lizenz. Idealerweise sollten Sie eine wählen, die von der OSI (Open Source Initiative) opensource.org/licenses/ genehmigt ist.
Die am häufigsten verwendeten OSI-genehmigten Lizenzen sind MIT und Apache-2.0. GitHub bietet auch einen Lizenzauswähler unter choosealicense.com/.
Sie können auch eine benutzerdefinierte Lizenzdatei zusammen mit Ihrem gemspec verwenden und eine LicenseRef-<idstring> angeben, wobei idstring der Name der Datei ist, die den Lizenztext enthält.
Sie sollten eine Lizenz für Ihr Gem angeben, damit die Leute wissen, wie sie es verwenden dürfen und welche Einschränkungen Sie darauf legen. Das Nicht-Angeben einer Lizenz bedeutet, dass alle Rechte vorbehalten sind; andere haben kein Recht, den Code für irgendeinen Zweck zu verwenden.
Sie können mehrere Lizenzen mit licenses= festlegen
Verwendung
spec.license = 'MIT'
Source
# File lib/rubygems/specification.rb, line 365 def licenses=(licenses) @licenses = Array licenses end
Die Lizenz(en) für die Bibliothek.
Jede Lizenz muss ein kurzer Name sein, nicht länger als 64 Zeichen.
Dies sollte nur der Name Ihrer Lizenz sein. Der vollständige Text der Lizenz sollte beim Erstellen des Gems im Gem enthalten sein.
Siehe license= für weitere Erläuterungen
Verwendung
spec.licenses = ['MIT', 'GPL-2.0']
Erforderliche gemspec-Attribute
Attribute
Der Name dieses Gems.
Verwendung
spec.name = 'rake'
Eine kurze Zusammenfassung der Beschreibung dieses Gems. Angezeigt in gem list -d.
Die description sollte detaillierter sein als die Zusammenfassung.
Verwendung
spec.summary = "This is a small summary of my gem"
Die Version dieses Gems.
Die Versionszeichenkette kann Zahlen und Punkte enthalten, wie z. B. 1.0.0. Ein Gem ist ein „Prerelease“-Gem, wenn die Version einen Buchstaben enthält, wie z. B. 1.0.0.pre.
Verwendung
spec.version = '0.4.1'
Öffentliche Instanzmethoden
Source
# File lib/rubygems/specification.rb, line 247 def files # DO NOT CHANGE TO ||= ! This is not a normal accessor. (yes, it sucks) # DOC: Why isn't it normal? Why does it suck? How can we fix this? @files = [@files, @test_files, add_bindir(@executables), @extra_rdoc_files, @extensions].flatten.compact.uniq.sort end
Im Gem enthaltene Dateien. Sie können diese Accessor nicht anhängen, Sie müssen ihm einen Wert zuweisen.
Fügen Sie nur Dateien hinzu, die Sie zu dieser Liste anfordern können, keine Verzeichnisse usw.
Verzeichnisse werden beim Erstellen eines Gems automatisch aus dieser Liste entfernt, andere Nicht-Dateien verursachen einen Fehler.
Verwendung
require 'rake' spec.files = FileList['lib/**/*.rb', 'bin/*', '[A-Z]*'].to_a # or without Rake... spec.files = Dir['lib/**/*.rb'] + Dir['bin/*'] spec.files += Dir['[A-Z]*'] spec.files.reject! { |fn| fn.include? "CVS" }
Specification-Interna
Attribute
Wahr, wenn diese Gemspec aktiviert wurde. Dieses Attribut wird nicht gespeichert.
Wahr, wenn diese Gemspec aktiviert wurde. Dieses Attribut wird nicht gespeichert.
Die Gem::Specification-Version dieser Gemspec.
Setzen Sie dies nicht, es wird automatisch gesetzt, wenn das Gem verpackt wird.
Öffentliche Klassenmethoden
Source
# File lib/rubygems/specification.rb, line 1232 def self._load(str) Gem.load_yaml Gem.load_safe_marshal yaml_set = false retry_count = 0 array = begin Gem::SafeMarshal.safe_load str rescue ArgumentError => e # Avoid an infinite retry loop when the argument error has nothing to do # with the classes not being defined. # 1 retry each allowed in case all 3 of # - YAML # - YAML::Syck::DefaultKey # - YAML::PrivateType # need to be defined raise if retry_count >= 3 # # Some very old marshaled specs included references to `YAML::PrivateType` # and `YAML::Syck::DefaultKey` constants due to bugs in the old emitter # that generated them. Workaround the issue by defining the necessary # constants and retrying. # message = e.message raise unless message.include?("YAML::") unless Object.const_defined?(:YAML) Object.const_set "YAML", Psych yaml_set = true end if message.include?("YAML::Syck::") YAML.const_set "Syck", YAML unless YAML.const_defined?(:Syck) YAML::Syck.const_set "DefaultKey", Class.new if message.include?("YAML::Syck::DefaultKey") && !YAML::Syck.const_defined?(:DefaultKey) elsif message.include?("YAML::PrivateType") && !YAML.const_defined?(:PrivateType) YAML.const_set "PrivateType", Class.new end retry_count += 1 retry ensure Object.__send__(:remove_const, "YAML") if yaml_set end spec = Gem::Specification.new spec.instance_variable_set :@specification_version, array[1] current_version = CURRENT_SPECIFICATION_VERSION field_count = if spec.specification_version > current_version spec.instance_variable_set :@specification_version, current_version MARSHAL_FIELDS[current_version] else MARSHAL_FIELDS[spec.specification_version] end if array.size < field_count raise TypeError, "invalid Gem::Specification format #{array.inspect}" end spec.instance_variable_set :@rubygems_version, array[0] # spec version spec.instance_variable_set :@name, array[2] spec.instance_variable_set :@version, array[3] spec.date = array[4] spec.instance_variable_set :@summary, array[5] spec.instance_variable_set :@required_ruby_version, array[6] spec.instance_variable_set :@required_rubygems_version, array[7] spec.platform = array[8] spec.instance_variable_set :@dependencies, array[9] # offset due to rubyforge_project removal spec.instance_variable_set :@email, array[11] spec.instance_variable_set :@authors, array[12] spec.instance_variable_set :@description, array[13] spec.instance_variable_set :@homepage, array[14] # offset due to has_rdoc removal spec.instance_variable_set :@licenses, array[17] spec.instance_variable_set :@metadata, array[18] spec.instance_variable_set :@loaded, false spec.instance_variable_set :@activated, false spec end
Lädt das benutzerdefinierte Marshal-Format und initialisiert Standardwerte neu nach Bedarf
Source
# File lib/rubygems/specification.rb, line 845 def self.add_spec(spec) specification_record.add_spec(spec) end
Fügt spec zu den bekannten Spezifikationen hinzu und hält die Sammlung richtig sortiert.
Source
# File lib/rubygems/specification.rb, line 860 def self.all warn "NOTE: Specification.all called from #{caller(1, 1).first}" unless Gem::Deprecate.skip _all end
Gibt alle Spezifikationen zurück. Die Verwendung dieser Methode wird nicht empfohlen. Wahrscheinlich möchten Sie stattdessen eine der Enumerable-Methoden verwenden.
Source
# File lib/rubygems/specification.rb, line 869 def self.all=(specs) specification_record.all = specs end
Setzt die bekannten Specs auf specs.
Source
# File lib/rubygems/specification.rb, line 876 def self.all_names specification_record.all_names end
Gibt vollständige Namen aller Specs in sortierter Reihenfolge zurück.
Source
# File lib/rubygems/specification.rb, line 885 def self.array_attributes @@array_attributes.dup end
Gibt die Liste aller Array-orientierten Instanzvariablen zurück.
Source
# File lib/rubygems/specification.rb, line 894 def self.attribute_names @@attributes.dup end
Gibt die Liste aller Instanzvariablen zurück.
Source
# File lib/rubygems/specification.rb, line 792 def self.default_stubs(pattern = "*.gemspec") base_dir = Gem.default_dir gems_dir = File.join base_dir, "gems" gemspec_stubs_in(Gem.default_specifications_dir, pattern) do |path| Gem::StubSpecification.default_gemspec_stub(path, base_dir, gems_dir) end end
Gibt eine Gem::StubSpecification für Standard-Gems zurück
Source
# File lib/rubygems/specification.rb, line 901 def self.dirs @@dirs ||= Gem::SpecificationRecord.dirs_from(gem_path) end
Gibt die Verzeichnisse zurück, die Specification zum Auffinden von Specs verwendet.
Source
# File lib/rubygems/specification.rb, line 909 def self.dirs=(dirs) reset @@dirs = Gem::SpecificationRecord.dirs_from(Array(dirs)) end
Setzt die Verzeichnisse, die Specification zum Auffinden von Specs verwendet. Das Setzen von hier setzt die Liste der bekannten Specs zurück.
Source
# File lib/rubygems/specification.rb, line 921 def self.each(&block) specification_record.each(&block) end
Zählt jeden bekannten Spec auf. Siehe ::dirs= und ::add_spec, um die Liste der Specs festzulegen.
Source
# File lib/rubygems/specification.rb, line 974 def self.find_active_stub_by_path(path) specification_record.find_active_stub_by_path(path) end
Gibt die beste Spezifikation zurück, die die Datei path enthält, unter den bereits aktivierten.
Source
# File lib/rubygems/specification.rb, line 935 def self.find_all_by_full_name(full_name) stubs.select {|s| s.full_name == full_name }.map(&:to_spec) end
Gibt alle Specs zurück, die den angegebenen full_name haben
Source
# File lib/rubygems/specification.rb, line 928 def self.find_all_by_name(name, *requirements) specification_record.find_all_by_name(name, *requirements) end
Gibt alle Specs zurück, die name und optionale requirements entsprechen.
Source
# File lib/rubygems/specification.rb, line 951 def self.find_by_full_name(full_name) stubs.find {|s| s.full_name == full_name }&.to_spec end
Find die beste Spezifikation, die einem full_name entspricht.
Source
# File lib/rubygems/specification.rb, line 943 def self.find_by_name(name, *requirements) requirements = Gem::Requirement.default if requirements.empty? Gem::Dependency.new(name, *requirements).to_spec end
Find die beste Spezifikation, die einem name und requirements entspricht. Löst aus, wenn die Abhängigkeit nicht zu einer gültigen Spezifikation aufgelöst werden kann.
Source
# File lib/rubygems/specification.rb, line 958 def self.find_by_path(path) specification_record.find_by_path(path) end
Gibt die beste Spezifikation zurück, die die Datei path enthält.
Source
# File lib/rubygems/specification.rb, line 981 def self.find_in_unresolved(path) unresolved_specs.find_all {|spec| spec.contains_requirable_file? path } end
Gibt aktuell ungelöste Specs zurück, die die Datei path enthalten.
Source
# File lib/rubygems/specification.rb, line 989 def self.find_in_unresolved_tree(path) unresolved_specs.each do |spec| spec.traverse do |_from_spec, _dep, to_spec, trail| if to_spec.has_conflicts? || to_spec.conflicts_when_loaded_with?(trail) :next else return trail.reverse if to_spec.contains_requirable_file? path end end end [] end
Durchsucht alle ungelösten Abhängigkeiten und Unterabhängigkeiten und gibt Specs zurück, die die Datei path enthalten.
Source
# File lib/rubygems/specification.rb, line 966 def self.find_inactive_by_path(path) specification_record.find_inactive_by_path(path) end
Gibt die beste Spezifikation zurück, die die Datei path enthält, unter den nicht aktivierten Specs.
Source
# File lib/rubygems/specification.rb, line 1016 def self.from_yaml(input) Gem.load_yaml input = normalize_yaml_input input spec = Gem::SafeYAML.safe_load input if spec && spec.class == FalseClass raise Gem::EndOfYAMLException end unless Gem::Specification === spec raise Gem::Exception, "YAML data doesn't evaluate to gem specification" end spec.specification_version ||= NONEXISTENT_SPECIFICATION_VERSION spec.reset_nil_attributes_to_default spec.flatten_require_paths spec end
Spezieller Lader für YAML-Dateien. Wenn ein Specification-Objekt aus einer YAML-Datei geladen wird, umgeht es die normale Ruby-Objektinitialisierungsroutine (initialize). Diese Methode gleicht dies aus und behandelt Gems unterschiedlichen Alters.
input kann alles sein, was YAML.load() akzeptiert: String oder IO.
Source
# File lib/rubygems/specification.rb, line 1048 def self.latest_spec_for(name) specification_record.latest_spec_for(name) end
Gibt die neueste installierte Spezifikation für das Gem name zurück.
Source
# File lib/rubygems/specification.rb, line 1041 def self.latest_specs(prerelease = false) specification_record.latest_specs(prerelease) end
Gibt die neuesten Specs zurück, optional einschließlich Vorabversionen, wenn prerelease true ist.
Source
# File lib/rubygems/specification.rb, line 1069 def self.load(file) return unless file spec = @load_cache_mutex.synchronize { @load_cache[file] } return spec if spec return unless File.file?(file) code = Gem.open_file(file, "r:UTF-8:-", &:read) begin spec = eval code, binding, file if Gem::Specification === spec spec.loaded_from = File.expand_path file.to_s @load_cache_mutex.synchronize do prev = @load_cache[file] if prev spec = prev else @load_cache[file] = spec end end return spec end warn "[#{file}] isn't a Gem::Specification (#{spec.class} instead)." rescue SignalException, SystemExit raise rescue SyntaxError, StandardError => e warn "Invalid gemspec in [#{file}]: #{e}" end nil end
Lädt Gemspec im Ruby-Format aus file.
Source
# File lib/rubygems/specification.rb, line 833 def self.load_defaults each_spec([Gem.default_specifications_dir]) do |spec| # #load returns nil if the spec is bad, so we just ignore # it at this stage Gem.register_default_spec(spec) end end
Lädt die Standard-Spezifikationen. Es sollte nur einmal aufgerufen werden.
Source
# File lib/rubygems/specification.rb, line 1926 def initialize(name = nil, version = nil) super() @gems_dir = nil @base_dir = nil @loaded = false @activated = false @loaded_from = nil @original_platform = nil @installed_by_version = nil set_nil_attributes_to_nil set_not_nil_attributes_to_default_values @new_platform = Gem::Platform::RUBY self.name = name if name self.version = version if version if (platform = Gem.platforms.last) && platform != Gem::Platform::RUBY && platform != Gem::Platform.local self.platform = platform end yield self if block_given? end
Konstruktor für Specification. Weist die Standardwerte den Attributen zu und übergibt sich selbst zur weiteren Initialisierung. Nimmt optional name und version entgegen.
Gem::BasicSpecification::new aufSource
# File lib/rubygems/specification.rb, line 1108 def self.non_nil_attributes @@non_nil_attributes.dup end
Specification-Attribute, die nicht null sein dürfen
Source
# File lib/rubygems/specification.rb, line 1115 def self.normalize_yaml_input(input) result = input.respond_to?(:read) ? input.read : input result = "--- " + result unless result.start_with?("--- ") result = result.dup result.gsub!(/ !!null \n/, " \n") # date: 2011-04-26 00:00:00.000000000Z # date: 2011-04-26 00:00:00.000000000 Z result.gsub!(/^(date: \d{4}-\d{2}-\d{2} \d{2}:\d{2}:\d{2}\.\d+?)Z/, '\1 Z') result end
Stellt sicher, dass die YAML-Spezifikation mit Strichen richtig formatiert ist
Source
# File lib/rubygems/specification.rb, line 1133 def self.outdated outdated_and_latest_version.map {|local, _| local.name } end
Gibt eine Liste aller veralteten lokalen Gem-Namen zurück. Diese Methode ist AUFWENDIG, da sie Spezifikationen vom Server abrufen muss.
Verwenden Sie outdated_and_latest_version, wenn Sie auch die neueste Remote-Version abrufen möchten.
Source
# File lib/rubygems/specification.rb, line 1144 def self.outdated_and_latest_version return enum_for __method__ unless block_given? # TODO: maybe we should switch to rubygems' version service? fetcher = Gem::SpecFetcher.fetcher latest_specs(true).each do |local_spec| dependency = Gem::Dependency.new local_spec.name, ">= #{local_spec.version}" remotes, = fetcher.search_for_dependency dependency remotes = remotes.map {|n, _| n.version } latest_remote = remotes.sort.last yield [local_spec, latest_remote] if latest_remote && local_spec.version < latest_remote end nil end
Enumeriert die veralteten lokalen Gems und übergibt die lokale Spezifikation und die neueste Remote-Version.
Diese Methode kann einige Zeit dauern, da sie jedes lokale Gem gegen den Index des Servers prüfen muss.
Source
# File lib/rubygems/specification.rb, line 852 def self.remove_spec(spec) specification_record.remove_spec(spec) end
Entfernt spec aus den bekannten Specs.
Source
# File lib/rubygems/specification.rb, line 1169 def self.required_attribute?(name) @@required_attributes.include? name.to_sym end
Ist name ein erforderliches Attribut?
Source
# File lib/rubygems/specification.rb, line 1176 def self.required_attributes @@required_attributes.dup end
Erforderliche Spezifikationsattribute
Source
# File lib/rubygems/specification.rb, line 1184 def self.reset @@dirs = nil Gem.pre_reset_hooks.each(&:call) @specification_record = nil clear_load_cache unless unresolved_deps.empty? unresolved = unresolved_deps.filter_map do |name, dep| matching_versions = find_all_by_name(name) next if dep.latest_version? && matching_versions.any?(&:default_gem?) [dep, matching_versions.uniq(&:full_name)] end.to_h unless unresolved.empty? warn "WARN: Unresolved or ambiguous specs during Gem::Specification.reset:" unresolved.each do |dep, versions| warn " #{dep}" unless versions.empty? warn " Available/installed versions of this gem:" versions.each {|s| warn " - #{s.version}" } end end warn "WARN: Clearing out unresolved specs. Try 'gem cleanup <gem>'" warn "Please report a bug if this causes problems." end unresolved_deps.clear end Gem.post_reset_hooks.each(&:call) end
Setzt die Liste der bekannten Specs zurück und führt die in Gem registrierten Pre- und Post-Reset-Hooks aus.
Source
# File lib/rubygems/specification.rb, line 1220 def self.specification_record @specification_record ||= Gem::SpecificationRecord.new(dirs) end
Erfasst alle aktuell bekannten Spezifikationen
Source
# File lib/rubygems/specification.rb, line 785 def self.stubs specification_record.stubs end
Gibt eine Gem::StubSpecification für jedes installierte Gem zurück
Source
# File lib/rubygems/specification.rb, line 804 def self.stubs_for(name) specification_record.stubs_for(name) end
Gibt eine Gem::StubSpecification für das installierte Gem namens name zurück; gibt nur Stubs zurück, die Gem.platforms entsprechen
Source
# File lib/rubygems/specification.rb, line 1225 def self.unresolved_deps @unresolved_deps ||= Hash.new {|h, n| h[n] = Gem::Dependency.new n } end
DOC: Diese Methode muss dokumentiert oder mit nodoc versehen werden
Private Klassenmethoden
Source
# File lib/rubygems/specification.rb, line 1003 def self.unresolved_specs unresolved_deps.values.flat_map(&:to_specs) end
Öffentliche Instanzmethoden
Source
# File lib/rubygems/specification.rb, line 1337 def _dump(limit) Marshal.dump [ @rubygems_version, @specification_version, @name, @version, date, @summary, @required_ruby_version, @required_rubygems_version, @original_platform, @dependencies, "", # rubyforge_project @email, @authors, @description, @homepage, true, # has_rdoc @new_platform, @licenses, @metadata, ] end
Gibt nur entscheidende Instanzvariablen aus.
Source
# File lib/rubygems/specification.rb, line 1426 def abbreviate self.files = [] self.test_files = [] self.rdoc_options = [] self.extra_rdoc_files = [] self.cert_chain = [] end
Kürzt die Spec für den Download ab. Abgekürzte Specs werden nur zum Suchen, Herunterladen und für verwandte Aktivitäten verwendet und benötigen keine Bereitstellungsinformationen (z. B. Dateiliste). Daher kürzen wir die Spec, wodurch sie für schnellere Downloads viel kleiner wird.
Source
# File lib/rubygems/specification.rb, line 1367 def activate other = Gem.loaded_specs[name] if other check_version_conflict other return false end raise_if_conflicts activate_dependencies add_self_to_load_path Gem.loaded_specs[name] = self @activated = true @loaded = true true end
Aktiviert diese Spec, registriert sie als geladene Spec und fügt ihre lib-Pfade zu $LOAD_PATH hinzu. Gibt wahr zurück, wenn die Spec aktiviert wurde, falsch, wenn sie zuvor aktiviert wurde. Gerate aus, wenn es bei der Aktivierung zu Konflikten kommt.
Source
# File lib/rubygems/specification.rb, line 1391 def activate_dependencies unresolved = Gem::Specification.unresolved_deps runtime_dependencies.each do |spec_dep| if loaded = Gem.loaded_specs[spec_dep.name] next if spec_dep.matches_spec? loaded msg = "can't satisfy '#{spec_dep}', already activated '#{loaded.full_name}'" e = Gem::LoadError.new msg e.name = spec_dep.name raise e end specs = spec_dep.matching_specs(true).uniq(&:full_name) if specs.size == 0 raise Gem::MissingSpecError.new(spec_dep.name, spec_dep.requirement, "at: #{spec_file}") elsif specs.size == 1 specs.first.activate else name = spec_dep.name unresolved[name] = unresolved[name].merge spec_dep end end unresolved.delete self.name end
Aktiviert alle eindeutig aufgelösten Runtime-Abhängigkeiten dieser Spec. Fügt alle mehrdeutigen Abhängigkeiten der Liste der ungelösten hinzu, um später nach Bedarf aufgelöst zu werden.
Source
# File lib/rubygems/specification.rb, line 1462 def add_bindir(executables) return nil if executables.nil? if @bindir Array(executables).map {|e| File.join(@bindir, e) } else executables end rescue StandardError nil end
Gibt ein Array mit bindir zurück, das an jede ausführbare Datei in der Liste executables angehängt ist
Source
# File lib/rubygems/specification.rb, line 1501 def add_self_to_load_path return if default_gem? paths = full_require_paths Gem.add_to_load_path(*paths) end
Fügt die require-Pfade dieser Spec an der richtigen Stelle zu LOAD_PATH hinzu.
Source
# File lib/rubygems/specification.rb, line 1980 def base_dir return Gem.dir unless loaded_from @base_dir ||= if default_gem? File.dirname File.dirname File.dirname loaded_from else File.dirname File.dirname loaded_from end end
Source
# File lib/rubygems/specification.rb, line 1531 def bin_dir @bin_dir ||= File.join gem_dir, bindir end
Gibt den vollständigen Pfad zum Verzeichnis mit ausführbaren Dateien des installierten Gems zurück.
HINWEIS: Verwechseln Sie dies nicht mit bindir, das nur ‚bin‘ ist, nicht ein vollständiger Pfad.
Source
# File lib/rubygems/specification.rb, line 1538 def bin_file(name) File.join bin_dir, name end
Gibt den vollständigen Pfad zu einer ausführbaren Datei namens name in diesem Gem zurück.
Source
# File lib/rubygems/specification.rb, line 1545 def build_args if File.exist? build_info_file build_info = File.readlines build_info_file build_info = build_info.map(&:strip) build_info.delete "" build_info else [] end end
Gibt die build_args zurück, die zum Installieren des Gems verwendet wurden
Source
# File lib/rubygems/specification.rb, line 1593 def build_info_dir File.join base_dir, "build_info" end
Gibt den vollständigen Pfad zum Verzeichnis der Build-Informationen zurück
Source
# File lib/rubygems/specification.rb, line 1601 def build_info_file File.join build_info_dir, "#{full_name}.info" end
Gibt den vollständigen Pfad zur Datei zurück, die die Build-Informationen enthält, die beim Installieren des Gems generiert wurden
Source
# File lib/rubygems/specification.rb, line 1609 def cache_dir File.join base_dir, "cache" end
Gibt den vollständigen Pfad zum Cache-Verzeichnis zurück, das das zwischengespeicherte Gem dieser Spec enthält.
Source
# File lib/rubygems/specification.rb, line 1616 def cache_file File.join cache_dir, "#{full_name}.gem" end
Gibt den vollständigen Pfad zum zwischengespeicherten Gem für diese Spec zurück.
Source
# File lib/rubygems/specification.rb, line 1623 def conflicts conflicts = {} runtime_dependencies.each do |dep| spec = Gem.loaded_specs[dep.name] if spec && !spec.satisfies_requirement?(dep) (conflicts[spec] ||= []) << dep end end env_req = Gem.env_requirement(name) (conflicts[self] ||= []) << env_req unless env_req.satisfied_by? version conflicts end
Gibt mögliche Konflikte mit den aktuell geladenen Specs zurück.
Source
# File lib/rubygems/specification.rb, line 1667 def date @date ||= Time.utc(*Gem.source_date_epoch.utc.to_a[3..5].reverse) end
Das Datum, an dem dieses Gem erstellt wurde.
Wenn SOURCE_DATE_EPOCH als Umgebungsvariable gesetzt ist, verwenden Sie diese, um reproduzierbare Builds zu unterstützen. Andernfalls wird das aktuelle UTC-Datum als Standard verwendet.
Details zu SOURCE_DATE_EPOCH: reproducible-builds.org/specs/source-date-epoch/
Source
# File lib/rubygems/specification.rb, line 1687 def date=(date) # We want to end up with a Time object with one-day resolution. # This is the cleanest, most-readable, faster-than-using-Date # way to do it. @date = case date when String then if DateTimeFormat =~ date Time.utc($1.to_i, $2.to_i, $3.to_i) else raise(Gem::InvalidSpecificationException, "invalid date format in specification: #{date.inspect}") end when Time, DateLike then Time.utc(date.year, date.month, date.day) else TODAY end end
Das Datum, an dem dieses Gem erstellt wurde
Setzen Sie dies NICHT, es wird automatisch gesetzt, wenn das Gem verpackt wird.
Source
# File lib/rubygems/specification.rb, line 1709 def default_value(name) @@default_value[name] end
Der Standardwert für das Spezifikationsattribut name
Source
# File lib/rubygems/specification.rb, line 1719 def dependencies @dependencies ||= [] end
Eine Liste von Gem::Dependency-Objekten, von denen dieses Gem abhängt.
Verwenden Sie add_dependency oder add_development_dependency, um Abhängigkeiten zu einem Gem hinzuzufügen.
Source
# File lib/rubygems/specification.rb, line 1729 def dependent_gems(check_dev = true) out = [] Gem::Specification.each do |spec| deps = check_dev ? spec.dependencies : spec.runtime_dependencies deps.each do |dep| next unless satisfies_requirement?(dep) sats = [] find_all_satisfiers(dep) do |sat| sats << sat end out << [spec, dep, sats] end end out end
Gibt eine Liste aller Gems zurück, die eine Abhängigkeit von dieser Gemspec haben. Die Liste ist mit Einträgen strukturiert, die den folgenden entsprechen
[depending_gem, dependency, [list_of_gems_that_satisfy_dependency]]
Source
# File lib/rubygems/specification.rb, line 1748 def dependent_specs runtime_dependencies.flat_map(&:to_specs) end
Gibt alle Specs zurück, die den Runtime-Abhängigkeiten dieser Spec entsprechen.
Source
# File lib/rubygems/specification.rb, line 1755 def description=(str) @description = str.to_s end
Eine detaillierte Beschreibung dieses Gems. Siehe auch summary
Source
# File lib/rubygems/specification.rb, line 1762 def development_dependencies dependencies.select {|d| d.type == :development } end
Liste von Abhängigkeiten, die für die Entwicklung verwendet werden
Source
# File lib/rubygems/specification.rb, line 1774 def doc_dir(type = nil) @doc_dir ||= File.join base_dir, "doc", full_name if type File.join @doc_dir, type else @doc_dir end end
Gibt den vollständigen Pfad zum Dokumentationsverzeichnis dieser Spec zurück. Wenn type angegeben ist, wird es am Ende angehängt. Zum Beispiel
spec.doc_dir # => "/path/to/gem_repo/doc/a-1" spec.doc_dir 'ri' # => "/path/to/gem_repo/doc/a-1/ri"
Source
# File lib/rubygems/specification.rb, line 1804 def executable (val = executables) && val.first end
Singulärer Accessor für executables
Source
# File lib/rubygems/specification.rb, line 1811 def executable=(o) self.executables = [o] end
Singulärer Accessor für executables
Source
# File lib/rubygems/specification.rb, line 1818 def executables=(value) @executables = Array(value) end
Setzt die ausführbaren Dateien auf value und stellt sicher, dass es sich um ein Array handelt.
Source
# File lib/rubygems/specification.rb, line 1825 def extensions=(extensions) @extensions = Array extensions end
Setzt die Erweiterungen auf extensions und stellt sicher, dass es sich um ein Array handelt.
Source
# File lib/rubygems/specification.rb, line 1832 def extra_rdoc_files=(files) @extra_rdoc_files = Array files end
Setzt extra_rdoc_files auf files und stellt sicher, dass es sich um ein Array handelt.
Source
# File lib/rubygems/specification.rb, line 1841 def file_name "#{full_name}.gem" end
Der Standard-Dateiname des Gems (generiert). Siehe auch spec_name.
spec.file_name # => "example-1.0.gem"
Source
# File lib/rubygems/specification.rb, line 1848 def files=(files) @files = Array files end
Setzt die Dateien auf files und stellt sicher, dass es sich um ein Array handelt.
Source
# File lib/rubygems/specification.rb, line 1866 def for_cache spec = dup spec.files = nil spec.test_files = nil spec end
Erstellt eine duplizierte Spec ohne große Blobs, die zur Laufzeit nicht verwendet werden.
Source
# File lib/rubygems/specification.rb, line 1883 def gems_dir @gems_dir ||= File.join(base_dir, "gems") end
Source
# File lib/rubygems/specification.rb, line 1649 def has_conflicts? return true unless Gem.env_requirement(name).satisfied_by?(version) runtime_dependencies.any? do |dep| spec = Gem.loaded_specs[dep.name] spec && !spec.satisfies_requirement?(dep) end rescue ArgumentError => e raise e, "#{name} #{version}: #{e.message}" end
Gibt wahr zurück, wenn es mögliche Konflikte mit den aktuell geladenen Specs gibt.
Source
# File lib/rubygems/specification.rb, line 1955 def initialize_copy(other_spec) self.class.array_attributes.each do |name| name = :"@#{name}" next unless other_spec.instance_variable_defined? name begin val = other_spec.instance_variable_get(name) if val instance_variable_set name, val.dup elsif Gem.configuration.really_verbose warn "WARNING: #{full_name} has an invalid nil value for #{name}" end rescue TypeError e = Gem::FormatException.new \ "#{full_name} has an invalid value for #{name}" e.file_path = loaded_from raise e end end @required_ruby_version = other_spec.required_ruby_version.dup @required_rubygems_version = other_spec.required_rubygems_version.dup end
Dupliziert Array- und Gem::Requirement-Attribute von other_spec, damit der Zustand nicht geteilt wird.
Source
# File lib/rubygems/specification.rb, line 2504 def keep_only_files_and_directories @executables.delete_if {|x| File.directory?(File.join(@bindir, x)) } @extensions.delete_if {|x| File.directory?(x) && !File.symlink?(x) } @extra_rdoc_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) } @files.delete_if {|x| File.directory?(x) && !File.symlink?(x) } @test_files.delete_if {|x| File.directory?(x) && !File.symlink?(x) } end
Source
# File lib/rubygems/specification.rb, line 2000 def lib_files @files.select do |file| require_paths.any? do |path| file.start_with? path end end end
Dateien im Gem unter einem der require_paths
Source
# File lib/rubygems/specification.rb, line 2011 def license licenses.first end
Singulärer Accessor für licenses
Source
# File lib/rubygems/specification.rb, line 2020 def licenses @licenses ||= [] end
Plural-Accessor zum Setzen von Lizenzen
Siehe license= für Details
Source
# File lib/rubygems/specification.rb, line 2055 def missing_extensions? return false if extensions.empty? return false if default_gem? return false if File.exist? gem_build_complete_path true end
Fehlen dieser Spezifikation ihre Erweiterungen? Wenn dies wahr zurückgibt, möchten Sie wahrscheinlich build_extensions aufrufen
Source
# File lib/rubygems/specification.rb, line 2086 def name_tuple Gem::NameTuple.new name, version, original_platform end
Gibt ein NameTuple zurück, das diese Specification repräsentiert
Source
# File lib/rubygems/specification.rb, line 2069 def normalize if defined?(@extra_rdoc_files) && @extra_rdoc_files @extra_rdoc_files.uniq! @files ||= [] @files.concat(@extra_rdoc_files) end @files = @files.uniq.sort if @files @extensions = @extensions.uniq.sort if @extensions @test_files = @test_files.uniq.sort if @test_files @executables = @executables.uniq.sort if @executables @extra_rdoc_files = @extra_rdoc_files.uniq.sort if @extra_rdoc_files end
Normalisiert die Dateiliste, so dass
-
Alle Dateilisten redundant sind.
-
In
extra_rdoc_filesreferenzierte Dateien sind in der Paketdateiliste enthalten.
Source
# File lib/rubygems/specification.rb, line 2112 def platform @new_platform ||= Gem::Platform::RUBY # rubocop:disable Naming/MemoizedInstanceVariableName end
Die Plattform, auf der dieses Gem ausgeführt wird. Siehe Gem::Platform für Details.
Source
# File lib/rubygems/specification.rb, line 2178 def rdoc_options=(options) @rdoc_options = Array options end
Setzt rdoc_options auf value und stellt sicher, dass es sich um ein Array handelt.
Source
# File lib/rubygems/specification.rb, line 2185 def require_path (val = require_paths) && val.first end
Singulärer Accessor für require_paths
Source
# File lib/rubygems/specification.rb, line 2192 def require_path=(path) self.require_paths = Array(path) end
Singulärer Accessor für require_paths
Source
# File lib/rubygems/specification.rb, line 2199 def requirements=(req) @requirements = Array req end
Setzt die Anforderungen auf req und stellt sicher, dass es sich um ein Array handelt.
Source
# File lib/rubygems/specification.rb, line 2544 def reset_nil_attributes_to_default nil_attributes = self.class.non_nil_attributes.find_all do |name| !instance_variable_defined?("@#{name}") || instance_variable_get("@#{name}").nil? end nil_attributes.each do |attribute| default = default_value attribute value = case default when Time, Numeric, Symbol, true, false, nil then default else default.dup end instance_variable_set "@#{attribute}", value end @installed_by_version ||= nil nil end
Setzt Null-Attribute auf ihre Standardwerte zurück, um die Spec gültig zu machen
Source
# File lib/rubygems/specification.rb, line 2210 def ri_dir @ri_dir ||= File.join base_dir, "ri", full_name end
Gibt den vollständigen Pfad zum ri-Verzeichnis dieser Spec zurück.
Source
# File lib/rubygems/specification.rb, line 2243 def runtime_dependencies dependencies.select(&:runtime?) end
Liste der Abhängigkeiten, die zur Laufzeit automatisch aktiviert werden.
Source
# File lib/rubygems/specification.rb, line 1439 def sanitize self.summary = sanitize_string(summary) self.description = sanitize_string(description) self.post_install_message = sanitize_string(post_install_message) self.authors = authors.collect {|a| sanitize_string(a) } end
Bereinigt die beschreibenden Felder in der Spec. Manchmal können Nicht-ASCII-Zeichen den Site-Index verzerren. Nicht-ASCII-Zeichen werden durch ihre XML-Entsprechung ersetzt.
Source
# File lib/rubygems/specification.rb, line 1449 def sanitize_string(string) return string unless string # HACK: the #to_s is in here because RSpec has an Array of Arrays of # Strings for authors. Need a way to disallow bad values on gemspec # generation. (Probably won't happen.) string.to_s end
Bereinigt einen einzelnen String.
Source
# File lib/rubygems/specification.rb, line 2259 def satisfies_requirement?(dependency) @name == dependency.name && dependency.requirement.satisfied_by?(@version) end
Prüft, ob diese Spezifikation die Anforderung von dependency erfüllt.
Source
# File lib/rubygems/specification.rb, line 2267 def sort_obj [@name, @version, Gem::Platform.sort_priority(@new_platform)] end
Gibt ein Objekt zurück, das Sie zum Sortieren von Spezifikationen in sort_by verwenden können.
Source
# File lib/rubygems/specification.rb, line 2282 def spec_dir @spec_dir ||= File.join base_dir, "specifications" end
Gibt den vollständigen Pfad zum Verzeichnis zurück, das die Gemspec-Datei dieser Spec enthält. z. B. /usr/local/lib/ruby/gems/1.8/specifications
Source
# File lib/rubygems/specification.rb, line 2290 def spec_file @spec_file ||= File.join spec_dir, "#{full_name}.gemspec" end
Gibt den vollständigen Pfad zur Gemspec-Datei dieser Spec zurück. z. B. /usr/local/lib/ruby/gems/1.8/specifications/mygem-1.0.gemspec
Source
# File lib/rubygems/specification.rb, line 2299 def spec_name "#{full_name}.gemspec" end
Der Standardname der Gemspec. Siehe auch file_name
spec.spec_name # => "example-1.0.gemspec"
Source
# File lib/rubygems/specification.rb, line 2306 def summary=(str) @summary = str.to_s.strip. gsub(/(\w-)\n[ \t]*(\w)/, '\1\2').gsub(/\n[ \t]*/, " ") # so. weird. end
Eine kurze Zusammenfassung der Beschreibung dieses Gems.
Source
# File lib/rubygems/specification.rb, line 2349 def to_ruby result = [] result << "# -*- encoding: utf-8 -*-" result << "#{Gem::StubSpecification::PREFIX}#{name} #{version} #{platform} #{raw_require_paths.join("\0")}" result << "#{Gem::StubSpecification::PREFIX}#{extensions.join "\0"}" unless extensions.empty? result << nil result << "Gem::Specification.new do |s|" result << " s.name = #{ruby_code name}" result << " s.version = #{ruby_code version}" unless platform.nil? || platform == Gem::Platform::RUBY result << " s.platform = #{ruby_code original_platform}" end result << "" result << " s.required_rubygems_version = #{ruby_code required_rubygems_version} if s.respond_to? :required_rubygems_version=" if metadata && !metadata.empty? result << " s.metadata = #{ruby_code metadata} if s.respond_to? :metadata=" end result << " s.require_paths = #{ruby_code raw_require_paths}" handled = [ :dependencies, :name, :platform, :require_paths, :required_rubygems_version, :specification_version, :version, :metadata, :signing_key, ] @@attributes.each do |attr_name| next if handled.include? attr_name current_value = send(attr_name) if current_value != default_value(attr_name) || self.class.required_attribute?(attr_name) result << " s.#{attr_name} = #{ruby_code current_value}" end end if String === signing_key result << " s.signing_key = #{ruby_code signing_key}" end if @installed_by_version result << nil result << " s.installed_by_version = #{ruby_code Gem::VERSION}" end unless dependencies.empty? result << nil result << " s.specification_version = #{specification_version}" result << nil dependencies.each do |dep| dep.instance_variable_set :@type, :runtime if dep.type.nil? # HACK result << " s.add_#{dep.type}_dependency(%q<#{dep.name}>.freeze, #{ruby_code dep.requirements_list})" end end result << "end" result << nil result.join "\n" end
Gibt eine Ruby-Code-Darstellung dieser Spezifikation zurück, so dass sie evaled werden kann und dieselbe Spezifikation später wiederhergestellt wird. Attribute, die noch ihre Standardwerte haben, werden weggelassen.
Source
# File lib/rubygems/specification.rb, line 2423 def to_ruby_for_cache for_cache.to_ruby end
Gibt eine leichtergewichtige Ruby-Code-Darstellung dieser Spezifikation zurück, die nur für die Indizierung verwendet wird.
Siehe to_ruby.
Source
# File lib/rubygems/specification.rb, line 2434 def to_spec self end
Gibt self zurück
Source
# File lib/rubygems/specification.rb, line 2465 def traverse(trail = [], visited = {}, &block) trail.push(self) begin runtime_dependencies.each do |dep| dep.matching_specs(true).each do |dep_spec| next if visited.key?(dep_spec) visited[dep_spec] = true trail.push(dep_spec) begin result = block[self, dep, dep_spec, trail] ensure trail.pop end next if result == :next spec_name = dep_spec.name dep_spec.traverse(trail, visited, &block) unless trail.any? {|s| s.name == spec_name } end end ensure trail.pop end end
Wandert rekursiv durch die Abhängigkeiten dieser Spec und führt den block für jeden Sprung aus.
Source
# File lib/rubygems/specification.rb, line 2496 def validate(packaging = true, strict = false) normalize validation_policy = Gem::SpecificationPolicy.new(self) validation_policy.packaging = packaging validation_policy.validate(strict) end
Prüft, ob die Spezifikation alle erforderlichen Felder enthält, und führt eine sehr grundlegende Plausibilitätsprüfung durch.
Löst InvalidSpecificationException aus, wenn die Spec die Prüfungen nicht besteht.
Source
# File lib/rubygems/specification.rb, line 2512 def validate_for_resolution Gem::SpecificationPolicy.new(self).validate_for_resolution end
Source
# File lib/rubygems/specification.rb, line 2519 def version=(version) @version = version.nil? ? version : Gem::Version.create(version) end
Setzt die Version auf version.
Private Instanzmethoden
Source
# File lib/rubygems/specification.rb, line 1479 def add_dependency_with_type(dependency, type, requirements) requirements = if requirements.empty? Gem::Requirement.default else requirements.flatten end unless dependency.respond_to?(:name) && dependency.respond_to?(:requirement) dependency = Gem::Dependency.new(dependency.to_s, requirements, type) end dependencies << dependency end
Fügt eine Abhängigkeit für das Gem dependency mit dem Typ type hinzu, das requirements benötigt. Gültige Typen sind derzeit :runtime und :development.
Source
# File lib/rubygems/specification.rb, line 1855 def find_all_satisfiers(dep) Gem::Specification.each do |spec| yield spec if spec.satisfies_requirement? dep end end
Findet alle Gems, die dep erfüllen
Source
# File lib/rubygems/specification.rb, line 2218 def ruby_code(obj) case obj when String then obj.dump + ".freeze" when Array then "[" + obj.map {|x| ruby_code x }.join(", ") + "]" when Hash then seg = obj.keys.sort.map {|k| "#{k.to_s.dump} => #{obj[k].to_s.dump}" } "{ #{seg.join(", ")} }" when Gem::Version then ruby_code(obj.to_s) when DateLike then obj.strftime("%Y-%m-%d").dump when Time then obj.strftime("%Y-%m-%d").dump when Numeric then obj.inspect when true, false, nil then obj.inspect when Gem::Platform then "Gem::Platform.new(#{ruby_code obj.to_a})" when Gem::Requirement then list = obj.as_list "Gem::Requirement.new(#{ruby_code(list.size == 1 ? obj.to_s : list)})" else raise Gem::Exception, "ruby_code case not handled: #{obj.class}" end end
Gibt einen String zurück, der eine Ruby-Code-Darstellung des gegebenen Objekts enthält.
Source
# File lib/rubygems/specification.rb, line 2250 def same_attributes?(spec) @@attributes.all? {|name, _default| send(name) == spec.send(name) } end
Wahr, wenn dieser Edelstein die gleichen Attribute wie other hat.