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