Class: Bundler::LockfileParser
- Inherits:
-
Object
- Object
- Bundler::LockfileParser
- Defined in:
- lib/bundler/lockfile_parser.rb
Constant Summary collapse
- BUNDLED =
"BUNDLED WITH".freeze
- DEPENDENCIES =
"DEPENDENCIES".freeze
- PLATFORMS =
"PLATFORMS".freeze
- RUBY =
"RUBY VERSION".freeze
- GIT =
"GIT".freeze
- GEM =
"GEM".freeze
- PATH =
"PATH".freeze
- PLUGIN =
"PLUGIN SOURCE".freeze
- SPECS =
" specs:".freeze
- OPTIONS =
/^ ([a-z]+): (.*)$/i.freeze
- SOURCE =
[GIT, GEM, PATH, PLUGIN].freeze
- SECTIONS_BY_VERSION_INTRODUCED =
{ Gem::Version.create("1.0") => [DEPENDENCIES, PLATFORMS, GIT, GEM, PATH].freeze, Gem::Version.create("1.10") => [BUNDLED].freeze, Gem::Version.create("1.12") => [RUBY].freeze, Gem::Version.create("1.13") => [PLUGIN].freeze, }.freeze
- KNOWN_SECTIONS =
SECTIONS_BY_VERSION_INTRODUCED.values.flatten.freeze
- ENVIRONMENT_VERSION_SECTIONS =
[BUNDLED, RUBY].freeze
Instance Attribute Summary collapse
-
#bundler_version ⇒ Object
readonly
Returns the value of attribute bundler_version.
-
#dependencies ⇒ Object
readonly
Returns the value of attribute dependencies.
-
#platforms ⇒ Object
readonly
Returns the value of attribute platforms.
-
#ruby_version ⇒ Object
readonly
Returns the value of attribute ruby_version.
-
#sources ⇒ Object
readonly
Returns the value of attribute sources.
-
#specs ⇒ Object
readonly
Returns the value of attribute specs.
Class Method Summary collapse
- .sections_in_lockfile(lockfile_contents) ⇒ Object
- .sections_to_ignore(base_version = nil) ⇒ Object
- .unknown_sections_in_lockfile(lockfile_contents) ⇒ Object
Instance Method Summary collapse
-
#initialize(lockfile) ⇒ LockfileParser
constructor
A new instance of LockfileParser.
- #warn_for_outdated_bundler_version ⇒ Object
Constructor Details
#initialize(lockfile) ⇒ LockfileParser
Returns a new instance of LockfileParser.
49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 |
# File 'lib/bundler/lockfile_parser.rb', line 49 def initialize(lockfile) @platforms = [] @sources = [] @dependencies = {} @state = nil @specs = {} if lockfile.match(/<<<<<<<|=======|>>>>>>>|\|\|\|\|\|\|\|/) raise LockfileError, "Your #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)} contains merge conflicts.\n" \ "Run `git checkout HEAD -- #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` first to get a clean lock." end lockfile.split(/(?:\r?\n)+/).each do |line| if SOURCE.include?(line) @state = :source parse_source(line) elsif line == DEPENDENCIES @state = :dependency elsif line == PLATFORMS @state = :platform elsif line == RUBY @state = :ruby elsif line == BUNDLED @state = :bundled_with elsif line =~ /^[^\s]/ @state = nil elsif @state send("parse_#{@state}", line) end end @specs = @specs.values.sort_by(&:identifier) warn_for_outdated_bundler_version rescue ArgumentError => e Bundler.ui.debug(e) raise LockfileError, "Your lockfile is unreadable. Run `rm #{Bundler.default_lockfile.relative_path_from(SharedHelpers.pwd)}` " \ "and then `bundle install` to generate a new lockfile." end |
Instance Attribute Details
#bundler_version ⇒ Object (readonly)
Returns the value of attribute bundler_version.
5 6 7 |
# File 'lib/bundler/lockfile_parser.rb', line 5 def bundler_version @bundler_version end |
#dependencies ⇒ Object (readonly)
Returns the value of attribute dependencies.
5 6 7 |
# File 'lib/bundler/lockfile_parser.rb', line 5 def dependencies @dependencies end |
#platforms ⇒ Object (readonly)
Returns the value of attribute platforms.
5 6 7 |
# File 'lib/bundler/lockfile_parser.rb', line 5 def platforms @platforms end |
#ruby_version ⇒ Object (readonly)
Returns the value of attribute ruby_version.
5 6 7 |
# File 'lib/bundler/lockfile_parser.rb', line 5 def ruby_version @ruby_version end |
#sources ⇒ Object (readonly)
Returns the value of attribute sources.
5 6 7 |
# File 'lib/bundler/lockfile_parser.rb', line 5 def sources @sources end |
#specs ⇒ Object (readonly)
Returns the value of attribute specs.
5 6 7 |
# File 'lib/bundler/lockfile_parser.rb', line 5 def specs @specs end |
Class Method Details
.sections_in_lockfile(lockfile_contents) ⇒ Object
30 31 32 |
# File 'lib/bundler/lockfile_parser.rb', line 30 def self.sections_in_lockfile(lockfile_contents) lockfile_contents.scan(/^\w[\w ]*$/).uniq end |
.sections_to_ignore(base_version = nil) ⇒ Object
38 39 40 41 42 43 44 45 46 47 |
# File 'lib/bundler/lockfile_parser.rb', line 38 def self.sections_to_ignore(base_version = nil) base_version &&= base_version.release base_version ||= Gem::Version.create("1.0".dup) attributes = [] SECTIONS_BY_VERSION_INTRODUCED.each do |version, introduced| next if version <= base_version attributes += introduced end attributes end |
.unknown_sections_in_lockfile(lockfile_contents) ⇒ Object
34 35 36 |
# File 'lib/bundler/lockfile_parser.rb', line 34 def self.unknown_sections_in_lockfile(lockfile_contents) sections_in_lockfile(lockfile_contents) - KNOWN_SECTIONS end |
Instance Method Details
#warn_for_outdated_bundler_version ⇒ Object
87 88 89 90 91 92 93 94 95 96 97 |
# File 'lib/bundler/lockfile_parser.rb', line 87 def warn_for_outdated_bundler_version return unless bundler_version return if bundler_version.segments.last == "dev" prerelease_text = bundler_version.prerelease? ? " --pre" : "" current_version = Gem::Version.create(Bundler::VERSION) return unless current_version < bundler_version Bundler.ui.warn "Warning: the running version of Bundler (#{current_version}) is older " \ "than the version that created the lockfile (#{bundler_version}). We suggest you to " \ "upgrade to the version that created the lockfile by running `gem install " \ "bundler:#{bundler_version}#{prerelease_text}`.\n" end |