Class: Bundler::LockfileGenerator
Relationships & Source Files | |
Inherits: | Object |
Defined in: | lib/bundler/lockfile_generator.rb |
Class Method Summary
- .generate(definition)
- .new(definition) ⇒ LockfileGenerator constructor Internal use only Internal use only
Instance Attribute Summary
- #definition readonly
- #out readonly
Instance Method Summary
- #generate!
- #add_bundled_with private
- #add_dependencies private
- #add_locked_ruby_version private
- #add_platforms private
- #add_section(name, value) private
- #add_sources private
- #add_specs(specs) private
Constructor Details
.new(definition) ⇒ LockfileGenerator
This method is for internal use only.
# File 'lib/bundler/lockfile_generator.rb', line 9
def initialize(definition) @definition = definition @out = String.new end
Class Method Details
.generate(definition)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 14
def self.generate(definition) new(definition).generate! end
Instance Attribute Details
#definition (readonly)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 5
attr_reader :definition
#out (readonly)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 6
attr_reader :out
Instance Method Details
#add_bundled_with (private)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 73
def add_bundled_with add_section("BUNDLED WITH", definition.locked_bundler_version.to_s) end
#add_dependencies (private)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 57
def add_dependencies out << "\nDEPENDENCIES\n" handled = [] definition.dependencies.sort_by(&:to_s).each do |dep| next if handled.include?(dep.name) out << dep.to_lock handled << dep.name end end
#add_locked_ruby_version (private)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 68
def add_locked_ruby_version return unless locked_ruby_version = definition.locked_ruby_version add_section("RUBY VERSION", locked_ruby_version.to_s) end
#add_platforms (private)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 53
def add_platforms add_section("PLATFORMS", definition.platforms) end
#add_section(name, value) (private)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 77
def add_section(name, value) out << "\n#{name}\n" case value when Array value.map(&:to_s).sort.each do |val| out << " #{val}\n" end when Hash value.to_a.sort_by {|k, _| k.to_s }.each do |key, val| out << " #{key}: #{val}\n" end when String out << " #{value}\n" else raise ArgumentError, "#{value.inspect} can't be serialized in a lockfile" end end
#add_sources (private)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 30
def add_sources definition.send(:sources).lock_sources.each_with_index do |source, idx| out << "\n" unless idx.zero? # Add the source header out << source.to_lock # Find all specs for this source specs = definition.resolve.select {|s| source.can_lock?(s) } add_specs(specs) end end
#add_specs(specs) (private)
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 43
def add_specs(specs) # This needs to be sorted by full name so that # gems with the same name, but different platform # are ordered consistently specs.sort_by(&:full_name).each do |spec| next if spec.name == "bundler".freeze out << spec.to_lock end end
#generate!
[ GitHub ]# File 'lib/bundler/lockfile_generator.rb', line 18
def generate! add_sources add_platforms add_dependencies add_locked_ruby_version add_bundled_with out end