Module: Brew::Gem::CLI

Defined in:
lib/brew/gem/cli.rb

Defined Under Namespace

Classes: Arguments

Constant Summary collapse

COMMANDS =
{
  "install"   => ("Install a brew gem, accepts an optional version argument\n" +
                  "            (e.g. brew gem install <name> [version])"),
  "upgrade"   => "Upgrade to the latest version of a brew gem",
  "uninstall" => "Uninstall a brew gem",
  "info"      => "Show information for an installed gem",
  "formula"   => "Print out the generated formula for a gem",
  "help"      => "This message"
}
HOMEBREW_RUBY_FLAG =
"--homebrew-ruby"
SYSTEM_RUBY_FLAG =
"--system-ruby"
RUBY_FLAGS =
[HOMEBREW_RUBY_FLAG, SYSTEM_RUBY_FLAG]

Class Method Summary collapse

Class Method Details

.expand_formula(name, version, use_homebrew_ruby = false, gem_arguments = []) ⇒ Object



95
96
97
98
99
100
101
# File 'lib/brew/gem/cli.rb', line 95

def expand_formula(name, version, use_homebrew_ruby = false, gem_arguments = [])
  klass           = 'Gem' + name.capitalize.gsub(/[-_.\s]([a-zA-Z0-9])/) { $1.upcase }.gsub('+', 'x')
  user_gemrc      = "#{ENV['HOME']}/.gemrc"
  template_file   = File.expand_path('../formula.rb.erb', __FILE__)
  template        = ERB.new(File.read(template_file))
  template.result(binding)
end

.fetch_version(name, version = nil) ⇒ Object



66
67
68
69
70
71
72
73
74
75
# File 'lib/brew/gem/cli.rb', line 66

def fetch_version(name, version = nil)
  gems = `gem list --remote "^#{name}$"`.lines

  unless gems.detect { |f| f =~ /^#{name} \(([^\s,]+).*\)/ }
    abort "Could not find a valid gem '#{name}'"
  end

  version ||= $1
  version
end

.help_msgObject



61
62
63
64
# File 'lib/brew/gem/cli.rb', line 61

def help_msg
  (["Please specify a gem name (e.g. brew gem command <name>)"] +
    COMMANDS.map {|name, desc| "  #{name} - #{desc}"}).join("\n")
end

.homebrew_prefixObject



91
92
93
# File 'lib/brew/gem/cli.rb', line 91

def homebrew_prefix
  ENV['HOMEBREW_PREFIX'] || `brew --prefix`.chomp
end

.homebrew_ruby?(ruby_flag) ⇒ Boolean

Returns:

  • (Boolean)


115
116
117
118
# File 'lib/brew/gem/cli.rb', line 115

def homebrew_ruby?(ruby_flag)
  File.exist?("#{homebrew_prefix}/opt/ruby") &&
    ruby_flag.nil? || ruby_flag == HOMEBREW_RUBY_FLAG
end

.process_args(args) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
# File 'lib/brew/gem/cli.rb', line 77

def process_args(args)
  arguments = Arguments.new(args)
  command   = arguments.command
  abort help_msg unless command
  abort "unknown command: #{command}\n#{help_msg}" unless COMMANDS.keys.include?(command)

  if command == 'help'
    STDERR.puts help_msg
    exit 0
  end

  arguments
end

.run(args = ARGV) ⇒ Object



120
121
122
123
124
125
126
127
128
129
130
131
132
133
# File 'lib/brew/gem/cli.rb', line 120

def run(args = ARGV)
  arguments = process_args(args)
  name      = arguments.gem
  version   = fetch_version(name, arguments.supplied_version)
  with_temp_formula(name, version, homebrew_ruby?(arguments.ruby_flag), arguments.to_gem_args) do |filename|
    case arguments.command
    when "formula"
      $stdout.puts File.read(filename)
    else
      system "brew #{arguments.to_brew_args.shelljoin} --formula #{filename}"
      exit $?.exitstatus unless $?.success?
    end
  end
end

.with_temp_formula(name, version, use_homebrew_ruby, gem_arguments) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/brew/gem/cli.rb', line 103

def with_temp_formula(name, version, use_homebrew_ruby, gem_arguments)
  filename = File.join Dir.tmpdir, "gem-#{name}.rb"

  open(filename, 'w') do |f|
    f.puts expand_formula(name, version, use_homebrew_ruby, gem_arguments)
  end

  yield filename
ensure
  File.unlink filename
end