private_gem 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
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,5 @@
1
+ source 'https://rubygems.org'
2
+ source <%= PrivateGem.server.inspect %>
3
+
4
+ # Specify your gem's dependencies in <%= config[:name] %>.gemspec
5
+ gemspec
@@ -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,7 @@
1
+ require 'bundler/setup'
2
+ require 'private_gem/tasks'
3
+ require 'rake/testtask'
4
+
5
+ Rake::TestTask.new(:test) { }
6
+
7
+ task :default => :test
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ root = File.expand_path('../..', __FILE__)
4
+ $LOAD_PATH << "#{root}/lib" if File.exist?("#{root}/Gemfile")
5
+ require '<%= config[:namespaced_path] %>'
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
@@ -0,0 +1,7 @@
1
+ <%- config[:constant_array].each_with_index do |c,i| -%>
2
+ <%= ' '*i %>module <%= c %>
3
+ <%- end -%>
4
+ <%= ' '*config[:constant_array].size %>VERSION = '0.0.1'
5
+ <%- (config[:constant_array].size-1).downto(0) do |i| -%>
6
+ <%= ' '*i %>end
7
+ <%- end -%>
@@ -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
@@ -0,0 +1,4 @@
1
+ require 'bundler/setup'
2
+ require '<%= config[:namespaced_path] %>'
3
+
4
+ require 'minitest/autorun'
@@ -0,0 +1,11 @@
1
+ require_relative 'minitest_helper'
2
+
3
+ describe <%= config[:constant_name] %> do
4
+ it 'has a version number' do
5
+ ::<%= config[:constant_name] %>::VERSION.wont_be_nil
6
+ end
7
+
8
+ it 'does something useful' do
9
+ flunk 'It does nothing useful!'
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ language: ruby
2
+ rvm:
3
+ - <%= RUBY_VERSION %>
@@ -0,0 +1,3 @@
1
+ module PrivateGem
2
+ VERSION = '1.0.0'
3
+ end
@@ -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: []