class InvocaGems::GemfileLine attr_reader :gemfile, :line, :index attr_reader :gem_name, :gem_version, :gem_ref, :gem_git, :gem_github, :gem_options, :gem_options def initialize(gemfile, line, index) @gemfile = gemfile @line = line @index = index @prefix = @line.match(/\A(\s*)gem/)[1] instance_eval(line) end def save! gemfile.save!(self) end def gem(name, *args) @gem_name = name @gem_options = args.last.is_a?(Hash) ? args.pop.dup : {} @gem_version = args.first || ">= 0" @gem_branch = @gem_options[:branch] || 'master' @gem_ref = @gem_options.delete(:ref) @gem_git = @gem_options.delete(:git) @gem_github = @gem_options.delete(:github) end def update_as_path(path) @line = [ "#{@prefix}gem ", "'#{gem_name}',".ljust(24), " path: '#{path}'" ].join('') end # TODO - Perfer branch before ref. # TODO - handle local branch... def update_as_github(gem_version, uri, sha) @line = [ "#{@prefix}gem ", "'#{gem_name}',".ljust(24), " '#{gem_version}', ".ljust(11), "git: '#{uri}',".ljust(56), "ref: '#{sha}'" ].join('') end end