Preview Ruby 4.1 is a preview. It can change before the final release. Switch to Ruby 4.0 →
instance method
Gem::Specification#to_ruby
to_ruby
lib/rubygems/specification.rb
View on GitHub ↗
# File tmp/rubies/ruby-4.1.0-preview1/lib/rubygems/specification.rb, line 2414
def to_ruby
content_addressed = Gem::ContentAddress.content_addressed?(self)
gem_suffix = content_addressed ? content_address : platform
result = []
result << "# -*- encoding: utf-8 -*-"
result << "#{Gem::StubSpecification::PREFIX}#{name} #{version} #{gem_suffix} #{raw_require_paths.join("\0")}"
result << "#{Gem::StubSpecification::PREFIX}#{extensions.join "\0"}" unless
extensions.empty?
result << "#{Gem::StubSpecification::TARGET_PREFIX}platform=#{platform}" if content_addressed
# Comments can't be escaped, so a newline would end the stub line early.
result.each do |line|
raise Gem::Exception, "stub line #{line.dump} contains a newline" if line.include?("\n")
end
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 << " s.content_address = #{ruby_code content_address} if s.respond_to? :content_address=" if content_addressed
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?
unless Integer === specification_version
raise Gem::Exception, "invalid specification_version: #{specification_version.inspect}"
end
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
unless Gem::Dependency::TYPES.include?(dep.type)
raise Gem::Exception, "invalid dependency type: #{dep.type.inspect}"
end
result << " s.add_#{dep.type}_dependency(#{ruby_code dep.name}, #{ruby_code dep.requirements_list})"
end
end
result << "end"
result << nil
result.join "\n"
end
Returns a Ruby code representation of this specification, such that it can be eval’ed and reconstruct the same specification later. Attributes that still have their default values are omitted.