gemplate 1.1.2 → 2.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 +4 -4
- data/CHANGELOG.md +5 -0
- data/bin/gemplate +57 -31
- data/gemplate.gemspec +6 -2
- data/lib/gemplate.rb +3 -104
- data/lib/gemplate/gem.rb +109 -0
- data/lib/gemplate/version.rb +5 -0
- metadata +21 -5
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5ab8d805386162f2bcd34bb9894e45b53b5dba99
|
4
|
+
data.tar.gz: a3691e3870fb55acc31649bf7193f867f310b711
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 37b24362c21916c73d7e0fc564435e0074a5deb137412a083ce50ee63e6d8e398a36762b6beb763ae9033a80271020dbae892749c7527727ff10fe1fb86bd4e3
|
7
|
+
data.tar.gz: 825790cbbf44693a76b93e632a47677c505c2f84b53c16f19c9409d6608c5446061ae33baa1300a0a889122ad8d92f2d753672994860cd3a38a512a1fbad98eb
|
data/CHANGELOG.md
CHANGED
data/bin/gemplate
CHANGED
@@ -4,41 +4,67 @@ require 'gemplate'
|
|
4
4
|
require 'userinput'
|
5
5
|
require 'rugged'
|
6
6
|
require 'curb'
|
7
|
+
require 'mercenary'
|
7
8
|
|
8
|
-
|
9
|
-
|
9
|
+
Mercenary.program(:gemplate) do |p|
|
10
|
+
p.version Gemplate::VERSION
|
11
|
+
p.description 'Tool for bootstrapping new gems'
|
12
|
+
p.syntax 'gemplate [options] GEM_NAME'
|
10
13
|
|
11
|
-
user
|
12
|
-
|
14
|
+
p.option :user, '-u', '--user', 'GitHub username'
|
15
|
+
p.option :org, '-o', '--org', 'GitHub organization'
|
16
|
+
p.option :full_name, '-n', '--name', 'Full name'
|
17
|
+
p.option :email, '-e', '--email', 'Email address'
|
18
|
+
p.option :license, '-l', '--license', 'License'
|
19
|
+
p.option :skip_github, '-s', '--skip', 'Skip GitHub steps'
|
13
20
|
|
14
|
-
|
15
|
-
|
21
|
+
p.action do |_, options|
|
22
|
+
options[:name] = ARGV.first || UserInput.new(message: 'Gem name').ask
|
16
23
|
|
17
|
-
|
18
|
-
|
24
|
+
unless options[:user]
|
25
|
+
options[:user] = Rugged::Config.global['github.user'] || ENV['USER']
|
26
|
+
options[:user] = UserInput.new(
|
27
|
+
message: 'GitHub username', default: user
|
28
|
+
).ask
|
29
|
+
end
|
19
30
|
|
20
|
-
|
21
|
-
|
31
|
+
unless options[:org]
|
32
|
+
options[:org] = user
|
33
|
+
options[:org] = UserInput.new(
|
34
|
+
message: 'GitHub organization', default: org
|
35
|
+
).ask
|
36
|
+
end
|
22
37
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
38
|
+
unless options[:full_name]
|
39
|
+
options[:full_name] = Rugged::Config.global['user.name']
|
40
|
+
options[:full_name] = UserInput.new(
|
41
|
+
message: 'Full name', default: full_name
|
42
|
+
).ask
|
43
|
+
end
|
44
|
+
|
45
|
+
unless options[:email]
|
46
|
+
options[:email] = Rugged::Config.global['user.email']
|
47
|
+
options[:email] = UserInput.new(
|
48
|
+
message: 'Email address', default: email
|
49
|
+
).ask
|
50
|
+
end
|
51
|
+
|
52
|
+
license_validation = proc do |x|
|
53
|
+
url = "https://raw.githubusercontent.com/akerl/licenses/master/#{x}.txt"
|
54
|
+
Curl::Easy.http_head(url).response_code == 200
|
55
|
+
end
|
27
56
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
).create
|
43
|
-
|
44
|
-
puts 'New gem has been created!'
|
57
|
+
unless options[:license]
|
58
|
+
puts 'List of licenses: https://github.com/akerl/licenses'
|
59
|
+
options[:license] = UserInput.new(
|
60
|
+
message: 'License',
|
61
|
+
default: 'MIT',
|
62
|
+
validation: license_validation
|
63
|
+
).ask
|
64
|
+
end
|
65
|
+
|
66
|
+
Gemplate.new(options).create
|
67
|
+
|
68
|
+
puts 'New gem has been created!'
|
69
|
+
end
|
70
|
+
end
|
data/gemplate.gemspec
CHANGED
@@ -1,6 +1,9 @@
|
|
1
|
+
$:.unshift File.expand_path('../lib/', __FILE__)
|
2
|
+
require 'gemplate/version'
|
3
|
+
|
1
4
|
Gem::Specification.new do |s|
|
2
5
|
s.name = 'gemplate'
|
3
|
-
s.version =
|
6
|
+
s.version = Gemplate::VERSION
|
4
7
|
s.date = Time.now.strftime('%Y-%m-%d')
|
5
8
|
|
6
9
|
s.summary = 'Bootstrap tool for making gems'
|
@@ -19,6 +22,7 @@ Gem::Specification.new do |s|
|
|
19
22
|
s.add_dependency 'octoauth', '~> 1.3.0'
|
20
23
|
s.add_dependency 'octokit', '~> 4.1.0'
|
21
24
|
s.add_dependency 'curb', '~> 0.8.6'
|
25
|
+
s.add_dependency 'mercenary', '~> 0.3.4'
|
22
26
|
|
23
27
|
s.add_development_dependency 'rubocop', '~> 0.34.0'
|
24
28
|
s.add_development_dependency 'rake', '~> 10.4.0'
|
@@ -26,5 +30,5 @@ Gem::Specification.new do |s|
|
|
26
30
|
s.add_development_dependency 'rspec', '~> 3.3.0'
|
27
31
|
s.add_development_dependency 'fuubar', '~> 2.0.0'
|
28
32
|
s.add_development_dependency 'webmock', '~> 1.22.0'
|
29
|
-
s.add_development_dependency 'vcr', '~>
|
33
|
+
s.add_development_dependency 'vcr', '~> 3.0.0'
|
30
34
|
end
|
data/lib/gemplate.rb
CHANGED
@@ -1,10 +1,3 @@
|
|
1
|
-
require 'rugged'
|
2
|
-
require 'pathname'
|
3
|
-
require 'fileutils'
|
4
|
-
require 'curb'
|
5
|
-
require 'octoauth'
|
6
|
-
require 'octokit'
|
7
|
-
|
8
1
|
##
|
9
2
|
# Bootstrap tool for new gems
|
10
3
|
module Gemplate
|
@@ -16,101 +9,7 @@ module Gemplate
|
|
16
9
|
self::Gem.new(*args)
|
17
10
|
end
|
18
11
|
end
|
19
|
-
|
20
|
-
TEMPLATE = "#{Pathname.new(__FILE__).parent.parent}/template"
|
21
|
-
LICENSE_URL = 'https://raw.githubusercontent.com/akerl/licenses/master'
|
22
|
-
|
23
|
-
##
|
24
|
-
# Gem directory object
|
25
|
-
class Gem
|
26
|
-
def initialize(params = {})
|
27
|
-
@name = params[:name]
|
28
|
-
@user = params[:user]
|
29
|
-
@org = params[:org]
|
30
|
-
@full_name = params[:full_name]
|
31
|
-
@email = params[:email]
|
32
|
-
@license = params[:license]
|
33
|
-
@authfile = params[:authfile] || :default
|
34
|
-
end
|
35
|
-
|
36
|
-
def create
|
37
|
-
create_directory
|
38
|
-
Dir.chdir @name
|
39
|
-
add_license
|
40
|
-
process_templates
|
41
|
-
adjust_files
|
42
|
-
make_repo
|
43
|
-
Dir.chdir '..'
|
44
|
-
end
|
45
|
-
|
46
|
-
private
|
47
|
-
|
48
|
-
def create_directory
|
49
|
-
fail "#{@name} already exists" if File.exist? @name
|
50
|
-
FileUtils.cp_r TEMPLATE, @name
|
51
|
-
end
|
52
|
-
|
53
|
-
def dependencies
|
54
|
-
source = "#{TEMPLATE}/../gemplate.gemspec"
|
55
|
-
File.read(source).lines.select { |x| x.include? 's.add_dev' }.join.strip
|
56
|
-
end
|
57
|
-
|
58
|
-
def add_license
|
59
|
-
url = "#{LICENSE_URL}/#{@license}.txt"
|
60
|
-
File.open('LICENSE', 'w') do |fh|
|
61
|
-
license = Curl::Easy.perform(url)
|
62
|
-
if license.response_code == 404
|
63
|
-
fail ArgumentError, 'Invalid license name provided'
|
64
|
-
end
|
65
|
-
fh.write license.body_str
|
66
|
-
end
|
67
|
-
end
|
68
|
-
|
69
|
-
def replacements
|
70
|
-
[
|
71
|
-
[/AUTHOR_NAME/, @user],
|
72
|
-
[/LICENSE_NAME/, @license],
|
73
|
-
[/FULL_NAME/, @full_name],
|
74
|
-
[/REPO_NAME/, @name],
|
75
|
-
[/EMAIL_ADDRESS/, @email],
|
76
|
-
[/CURRENT_YEAR/, Time.now.strftime('%Y')],
|
77
|
-
[/#DEV_DEPS/, dependencies]
|
78
|
-
]
|
79
|
-
end
|
80
|
-
|
81
|
-
def process_templates
|
82
|
-
Dir.glob('**/*', File::FNM_DOTMATCH).each do |path|
|
83
|
-
next unless File.file? path
|
84
|
-
text = File.read path
|
85
|
-
replacements.each { |regex, new| text.gsub! regex, new }
|
86
|
-
File.open(path, 'w') { |fh| fh.write text }
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def adjust_files
|
91
|
-
moves = [['REPO_NAME.gemspec', "#{@name}.gemspec"],
|
92
|
-
['lib/REPO_NAME.rb', "lib/#{@name}.rb"],
|
93
|
-
['spec/REPO_NAME_spec.rb', "spec/#{@name}_spec.rb"]]
|
94
|
-
moves.each { |original, new| FileUtils.move original, new }
|
95
|
-
end
|
96
|
-
|
97
|
-
def make_repo
|
98
|
-
Rugged::Repository.init_at '.'
|
99
|
-
`git remote add origin "git@github.com:#{org || @user}/#{@name}"`
|
100
|
-
`git config branch.master.remote origin`
|
101
|
-
`git config branch.master.merge refs/heads/master`
|
102
|
-
github_api.create_repo(@name, organization: org, has_wiki: false)
|
103
|
-
end
|
104
|
-
|
105
|
-
def org
|
106
|
-
@org == @user ? nil : @org
|
107
|
-
end
|
108
|
-
|
109
|
-
def github_api
|
110
|
-
return @api_client if @api_client
|
111
|
-
auth = Octoauth.new note: 'gemplate', scopes: ['repo'], file: @authfile
|
112
|
-
auth.save
|
113
|
-
@api_client = Octokit::Client.new(access_token: auth.token)
|
114
|
-
end
|
115
|
-
end
|
116
12
|
end
|
13
|
+
|
14
|
+
require 'gemplate/gem'
|
15
|
+
require 'gemplate/version'
|
data/lib/gemplate/gem.rb
ADDED
@@ -0,0 +1,109 @@
|
|
1
|
+
require 'rugged'
|
2
|
+
require 'pathname'
|
3
|
+
require 'fileutils'
|
4
|
+
require 'curb'
|
5
|
+
require 'octoauth'
|
6
|
+
require 'octokit'
|
7
|
+
|
8
|
+
##
|
9
|
+
# Bootstrap tool for new gems
|
10
|
+
module Gemplate
|
11
|
+
TEMPLATE = "#{Pathname.new(__FILE__).parent.parent.parent}/template"
|
12
|
+
LICENSE_URL = 'https://raw.githubusercontent.com/akerl/licenses/master'
|
13
|
+
|
14
|
+
##
|
15
|
+
# Gem directory object
|
16
|
+
class Gem
|
17
|
+
def initialize(params = {})
|
18
|
+
@name = params[:name]
|
19
|
+
@user = params[:user]
|
20
|
+
@org = params[:org]
|
21
|
+
@full_name = params[:full_name]
|
22
|
+
@email = params[:email]
|
23
|
+
@license = params[:license]
|
24
|
+
@authfile = params[:authfile] || :default
|
25
|
+
@skip_github = params[:skip_github]
|
26
|
+
end
|
27
|
+
|
28
|
+
def create
|
29
|
+
create_directory
|
30
|
+
Dir.chdir @name
|
31
|
+
add_license
|
32
|
+
process_templates
|
33
|
+
adjust_files
|
34
|
+
make_repo
|
35
|
+
Dir.chdir '..'
|
36
|
+
end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def create_directory
|
41
|
+
fail "#{@name} already exists" if File.exist? @name
|
42
|
+
FileUtils.cp_r TEMPLATE, @name
|
43
|
+
end
|
44
|
+
|
45
|
+
def dependencies
|
46
|
+
source = "#{TEMPLATE}/../gemplate.gemspec"
|
47
|
+
File.read(source).lines.select { |x| x.include? 's.add_dev' }.join.strip
|
48
|
+
end
|
49
|
+
|
50
|
+
def add_license
|
51
|
+
url = "#{LICENSE_URL}/#{@license}.txt"
|
52
|
+
File.open('LICENSE', 'w') do |fh|
|
53
|
+
license = Curl::Easy.perform(url)
|
54
|
+
if license.response_code == 404
|
55
|
+
fail ArgumentError, 'Invalid license name provided'
|
56
|
+
end
|
57
|
+
fh.write license.body_str
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def replacements
|
62
|
+
[
|
63
|
+
[/AUTHOR_NAME/, @user],
|
64
|
+
[/LICENSE_NAME/, @license],
|
65
|
+
[/FULL_NAME/, @full_name],
|
66
|
+
[/REPO_NAME/, @name],
|
67
|
+
[/EMAIL_ADDRESS/, @email],
|
68
|
+
[/CURRENT_YEAR/, Time.now.strftime('%Y')],
|
69
|
+
[/#DEV_DEPS/, dependencies]
|
70
|
+
]
|
71
|
+
end
|
72
|
+
|
73
|
+
def process_templates
|
74
|
+
Dir.glob('**/*', File::FNM_DOTMATCH).each do |path|
|
75
|
+
next unless File.file? path
|
76
|
+
text = File.read path
|
77
|
+
replacements.each { |regex, new| text.gsub! regex, new }
|
78
|
+
File.open(path, 'w') { |fh| fh.write text }
|
79
|
+
end
|
80
|
+
end
|
81
|
+
|
82
|
+
def adjust_files
|
83
|
+
moves = [['REPO_NAME.gemspec', "#{@name}.gemspec"],
|
84
|
+
['lib/REPO_NAME.rb', "lib/#{@name}.rb"],
|
85
|
+
['spec/REPO_NAME_spec.rb', "spec/#{@name}_spec.rb"]]
|
86
|
+
moves.each { |original, new| FileUtils.move original, new }
|
87
|
+
end
|
88
|
+
|
89
|
+
def make_repo
|
90
|
+
Rugged::Repository.init_at '.'
|
91
|
+
return if @skip_github
|
92
|
+
`git remote add origin "git@github.com:#{org || @user}/#{@name}"`
|
93
|
+
`git config branch.master.remote origin`
|
94
|
+
`git config branch.master.merge refs/heads/master`
|
95
|
+
github_api.create_repo(@name, organization: org, has_wiki: false)
|
96
|
+
end
|
97
|
+
|
98
|
+
def org
|
99
|
+
@org == @user ? nil : @org
|
100
|
+
end
|
101
|
+
|
102
|
+
def github_api
|
103
|
+
return @api_client if @api_client
|
104
|
+
auth = Octoauth.new note: 'gemplate', scopes: ['repo'], file: @authfile
|
105
|
+
auth.save
|
106
|
+
@api_client = Octokit::Client.new(access_token: auth.token)
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: gemplate
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Les Aker
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rugged
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: 0.8.6
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: mercenary
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: 0.3.4
|
90
|
+
type: :runtime
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: 0.3.4
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: rubocop
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -170,14 +184,14 @@ dependencies:
|
|
170
184
|
requirements:
|
171
185
|
- - "~>"
|
172
186
|
- !ruby/object:Gem::Version
|
173
|
-
version:
|
187
|
+
version: 3.0.0
|
174
188
|
type: :development
|
175
189
|
prerelease: false
|
176
190
|
version_requirements: !ruby/object:Gem::Requirement
|
177
191
|
requirements:
|
178
192
|
- - "~>"
|
179
193
|
- !ruby/object:Gem::Version
|
180
|
-
version:
|
194
|
+
version: 3.0.0
|
181
195
|
description: Creates a basic repository layout for a new gem
|
182
196
|
email: me@lesaker.org
|
183
197
|
executables:
|
@@ -198,6 +212,8 @@ files:
|
|
198
212
|
- circle.yml
|
199
213
|
- gemplate.gemspec
|
200
214
|
- lib/gemplate.rb
|
215
|
+
- lib/gemplate/gem.rb
|
216
|
+
- lib/gemplate/version.rb
|
201
217
|
- spec/creds.yml
|
202
218
|
- spec/fixtures/cassettes/bad_license.yml
|
203
219
|
- spec/fixtures/cassettes/subject_create.yml
|
@@ -235,7 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
235
251
|
version: '0'
|
236
252
|
requirements: []
|
237
253
|
rubyforge_project:
|
238
|
-
rubygems_version: 2.4.5
|
254
|
+
rubygems_version: 2.4.5
|
239
255
|
signing_key:
|
240
256
|
specification_version: 4
|
241
257
|
summary: Bootstrap tool for making gems
|