lib/rocktumbler/tumbler.rb in rocktumbler-0.1.2 vs lib/rocktumbler/tumbler.rb in rocktumbler-0.1.3
- old
+ new
@@ -1,44 +1,54 @@
require_relative 'exceptions'
module Rocktumbler
+ # The Tumbler class is responsible for executing the top level tumble method
+ # and reads, parses, cleans, writes and verifies the new gemfile.
class Tumbler
- def initialize(location=Bundler.default_gemfile)
+ def initialize(location = Bundler.default_gemfile)
+ @opts = {}
@gemfile_location = location
@bundler_dependencies = parse_gemfile(@gemfile_location)
@gemfile = Rocktumbler::Gemfile.new(location)
end
- def tumble(opts={})
- groups = Rocktumbler::GroupFilter.new(@bundler_dependencies).filter
+ def tumble(args = ARGV)
+ @opts = Option.parse(args)
+ groups = Rocktumbler::GroupFilter.new(@bundler_dependencies, @opts).filter
clean_gemfile_str = @gemfile.print_source_and_ruby
clean_gemfile_str << groups.map(&:print).join
compare_to_original_gemfile(clean_gemfile_str)
- write(clean_gemfile_str) unless opts[:skip_write]
- return clean_gemfile_str
+ write(clean_gemfile_str) unless @opts.skip_write
+ clean_gemfile_str
end
def compare_to_original_gemfile(clean_gemfile_str)
- temp_gemfile = Tempfile.new('Gemfile.temp')
- temp_gemfile.write(clean_gemfile_str)
- temp_gemfile.close
+ temp_gemfile = write_temp_gemfile(clean_gemfile_str)
temp_bundler_dependencies = parse_gemfile(temp_gemfile.path)
diff = @bundler_dependencies - temp_bundler_dependencies
if diff.empty?
return true
else
- raise IncomparableGemfileError, "Clean Gemfile is not comparable to the existing Gemfile. The following gems are missing : #{diff.map(&:name).to_s}."
+ fail IncomparableGemfileError, "Clean Gemfile is not comparable to the\
+ existing Gemfile. The following gems are missing : #{diff.map(&:name)}."
end
end
def write(clean_gemfile_str)
- gemfile = File.open(@gemfile_location,'w')
+ gemfile = File.open(@gemfile_location, 'w')
gemfile.write(clean_gemfile_str)
gemfile.close
end
private
+
+ def write_temp_gemfile(clean_gemfile_str)
+ temp_gemfile = Tempfile.new('Gemfile.temp')
+ temp_gemfile.write(clean_gemfile_str)
+ temp_gemfile.close
+ temp_gemfile
+ end
def parse_gemfile(location)
builder = Bundler::Dsl.new
builder.eval_gemfile(location)
end