class Snowglobe::Bundle
Attributes
command_runner[R]
fs[R]
Public Class Methods
new(fs:, command_runner:)
click to toggle source
# File lib/snowglobe/bundle.rb, line 7 def initialize(fs:, command_runner:) @fs = fs @command_runner = command_runner @already_updating = false end
Public Instance Methods
add_gem(gem, *args)
click to toggle source
# File lib/snowglobe/bundle.rb, line 13 def add_gem(gem, *args) updating do options = args.last.is_a?(Hash) ? args.pop : {} version = args.shift line = assemble_gem_line(gem, version, options) fs.append_to_file("Gemfile", line) end end
includes?(gem)
click to toggle source
# File lib/snowglobe/bundle.rb, line 53 def includes?(gem) Bundler.definition.dependencies.any? do |dependency| dependency.name == gem end end
install_gems()
click to toggle source
# File lib/snowglobe/bundle.rb, line 43 def install_gems command_runner.run!("bundle install --local") do |runner| runner.retries = 5 end end
remove_gem(gem)
click to toggle source
# File lib/snowglobe/bundle.rb, line 22 def remove_gem(gem) updating do fs.comment_lines_matching_in_file("Gemfile", /^[ ]*gem ("|')#{gem}\1/) end end
updating() { |self| ... }
click to toggle source
# File lib/snowglobe/bundle.rb, line 28 def updating if already_updating? yield self return end @already_updating = true yield self @already_updating = false install_gems end
version_of(gem)
click to toggle source
# File lib/snowglobe/bundle.rb, line 49 def version_of(gem) GemVersion.new(Bundler.definition.specs[gem][0].version) end
Private Instance Methods
already_updating?()
click to toggle source
# File lib/snowglobe/bundle.rb, line 63 def already_updating? @already_updating end
assemble_gem_line(gem, version, options)
click to toggle source
# File lib/snowglobe/bundle.rb, line 67 def assemble_gem_line(gem, version, options) formatted_options = options. map { |key, value| "#{key}: #{formatted_value(value)}" }. join(", ") line = %(gem '#{gem}') if version line << %(, '#{version}') end if options.any? line << %(, #{formatted_options}) end line << "\n" end
formatted_value(value)
click to toggle source
# File lib/snowglobe/bundle.rb, line 85 def formatted_value(value) if value.is_a?(Pathname) value.to_s.inspect else value.inspect end end