Class: Gem::Specification

Inherits:
Object
  • Object
show all
Extended by:
RequirePathFlattener
Includes:
Bundler::MatchMetadata, Bundler::MatchPlatform, AllowSettingSource
Defined in:
lib/bundler/rubygems_ext.rb

Direct Known Subclasses

Bundler::EndpointSpecification

Defined Under Namespace

Modules: AllowSettingSource, RequirePathFlattener

Constant Summary collapse

LATEST_RUBY_WITHOUT_PATCH_VERSIONS =
Gem::Version.new("2.1")
@@array_attributes =

rubocop:disable Style/ClassVars

correct_array_attributes

Constants included from Bundler::GemHelpers

Bundler::GemHelpers::GENERICS, Bundler::GemHelpers::GENERIC_CACHE

Instance Attribute Summary collapse

Attributes included from AllowSettingSource

#source

Instance Method Summary collapse

Methods included from RequirePathFlattener

from_yaml

Methods included from Bundler::MatchPlatform

#match_platform, platforms_match?

Methods included from Bundler::GemHelpers

generic, generic_local_platform, generic_local_platform_is_ruby?, local_platform, platform_specificity_match, same_deps, same_specificity, select_all_platform_match, select_best_local_platform_match, select_best_platform_match, sort_and_filter_best_platform_match, sort_best_platform_match

Methods included from Bundler::MatchMetadata

#matches_current_metadata?, #matches_current_ruby?, #matches_current_rubygems?

Instance Attribute Details

#relative_loaded_fromObject

Returns the value of attribute relative_loaded_from.



82
83
84
# File 'lib/bundler/rubygems_ext.rb', line 82

def relative_loaded_from
  @relative_loaded_from
end

#remoteObject

Returns the value of attribute remote.



82
83
84
# File 'lib/bundler/rubygems_ext.rb', line 82

def remote
  @remote
end

Instance Method Details

#deleted_gem?Boolean

Returns:

  • (Boolean)


180
181
182
# File 'lib/bundler/rubygems_ext.rb', line 180

def deleted_gem?
  !default_gem? && !File.directory?(full_gem_path)
end

#extension_dirObject



118
119
120
121
122
123
124
125
126
127
# File 'lib/bundler/rubygems_ext.rb', line 118

def extension_dir
  # following instance variable is already used in original method
  # and that is the reason to prefix it with bundler_ and add rubocop exception
  @bundler_extension_dir ||= if source.respond_to?(:extension_dir_name) # rubocop:disable Naming/MemoizedInstanceVariableName
    unique_extension_dir = [source.extension_dir_name, File.basename(full_gem_path)].uniq.join("-")
    File.expand_path(File.join(extensions_dir, unique_extension_dir))
  else
    rg_extension_dir
  end
end

#flatten_require_pathsObject



191
192
193
194
195
196
# File 'lib/bundler/rubygems_ext.rb', line 191

def flatten_require_paths
  return unless raw_require_paths.first.is_a?(Array)

  warn "#{name} #{version} includes a gemspec with `require_paths` set to an array of arrays. Newer versions of this gem might've already fixed this"
  raw_require_paths.flatten!
end

#full_gem_pathObject



97
98
99
100
101
102
103
# File 'lib/bundler/rubygems_ext.rb', line 97

def full_gem_path
  if source.respond_to?(:root)
    File.expand_path(File.dirname(loaded_from), source.root)
  else
    rg_full_gem_path
  end
end

#gem_dirObject



132
133
134
# File 'lib/bundler/rubygems_ext.rb', line 132

def gem_dir
  full_gem_path
end

#git_versionObject



161
162
163
164
# File 'lib/bundler/rubygems_ext.rb', line 161

def git_version
  return unless loaded_from && source.is_a?(Bundler::Source::Git)
  " #{source.revision[0..6]}"
end

#groupsObject



157
158
159
# File 'lib/bundler/rubygems_ext.rb', line 157

def groups
  @groups ||= []
end

#insecurely_materialized?Boolean

Returns:

  • (Boolean)


153
154
155
# File 'lib/bundler/rubygems_ext.rb', line 153

def insecurely_materialized?
  false
end

#load_pathsObject



113
114
115
# File 'lib/bundler/rubygems_ext.rb', line 113

def load_paths
  full_require_paths
end

#loaded_fromObject



105
106
107
108
109
110
111
# File 'lib/bundler/rubygems_ext.rb', line 105

def loaded_from
  if relative_loaded_from
    source.path.join(relative_loaded_from).to_s
  else
    rg_loaded_from
  end
end

#nondevelopment_dependenciesObject



176
177
178
# File 'lib/bundler/rubygems_ext.rb', line 176

def nondevelopment_dependencies
  dependencies - development_dependencies
end

#required_ruby_version=(req) ⇒ Object



140
141
142
143
144
145
146
147
148
149
150
# File 'lib/bundler/rubygems_ext.rb', line 140

def required_ruby_version=(req)
  self.rg_required_ruby_version = 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

#rg_extension_dirObject



117
# File 'lib/bundler/rubygems_ext.rb', line 117

alias_method :rg_extension_dir, :extension_dir

#rg_full_gem_pathObject



94
# File 'lib/bundler/rubygems_ext.rb', line 94

alias_method :rg_full_gem_path, :full_gem_path

#rg_loaded_fromObject



95
# File 'lib/bundler/rubygems_ext.rb', line 95

alias_method :rg_loaded_from,   :loaded_from

#rg_required_ruby_version=Object



139
# File 'lib/bundler/rubygems_ext.rb', line 139

alias_method :rg_required_ruby_version=, :required_ruby_version=

#to_gemfile(path = nil) ⇒ Object



166
167
168
169
170
171
172
173
174
# File 'lib/bundler/rubygems_ext.rb', line 166

def to_gemfile(path = nil)
  gemfile = String.new("source 'https://rubygems.org'\n")
  gemfile << dependencies_to_gemfile(nondevelopment_dependencies)
  unless development_dependencies.empty?
    gemfile << "\n"
    gemfile << dependencies_to_gemfile(development_dependencies, :development)
  end
  gemfile
end

#validate_for_resolutionObject



185
186
187
# File 'lib/bundler/rubygems_ext.rb', line 185

def validate_for_resolution
  SpecificationPolicy.new(self).validate_for_resolution
end