private_gem 1.0.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 +7 -0
- data/bin/private_gem +12 -0
- data/lib/private_gem/cli.rb +57 -0
- data/lib/private_gem/tasks.rb +43 -0
- data/lib/private_gem/templates/newgem/Gemfile.tt +5 -0
- data/lib/private_gem/templates/newgem/README.md.tt +34 -0
- data/lib/private_gem/templates/newgem/Rakefile.tt +7 -0
- data/lib/private_gem/templates/newgem/bin/newgem.tt +5 -0
- data/lib/private_gem/templates/newgem/gitignore.tt +14 -0
- data/lib/private_gem/templates/newgem/lib/newgem/version.rb.tt +7 -0
- data/lib/private_gem/templates/newgem/lib/newgem.rb.tt +9 -0
- data/lib/private_gem/templates/newgem/newgem.gemspec.tt +22 -0
- data/lib/private_gem/templates/newgem/test/minitest_helper.rb.tt +4 -0
- data/lib/private_gem/templates/newgem/test/test_newgem.rb.tt +11 -0
- data/lib/private_gem/templates/newgem/travis.yml.tt +3 -0
- data/lib/private_gem/version.rb +3 -0
- data/lib/private_gem.rb +37 -0
- metadata +131 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 5c97de10eaaa9b52be80ae588d37be3aa9245aba
|
4
|
+
data.tar.gz: 075d707403a84bd38b1e1b9adcba1d2cd43a6fd5
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 86803bd5bb27ac71b374699f81ada59354aabe1b9c7aa24b9c30a462b91e1c163de1000f4d2e8a083051ed7f9f49fefa683b2a6967d44021c275be35eecc7db1
|
7
|
+
data.tar.gz: 5a0766dde0a43710d04af37ee8da7f796558d4a8af290db62fe5c858be5c6fdc703021dea9bbce3ea155ab7bd630c41258a55cea5999fad4752d996ee21b4b61
|
data/bin/private_gem
ADDED
@@ -0,0 +1,12 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
require 'bundler'
|
4
|
+
root = File.expand_path('../..', __FILE__)
|
5
|
+
$LOAD_PATH << "#{root}/lib" if File.exist?("#{root}/Gemfile")
|
6
|
+
require 'private_gem'
|
7
|
+
|
8
|
+
require 'bundler/friendly_errors'
|
9
|
+
Bundler.with_friendly_errors do
|
10
|
+
require 'private_gem/cli'
|
11
|
+
PrivateGem::CLI.start(ARGV, :debug => true)
|
12
|
+
end
|
@@ -0,0 +1,57 @@
|
|
1
|
+
require 'bundler/cli'
|
2
|
+
|
3
|
+
module PrivateGem
|
4
|
+
class CLI < Thor
|
5
|
+
include Thor::Actions
|
6
|
+
|
7
|
+
default_task :help
|
8
|
+
|
9
|
+
desc 'version', 'show version'
|
10
|
+
def version
|
11
|
+
puts PrivateGem::VERSION
|
12
|
+
end
|
13
|
+
|
14
|
+
desc 'new GEM [OPTIONS]', 'Creates a skeleton for a private ruby gem'
|
15
|
+
method_option :bin, :type => :boolean, :default => false, :aliases => '-b', :banner => 'Generate a binary for your gem.'
|
16
|
+
def new(gem_name)
|
17
|
+
name = gem_name.chomp('/') # remove trailing slash if present
|
18
|
+
underscored_name = name.tr('-', '_')
|
19
|
+
namespaced_path = name.tr('-', '/')
|
20
|
+
target = File.join(Dir.pwd, name)
|
21
|
+
constant_name = name.split('_').map{|p| p[0..0].upcase + p[1..-1] }.join
|
22
|
+
constant_name = constant_name.split('-').map{|q| q[0..0].upcase + q[1..-1] }.join('::') if constant_name =~ /-/
|
23
|
+
constant_array = constant_name.split('::')
|
24
|
+
git_user_name = `git config user.name`.chomp
|
25
|
+
git_user_email = `git config user.email`.chomp
|
26
|
+
opts = {
|
27
|
+
:name => name,
|
28
|
+
:underscored_name => underscored_name,
|
29
|
+
:namespaced_path => namespaced_path,
|
30
|
+
:constant_name => constant_name,
|
31
|
+
:constant_array => constant_array,
|
32
|
+
:author => git_user_name.empty? ? 'TODO: Write your name' : git_user_name,
|
33
|
+
:email => git_user_email.empty? ? 'TODO: Write your email address' : git_user_email
|
34
|
+
}
|
35
|
+
|
36
|
+
template 'newgem/Gemfile.tt', "#{target}/Gemfile", opts
|
37
|
+
template "newgem/Rakefile.tt", "#{target}/Rakefile", opts
|
38
|
+
template "newgem/README.md.tt", "#{target}/README.md", opts
|
39
|
+
template "newgem/gitignore.tt", "#{target}/.gitignore", opts
|
40
|
+
template "newgem/newgem.gemspec.tt", "#{target}/#{name}.gemspec", opts
|
41
|
+
template "newgem/lib/newgem.rb.tt", "#{target}/lib/#{namespaced_path}.rb", opts
|
42
|
+
template "newgem/lib/newgem/version.rb.tt", "#{target}/lib/#{namespaced_path}/version.rb", opts
|
43
|
+
template "newgem/test/minitest_helper.rb.tt", "#{target}/test/minitest_helper.rb", opts
|
44
|
+
template "newgem/test/test_newgem.rb.tt", "#{target}/test/test_#{namespaced_path}.rb", opts
|
45
|
+
template "newgem/travis.yml.tt", "#{target}/.travis.yml", opts
|
46
|
+
if options[:bin]
|
47
|
+
template "newgem/bin/newgem.tt", "#{target}/bin/#{name}", opts
|
48
|
+
end
|
49
|
+
|
50
|
+
Dir.chdir(target) { `git init; git add .` }
|
51
|
+
end
|
52
|
+
|
53
|
+
def self.source_root
|
54
|
+
File.expand_path(File.join(File.dirname(__FILE__), 'templates'))
|
55
|
+
end
|
56
|
+
end
|
57
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
require 'private_gem'
|
2
|
+
require 'bundler/gem_helper'
|
3
|
+
|
4
|
+
module PrivateGem
|
5
|
+
module GemHelperPatches
|
6
|
+
def install
|
7
|
+
super
|
8
|
+
|
9
|
+
Rake::Task[:release].clear_comments
|
10
|
+
Rake::Task[:release].comment = "Create tag v#{version} and build and push #{name}-#{version}.gem to your private gem server"
|
11
|
+
|
12
|
+
task :verify_gemspec do
|
13
|
+
verify_allowed_push_host
|
14
|
+
end
|
15
|
+
|
16
|
+
Rake::Task[:build].enhance([:verify_gemspec])
|
17
|
+
end
|
18
|
+
|
19
|
+
protected
|
20
|
+
|
21
|
+
def rubygem_push(path)
|
22
|
+
if PrivateGem.server && PrivateGem.credentials
|
23
|
+
Bundler.ui.confirm sh("curl --data-binary '@#{path}' --user '#{PrivateGem.credentials}' --header 'Content-Type: application/octet-stream' --silent #{PrivateGem.server}api/v1/gems")
|
24
|
+
|
25
|
+
Bundler.ui.confirm "Pushed #{name} #{version} to #{PrivateGem.server}."
|
26
|
+
else
|
27
|
+
raise "Your private gem server credentials aren't set."
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def verify_allowed_push_host
|
32
|
+
allowed_push_host = gemspec.metadata['allowed_push_host']
|
33
|
+
|
34
|
+
if allowed_push_host != PrivateGem.server
|
35
|
+
abort("You must set allowed_push_host to #{PrivateGem.server} in #{File.basename(spec_path)} to prevent accidental pushes to rubygems.org")
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
Bundler::GemHelper.send(:prepend, PrivateGem::GemHelperPatches)
|
42
|
+
|
43
|
+
Bundler::GemHelper.install_tasks
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# <%=config[:constant_name]%>
|
2
|
+
|
3
|
+
TODO: Write a gem description
|
4
|
+
|
5
|
+
## Installation
|
6
|
+
|
7
|
+
Add this line to your application's Gemfile:
|
8
|
+
|
9
|
+
```ruby
|
10
|
+
gem '<%= config[:name] %>'
|
11
|
+
```
|
12
|
+
|
13
|
+
And then execute:
|
14
|
+
|
15
|
+
```Bash
|
16
|
+
bundle
|
17
|
+
```
|
18
|
+
|
19
|
+
Or install it yourself as:
|
20
|
+
|
21
|
+
```Bash
|
22
|
+
gem install <%= config[:name] %>
|
23
|
+
```
|
24
|
+
|
25
|
+
## Usage
|
26
|
+
|
27
|
+
TODO: Write usage instructions here
|
28
|
+
|
29
|
+
## Contributing
|
30
|
+
|
31
|
+
1. Create your feature branch (`git checkout -b my-new-feature`)
|
32
|
+
2. Commit your changes (`git commit -am 'Add some feature'`)
|
33
|
+
3. Push to the branch (`git push origin my-new-feature`)
|
34
|
+
4. Create a new Pull Request
|
@@ -0,0 +1,9 @@
|
|
1
|
+
require '<%= config[:namespaced_path] %>/version'
|
2
|
+
|
3
|
+
<%- config[:constant_array].each_with_index do |c,i| -%>
|
4
|
+
<%= ' '*i %>module <%= c %>
|
5
|
+
<%- end -%>
|
6
|
+
<%= ' '*config[:constant_array].size %># Your code goes here...
|
7
|
+
<%- (config[:constant_array].size-1).downto(0) do |i| -%>
|
8
|
+
<%= ' '*i %>end
|
9
|
+
<%- end -%>
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require './lib/<%= config[:namespaced_path] %>/version'
|
2
|
+
|
3
|
+
Gem::Specification.new do |spec|
|
4
|
+
spec.name = <%= config[:name].inspect %>
|
5
|
+
spec.version = <%= config[:constant_name] %>::VERSION
|
6
|
+
spec.authors = [<%= config[:author].inspect %>]
|
7
|
+
spec.email = [<%= config[:email].inspect %>]
|
8
|
+
spec.summary = %q{TODO: Write a short summary. Required.}
|
9
|
+
spec.description = %q{TODO: Write a longer description. Optional.}
|
10
|
+
spec.homepage = ''
|
11
|
+
spec.license = 'PRIVATE'
|
12
|
+
|
13
|
+
spec.metadata['allowed_push_host'] = <%= PrivateGem.server.inspect %>
|
14
|
+
|
15
|
+
spec.files = Dir.glob('lib/**/*')
|
16
|
+
spec.executables = Dir.glob('bin/**/*').map {|f| File.basename(f)}
|
17
|
+
|
18
|
+
spec.add_development_dependency 'private_gem'
|
19
|
+
spec.add_development_dependency 'bundler'
|
20
|
+
spec.add_development_dependency 'rake'
|
21
|
+
spec.add_development_dependency 'minitest'
|
22
|
+
end
|
data/lib/private_gem.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'private_gem/version'
|
2
|
+
require 'bundler'
|
3
|
+
|
4
|
+
module PrivateGem
|
5
|
+
def self.server
|
6
|
+
servers_with_credentials = Bundler.settings.all.select do |n|
|
7
|
+
url = URI.parse(n)
|
8
|
+
url && ['http', 'https'].include?(url.scheme)
|
9
|
+
end
|
10
|
+
|
11
|
+
if servers_with_credentials.empty?
|
12
|
+
abort("You don't have any configured private gem credentials.")
|
13
|
+
elsif servers_with_credentials.size > 1
|
14
|
+
private_gem_server = Bundler.settings['private_gem_server']
|
15
|
+
|
16
|
+
if private_gem_server
|
17
|
+
if servers_with_credentials.include?(private_gem_server)
|
18
|
+
return private_gem_server
|
19
|
+
else
|
20
|
+
abort("You don't have any configured credentials for the private gem server at #{private_gem_server}")
|
21
|
+
end
|
22
|
+
else
|
23
|
+
puts "You have multiple private gem servers defined:"
|
24
|
+
servers_with_credentials.each do |s|
|
25
|
+
puts " #{s}"
|
26
|
+
end
|
27
|
+
abort("You need to select which private gem server to use using `bundle config private_gem_server URL_OF_GEM_SERVER`")
|
28
|
+
end
|
29
|
+
else
|
30
|
+
servers_with_credentials.first
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def self.credentials
|
35
|
+
Bundler.settings[server]
|
36
|
+
end
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,131 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: private_gem
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Mick Staugaard
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2014-12-19 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.7'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.7'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: minitest-around
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: bump
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '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'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rake
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '10.0'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '10.0'
|
83
|
+
description:
|
84
|
+
email:
|
85
|
+
- mick@staugaard.com
|
86
|
+
executables:
|
87
|
+
- private_gem
|
88
|
+
extensions: []
|
89
|
+
extra_rdoc_files: []
|
90
|
+
files:
|
91
|
+
- bin/private_gem
|
92
|
+
- lib/private_gem.rb
|
93
|
+
- lib/private_gem/cli.rb
|
94
|
+
- lib/private_gem/tasks.rb
|
95
|
+
- lib/private_gem/templates/newgem/Gemfile.tt
|
96
|
+
- lib/private_gem/templates/newgem/README.md.tt
|
97
|
+
- lib/private_gem/templates/newgem/Rakefile.tt
|
98
|
+
- lib/private_gem/templates/newgem/bin/newgem.tt
|
99
|
+
- lib/private_gem/templates/newgem/gitignore.tt
|
100
|
+
- lib/private_gem/templates/newgem/lib/newgem.rb.tt
|
101
|
+
- lib/private_gem/templates/newgem/lib/newgem/version.rb.tt
|
102
|
+
- lib/private_gem/templates/newgem/newgem.gemspec.tt
|
103
|
+
- lib/private_gem/templates/newgem/test/minitest_helper.rb.tt
|
104
|
+
- lib/private_gem/templates/newgem/test/test_newgem.rb.tt
|
105
|
+
- lib/private_gem/templates/newgem/travis.yml.tt
|
106
|
+
- lib/private_gem/version.rb
|
107
|
+
homepage: https://github.com/zendesk/private_gem
|
108
|
+
licenses:
|
109
|
+
- Apache License Version 2.0
|
110
|
+
metadata: {}
|
111
|
+
post_install_message:
|
112
|
+
rdoc_options: []
|
113
|
+
require_paths:
|
114
|
+
- lib
|
115
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '2.0'
|
120
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - ">="
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0'
|
125
|
+
requirements: []
|
126
|
+
rubyforge_project:
|
127
|
+
rubygems_version: 2.2.2
|
128
|
+
signing_key:
|
129
|
+
specification_version: 4
|
130
|
+
summary: Tries to help you make sure your private gems stay private
|
131
|
+
test_files: []
|