brew-gem 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 710d6f487fd462a1478ddada3e77c146b759fc18
4
+ data.tar.gz: 8b394fa5ad0673baf4e52688228ad807ab8e2f6c
5
+ SHA512:
6
+ metadata.gz: f2f3c3ba3f2f74b6d306af0520dfe70f19309a9dfa38e59e55f63ab7fc3099886b1bfd6f1c811bdaa3442c93f3b8ea56127e8ec33e2670f8a0276d5610a72c24
7
+ data.tar.gz: d23b7955885e592f99871d4b685a6645bcd9c1eab162c81f3aa66ec8c87f94da784c70d2525d3452c41f37f4ff9370c0ddc8c920f00ad0b1c1ebeaaaeb80246f
data/.gitignore ADDED
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
data/.octopolo.yml ADDED
@@ -0,0 +1,4 @@
1
+ github_repo: sportngin/brew-gem
2
+ semantic_versioning: true
3
+ branches_to_keep:
4
+ - master
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --format documentation
2
+ --color
data/.ruby-version ADDED
@@ -0,0 +1 @@
1
+ 2.3.1
data/.travis.yml ADDED
@@ -0,0 +1,5 @@
1
+ sudo: false
2
+ language: ruby
3
+ rvm:
4
+ - 2.2.2
5
+ before_install: gem install bundler -v 1.12.3
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in brew-gem.gemspec
4
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Joshua Peek
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,117 @@
1
+ brew-gem -- install gems as homebrew formulas
2
+ =============================================
3
+
4
+ `brew gem` allows you to install any rubygem as a homebrew formula.
5
+
6
+ It works by generating a stub formula for homebrew, which looks something like this:
7
+
8
+ class Ronn < Formula
9
+ def initialize(*args)
10
+ @name = "ronn"
11
+ @version = "0.7.3"
12
+ super
13
+ end
14
+
15
+ def install
16
+ system "gem", "install", name, "--version", version, "--install-dir", prefix
17
+ end
18
+ end
19
+
20
+ This formula installs and unpacks all the dependencies under the Cellar path. So the package is completely self contained.
21
+
22
+
23
+ Dependencies
24
+ ------------
25
+ This requires a system rubygems version of 2.3 or greater
26
+ There is a bug prior to 2.3 that doesn't install the full dependency tree properly when you use the install-dir flag.
27
+
28
+ ```
29
+ sudo /usr/bin/gem update --system
30
+ ```
31
+
32
+
33
+ Install
34
+ -------
35
+
36
+ There are two ways to install `brew-gem`, via Homebrew or via Rubygems. Usually
37
+ the Rubygems release will track ahead of the Homebrew recipe, so to receive the
38
+ latest features, use the Rubygems install instructions.
39
+
40
+ Via Rubygems:
41
+
42
+ gem install brew-gem
43
+ brew-gem install brew-gem
44
+
45
+ Via Homebrew:
46
+
47
+ brew install brew-gem
48
+
49
+
50
+ Usage
51
+ -----
52
+
53
+ brew gem install heroku
54
+
55
+ To install a specific version:
56
+
57
+ brew gem install heroku 3.8.3
58
+
59
+ To upgrade:
60
+
61
+ brew gem upgrade heroku
62
+
63
+ To uninstall:
64
+
65
+ brew gem uninstall heroku
66
+
67
+ To check information:
68
+
69
+ brew gem info heroku
70
+
71
+ Note:
72
+
73
+ Installed gems are listed in `brew list` with prefix of `gem-`,
74
+ like `gem-heroku`.
75
+
76
+ ### BASH/ZSH Completions
77
+
78
+ To make use of completions for your gem, you need to install the
79
+ `bash-completion` formula:
80
+
81
+ brew install bash-completion
82
+
83
+ And then install a gem with the completion files in the following locations:
84
+
85
+ * A directory named either `completion` or `completions` with the file being
86
+ the name of the gem appended with the completion type.
87
+
88
+ For example: `completions/tmuxinator.bash`
89
+ * A file somewhere in your repo named `<your_gem_name>_completion.zsh`.
90
+
91
+ Files with `.bash` and `.sh` will be associated with bash and files ending in
92
+ `.zsh` will be associated with zsh.
93
+
94
+
95
+ Philosophy
96
+ ----------
97
+
98
+ This is **not** for installing development libraries, but for standalone binary tools that you want system wide.
99
+
100
+
101
+ Troubleshooting
102
+ ----------
103
+
104
+ If your seeing build errors similar to this:
105
+ ```shell
106
+ ==> Fetching opsicle from gem source
107
+ ==> gem install /Library/Caches/Homebrew/opsicle-0.4.2.gem --no-rdoc --no-ri --no-user-install --install-dir /usr/local/Cellar/opsicle/0.4.2 --bindir /usr/local/Cellar/opsicle/0.4.2/bin
108
+ make: *** [generator.bundle] Error 1
109
+ Gem files will remain installed in /usr/local/Cellar/opsicle/0.4.2/gems/json-1.8.1 for inspection.
110
+ Results logged to /usr/local/Cellar/opsicle/0.4.2/gems/json-1.8.1/ext/json/ext/generator/gem_make.out
111
+ READ THIS: https://github.com/Homebrew/homebrew/wiki/troubleshooting
112
+ ```
113
+
114
+ You probably have xcode 5.1 installed which changed the way the compilers handle flags.
115
+
116
+ You'll need to set `ARCHFLAGS=-Wno-error=unused-command-line-argument-hard-error-in-future` before installing.
117
+ _You may want to add this to your profile so you don't have to set it each time._
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec) do |t|
5
+ # Specify RSPECOPTS=... on the rake command line to set extra RSpec flags
6
+ t.rspec_opts = ENV['RSPECOPTS'] if ENV['RSPECOPTS']
7
+ end
8
+
9
+ task :default => :spec
data/bin/brew-gem ADDED
@@ -0,0 +1,7 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ BREW_GEM_HOME = File.expand_path('../..', __FILE__)
4
+
5
+ $LOAD_PATH.unshift(File.join(BREW_GEM_HOME, 'lib'))
6
+ require 'brew/gem'
7
+ Brew::Gem::CLI.run(ARGV)
data/brew-gem.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'brew/gem/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "brew-gem"
8
+ spec.version = Brew::Gem::VERSION
9
+ spec.authors = ["Nick Sieger"]
10
+ spec.email = ["nick@nicksieger.com"]
11
+
12
+ spec.summary = %q{Generate Homebrew formulas to install standalone ruby gems.}
13
+ spec.description = %q{This gem can be installed with "brew install brew-gem" and used to install gems with "brew gem install <gem>".}
14
+ spec.homepage = "https://github.com/sportngin/brew-gem"
15
+
16
+ # Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
17
+ # to allow pushing to a single host or delete this section to allow pushing to any host.
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = "https://rubygems.org/"
20
+ else
21
+ raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
22
+ end
23
+
24
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
25
+ spec.bindir = "exe"
26
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
+ spec.require_paths = ["lib"]
28
+
29
+ spec.add_development_dependency "bundler", "~> 1.12"
30
+ spec.add_development_dependency "rake", "~> 10.0"
31
+ spec.add_development_dependency "rspec", "~> 3.0"
32
+ spec.add_development_dependency "aruba", "~> 0.14.0"
33
+ end
data/lib/brew/gem.rb ADDED
@@ -0,0 +1,7 @@
1
+ module Brew
2
+ module Gem
3
+ end
4
+ end
5
+
6
+ require "brew/gem/cli"
7
+ require "brew/gem/version"
@@ -0,0 +1,73 @@
1
+ require 'erb'
2
+ require 'tempfile'
3
+
4
+ module Brew::Gem::CLI
5
+ module_function
6
+
7
+ COMMANDS = {
8
+ "install" => ("Install a brew gem, accepts an optional version argument\n" +
9
+ " (e.g. brew gem install <name> [version])"),
10
+ "upgrade" => "Upgrade to the latest version of a brew gem",
11
+ "uninstall" => "Uninstall a brew gem",
12
+ "info" => "Show information for an installed gem",
13
+ "help" => "This message"
14
+ }
15
+
16
+ def help_msg
17
+ (["Please specify a gem name (e.g. brew gem command <name>)"] +
18
+ COMMANDS.map {|name, desc| " #{name} - #{desc}"}).join("\n")
19
+ end
20
+
21
+ def fetch_version(name, version = nil)
22
+ gems = `gem list --remote "^#{name}$"`.lines
23
+
24
+ unless gems.detect { |f| f =~ /^#{name} \(([^\s,]+).*\)/ }
25
+ abort "Could not find a valid gem '#{name}'"
26
+ end
27
+
28
+ version ||= $1
29
+ version
30
+ end
31
+
32
+ def process_args(args)
33
+ abort help_msg unless args[0]
34
+ abort "unknown command: #{args[0]}\n#{help_msg}" unless COMMANDS.keys.include?(args[0])
35
+
36
+ if args[0] == 'help'
37
+ STDERR.puts help_msg
38
+ exit 0
39
+ end
40
+
41
+ args[0..2]
42
+ end
43
+
44
+ def expand_formula(name, version)
45
+ klass = 'Gem' + name.capitalize.gsub(/[-_.\s]([a-zA-Z0-9])/) { $1.upcase }.gsub('+', 'x')
46
+ user_gemrc = "#{ENV['HOME']}/.gemrc"
47
+ template_file = File.expand_path('../formula.rb.erb', __FILE__)
48
+ template = ERB.new(File.read(template_file))
49
+ template.result(binding)
50
+ end
51
+
52
+ def with_temp_formula(name, version)
53
+ filename = File.join Dir.tmpdir, "gem-#{name}.rb"
54
+
55
+ open(filename, 'w') do |f|
56
+ f.puts expand_formula(name, version)
57
+ end
58
+
59
+ yield filename
60
+ ensure
61
+ File.unlink filename
62
+ end
63
+
64
+ def run(args = ARGV)
65
+ command, name, supplied_version = process_args(args)
66
+
67
+ version = fetch_version(name, supplied_version)
68
+
69
+ with_temp_formula(name, version) do |filename|
70
+ system "brew #{command} #{filename}"
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,77 @@
1
+ # -*- ruby -*-
2
+
3
+ require 'formula'
4
+ require 'fileutils'
5
+
6
+ class RubyGemsDownloadStrategy < AbstractDownloadStrategy
7
+ def fetch
8
+ ohai "Fetching <%= name %> from gem source"
9
+ HOMEBREW_CACHE.cd do
10
+ system "gem", "fetch", "<%= name %>", "--version", resource.version
11
+ end
12
+ end
13
+
14
+ def cached_location
15
+ Pathname.new("#{HOMEBREW_CACHE}/<%= name %>-#{resource.version}.gem")
16
+ end
17
+
18
+ def clear_cache
19
+ cached_location.unlink if cached_location.exist?
20
+ end
21
+ end
22
+
23
+ class <%= klass %> < Formula
24
+ url "<%= name %>", :using => RubyGemsDownloadStrategy
25
+ version "<%= version %>"
26
+
27
+ def install
28
+ # Copy user's RubyGems config to temporary build home.
29
+ buildpath_gemrc = "#{ENV['HOME']}/.gemrc"
30
+ if File.exists?('<%= user_gemrc %>') && !File.exists?(buildpath_gemrc)
31
+ FileUtils.cp('<%= user_gemrc %>', buildpath_gemrc)
32
+ end
33
+
34
+ # set GEM_HOME and GEM_PATH to make sure we package all the dependent gems
35
+ # together without accidently picking up other gems on the gem path since
36
+ # they might not be there if, say, we change to a different rvm gemset
37
+ ENV['GEM_HOME']="#{prefix}"
38
+ ENV['GEM_PATH']="#{prefix}"
39
+ system "gem", "install", cached_download,
40
+ "--no-ri",
41
+ "--no-rdoc",
42
+ "--no-wrapper",
43
+ "--no-user-install",
44
+ "--install-dir", prefix,
45
+ "--bindir", bin
46
+
47
+ bin.rmtree if bin.exist?
48
+ bin.mkpath
49
+
50
+ brew_gem_prefix = prefix+"gems/<%= name %>-#{version}"
51
+
52
+ completion_for_bash = Dir[
53
+ "#{brew_gem_prefix}/completion{s,}/<%= name %>.{bash,sh}",
54
+ "#{brew_gem_prefix}/**/<%= name %>_completion{s,}.{bash,sh}"
55
+ ].first
56
+ bash_completion.install completion_for_bash if completion_for_bash
57
+
58
+ completion_for_zsh = Dir[
59
+ "#{brew_gem_prefix}/completions/<%= name %>.zsh",
60
+ "#{brew_gem_prefix}/**/<%= name %>_completion{s,}.zsh"
61
+ ].first
62
+ zsh_completion.install completion_for_zsh if completion_for_zsh
63
+
64
+ ruby_libs = Dir.glob("#{prefix}/gems/*/lib")
65
+ Pathname.glob("#{brew_gem_prefix}/bin/*").each do |file|
66
+ (bin+file.basename).open('w') do |f|
67
+ f << <<-RUBY
68
+ #!/usr/bin/ruby
69
+ ENV['GEM_HOME']="#{prefix}"
70
+ ENV['GEM_PATH']="#{prefix}"
71
+ $:.unshift(#{ruby_libs.map(&:inspect).join(",")})
72
+ load "#{file}"
73
+ RUBY
74
+ end
75
+ end
76
+ end
77
+ end
@@ -0,0 +1,5 @@
1
+ module Brew
2
+ module Gem
3
+ VERSION = "0.7.0"
4
+ end
5
+ end
metadata ADDED
@@ -0,0 +1,116 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: brew-gem
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.7.0
5
+ platform: ruby
6
+ authors:
7
+ - Nick Sieger
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2016-05-17 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.12'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.12'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '3.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '3.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: aruba
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 0.14.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 0.14.0
69
+ description: This gem can be installed with "brew install brew-gem" and used to install
70
+ gems with "brew gem install <gem>".
71
+ email:
72
+ - nick@nicksieger.com
73
+ executables: []
74
+ extensions: []
75
+ extra_rdoc_files: []
76
+ files:
77
+ - ".gitignore"
78
+ - ".octopolo.yml"
79
+ - ".rspec"
80
+ - ".ruby-version"
81
+ - ".travis.yml"
82
+ - Gemfile
83
+ - LICENSE
84
+ - README.md
85
+ - Rakefile
86
+ - bin/brew-gem
87
+ - brew-gem.gemspec
88
+ - lib/brew/gem.rb
89
+ - lib/brew/gem/cli.rb
90
+ - lib/brew/gem/formula.rb.erb
91
+ - lib/brew/gem/version.rb
92
+ homepage: https://github.com/sportngin/brew-gem
93
+ licenses: []
94
+ metadata:
95
+ allowed_push_host: https://rubygems.org/
96
+ post_install_message:
97
+ rdoc_options: []
98
+ require_paths:
99
+ - lib
100
+ required_ruby_version: !ruby/object:Gem::Requirement
101
+ requirements:
102
+ - - ">="
103
+ - !ruby/object:Gem::Version
104
+ version: '0'
105
+ required_rubygems_version: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - ">="
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
110
+ requirements: []
111
+ rubyforge_project:
112
+ rubygems_version: 2.5.1
113
+ signing_key:
114
+ specification_version: 4
115
+ summary: Generate Homebrew formulas to install standalone ruby gems.
116
+ test_files: []