lib/bundler/fixture.rb in bundler-fixture-1.1.0 vs lib/bundler/fixture.rb in bundler-fixture-1.2.0

- old
+ new

@@ -17,29 +17,45 @@ # @param [Gem::Specification] gem_dependencies This simulates gem requirements in Gemfile. # @param [Gem::Specification] source_specs This simulates gems in the source index. # @param [boolean] ensure_sources Default is true, makes sure a source exists for each gem_dependency. # Set this to false to require sending in sources in @param source_specs. - def create_lockfile(gem_dependencies:, source_specs: [], ensure_sources: true) + # @param [Array boolean] update_gems An array of gem names to update to latest, or `true` to update all. + # Default is empty Array. + def create_lockfile(gem_dependencies:, + source_specs: [], + ensure_sources: true, + update_gems: []) index = Bundler::Index.new Array(source_specs).each { |s| index << s } - source.instance_variable_set('@specs', index) Array(gem_dependencies).each do |dep| index << create_spec(dep.name, dep.requirement.requirements.first.last) end if ensure_sources - defn = Bundler::Definition.new(lockfile_filename, Array(gem_dependencies), @sources, {}) + update_hash = update_gems === true ? true : {gems: Array(update_gems)} + defn = Bundler::Definition.new(lockfile_filename, Array(gem_dependencies), @sources, update_hash) defn.instance_variable_set('@index', index) + # reading an existing lockfile in will overwrite the hacked up sources with detected + # ones from lockfile, so this needs to go here after the constructor is called. + source.instance_variable_set('@specs', index) defn.lock(lockfile_filename) end def lockfile_filename File.join(@dir, 'Gemfile.lock') end def lockfile_contents File.read(lockfile_filename) + end + + def parsed_lockfile + Bundler::LockfileParser.new(lockfile_contents) + end + + def parsed_lockfile_spec(gem_name) + parsed_lockfile.specs.detect { |s| s.name == gem_name } end def create_dependency(name, *requirements) Bundler::Dependency.new(name, requirements, {'source' => source}) end