ggem 1.9.5 → 1.10.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/ggem.gemspec +9 -7
- data/lib/ggem/cli.rb +8 -7
- data/lib/ggem/cli/commands.rb +51 -45
- data/lib/ggem/gem.rb +7 -6
- data/lib/ggem/gemspec.rb +20 -10
- data/lib/ggem/git_repo.rb +2 -1
- data/lib/ggem/template.rb +12 -8
- data/lib/ggem/template_file/gemspec.erb +5 -3
- data/lib/ggem/template_file/gitignore.erb +1 -0
- data/lib/ggem/template_file/l.yml.erb +8 -0
- data/lib/ggem/template_file/rubocop.yml.erb +3 -0
- data/lib/ggem/template_file/ruby-version.erb +1 -1
- data/lib/ggem/template_file/t.yml.erb +6 -0
- data/lib/ggem/version.rb +1 -1
- data/test/support/cmd_tests_helpers.rb +7 -7
- data/test/support/gem1/gem1.gemspec +4 -5
- data/test/support/gem2/gem2.gemspec +4 -5
- data/test/support/name_set.rb +6 -3
- data/test/system/ggem_tests.rb +8 -5
- data/test/unit/cli_tests.rb +73 -50
- data/test/unit/gemspec_tests.rb +11 -6
- data/test/unit/git_repo_tests.rb +9 -7
- metadata +21 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 64812107b65d72cd807545f60cfe9793592e0a4ea271f1a8417d674103b18692
|
4
|
+
data.tar.gz: 2f16ea9401c6a1e229059688ba2f3a8ae039c44aa12c2986e003df911b4a4c62
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0dfc09803b1246e6d8c3ceab5c67030e34752bf89377457fb7054ef7ce98e5cb026b0ae3cc6b6652ebbba7728b2d7073d7666ded99140ac670891f2d444a1886
|
7
|
+
data.tar.gz: 3ecfaee5d92c53f741ac8538ce5803b7ae94b4e5c8f0eb8d696fd8281e29f87e413159b1b2f3791a36a4734d9ca4996f9c6617168e8b2b428beb3acd6947d97d
|
data/ggem.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
|
-
# -*- encoding: utf-8 -*-
|
4
4
|
lib = File.expand_path("../lib", __FILE__)
|
5
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
6
|
require "ggem/version"
|
@@ -10,20 +10,22 @@ Gem::Specification.new do |gem|
|
|
10
10
|
gem.version = GGem::VERSION
|
11
11
|
gem.authors = ["Kelly Redding", "Collin Redding"]
|
12
12
|
gem.email = ["kelly@kellyredding.com", "collin.redding@me.com"]
|
13
|
-
gem.summary =
|
14
|
-
gem.description =
|
13
|
+
gem.summary = '"Juh Gem", baby! (a gem utility CLI)'
|
14
|
+
gem.description = '"Juh Gem", baby! (a gem utility CLI)'
|
15
15
|
gem.homepage = "http://github.com/redding/ggem"
|
16
16
|
gem.license = "MIT"
|
17
17
|
|
18
|
-
gem.files
|
18
|
+
gem.files = `git ls-files | grep "^[^.]"`.split($INPUT_RECORD_SEPARATOR)
|
19
|
+
|
19
20
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
20
21
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
21
22
|
gem.require_paths = ["lib"]
|
22
23
|
|
23
24
|
gem.required_ruby_version = "~> 2.5"
|
24
25
|
|
25
|
-
gem.add_development_dependency("assert",
|
26
|
+
gem.add_development_dependency("assert", ["~> 2.19.2"])
|
27
|
+
gem.add_development_dependency("much-style-guide", ["~> 0.3.0"])
|
26
28
|
|
27
|
-
gem.add_dependency("much-
|
28
|
-
gem.add_dependency("scmd",
|
29
|
+
gem.add_dependency("much-mixin", ["~> 0.2.3"])
|
30
|
+
gem.add_dependency("scmd", ["~> 3.0.3"])
|
29
31
|
end
|
data/lib/ggem/cli.rb
CHANGED
@@ -5,6 +5,7 @@ require "ggem/cli/clirb"
|
|
5
5
|
require "ggem/cli/commands"
|
6
6
|
|
7
7
|
module GGem; end
|
8
|
+
|
8
9
|
class GGem::CLI
|
9
10
|
COMMANDS = CommandSet.new{ |unknown| InvalidCommand.new(unknown) }.tap do |c|
|
10
11
|
c.add(GenerateCommand, "generate", "g")
|
@@ -16,7 +17,7 @@ class GGem::CLI
|
|
16
17
|
end
|
17
18
|
|
18
19
|
def self.run(args)
|
19
|
-
|
20
|
+
new.run(args)
|
20
21
|
end
|
21
22
|
|
22
23
|
def initialize(kernel = nil, stdout = nil, stderr = nil)
|
@@ -34,16 +35,16 @@ class GGem::CLI
|
|
34
35
|
@stdout.puts cmd.help
|
35
36
|
rescue CLIRB::VersionExit
|
36
37
|
@stdout.puts GGem::VERSION
|
37
|
-
rescue CLIRB::Error, ArgumentError, InvalidCommandError =>
|
38
|
-
display_debug(
|
39
|
-
@stderr.puts "#{
|
38
|
+
rescue CLIRB::Error, ArgumentError, InvalidCommandError => ex
|
39
|
+
display_debug(ex)
|
40
|
+
@stderr.puts "#{ex.message}\n\n"
|
40
41
|
@stdout.puts cmd.help
|
41
42
|
@kernel.exit 1
|
42
43
|
rescue CommandExitError
|
43
44
|
@kernel.exit 1
|
44
|
-
rescue
|
45
|
-
@stderr.puts "#{
|
46
|
-
@stderr.puts
|
45
|
+
rescue => ex
|
46
|
+
@stderr.puts "#{ex.class}: #{ex.message}"
|
47
|
+
@stderr.puts ex.backtrace.join("\n")
|
47
48
|
@kernel.exit 1
|
48
49
|
end
|
49
50
|
@kernel.exit 0
|
data/lib/ggem/cli/commands.rb
CHANGED
@@ -1,9 +1,10 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "ggem/cli/clirb"
|
4
|
-
require "much-
|
4
|
+
require "much-mixin"
|
5
5
|
|
6
6
|
module GGem; end
|
7
|
+
|
7
8
|
class GGem::CLI
|
8
9
|
InvalidCommandError = Class.new(ArgumentError)
|
9
10
|
CommandExitError = Class.new(RuntimeError)
|
@@ -16,12 +17,14 @@ class GGem::CLI
|
|
16
17
|
@clirb = CLIRB.new
|
17
18
|
end
|
18
19
|
|
19
|
-
def new
|
20
|
+
def new
|
21
|
+
self
|
22
|
+
end
|
20
23
|
|
21
24
|
def run(argv)
|
22
25
|
@clirb.parse!([@name, argv].flatten.compact)
|
23
26
|
raise CLIRB::HelpExit if @name.to_s.empty?
|
24
|
-
raise InvalidCommandError, "`#{
|
27
|
+
raise InvalidCommandError, "`#{name}` is not a command."
|
25
28
|
end
|
26
29
|
|
27
30
|
def help
|
@@ -33,14 +36,16 @@ class GGem::CLI
|
|
33
36
|
end
|
34
37
|
|
35
38
|
module ValidCommand
|
36
|
-
include
|
39
|
+
include MuchMixin
|
37
40
|
|
38
|
-
|
41
|
+
mixin_instance_methods do
|
39
42
|
def initialize(&clirb_build)
|
40
43
|
@clirb = CLIRB.new(&clirb_build)
|
41
44
|
end
|
42
45
|
|
43
|
-
def clirb
|
46
|
+
def clirb
|
47
|
+
@clirb
|
48
|
+
end
|
44
49
|
|
45
50
|
def run(argv, stdout = nil, stderr = nil)
|
46
51
|
@clirb.parse!(argv)
|
@@ -55,9 +60,9 @@ class GGem::CLI
|
|
55
60
|
end
|
56
61
|
|
57
62
|
module NotifyCmdCommand
|
58
|
-
include
|
63
|
+
include MuchMixin
|
59
64
|
|
60
|
-
|
65
|
+
mixin_instance_methods do
|
61
66
|
private
|
62
67
|
|
63
68
|
def notify(success_msg, &cmd_block)
|
@@ -66,7 +71,7 @@ class GGem::CLI
|
|
66
71
|
end
|
67
72
|
|
68
73
|
def cmd(&cmd_block)
|
69
|
-
cmd,
|
74
|
+
cmd, _status, output = cmd_block.call
|
70
75
|
if ENV["DEBUG"]
|
71
76
|
@stdout.puts cmd
|
72
77
|
@stdout.puts output
|
@@ -76,14 +81,14 @@ class GGem::CLI
|
|
76
81
|
end
|
77
82
|
|
78
83
|
module GitRepoCommand
|
79
|
-
include
|
84
|
+
include MuchMixin
|
80
85
|
|
81
|
-
|
86
|
+
mixin_included do
|
82
87
|
include ValidCommand
|
83
88
|
include NotifyCmdCommand
|
84
89
|
end
|
85
90
|
|
86
|
-
|
91
|
+
mixin_instance_methods do
|
87
92
|
def initialize(*args)
|
88
93
|
super
|
89
94
|
|
@@ -96,8 +101,8 @@ class GGem::CLI
|
|
96
101
|
def notify(*args, &block)
|
97
102
|
begin
|
98
103
|
super
|
99
|
-
rescue GGem::GitRepo::CmdError =>
|
100
|
-
@stderr.puts
|
104
|
+
rescue GGem::GitRepo::CmdError => ex
|
105
|
+
@stderr.puts ex.message
|
101
106
|
raise CommandExitError
|
102
107
|
end
|
103
108
|
end
|
@@ -114,9 +119,9 @@ class GGem::CLI
|
|
114
119
|
require "ggem/gem"
|
115
120
|
path = GGem::Gem.new(Dir.pwd, @clirb.args.first).save!.path
|
116
121
|
@stdout.puts "created gem in #{path}"
|
117
|
-
rescue GGem::Gem::NoNameError =>
|
122
|
+
rescue GGem::Gem::NoNameError => ex
|
118
123
|
error = ArgumentError.new("GEM-NAME must be provided")
|
119
|
-
error.set_backtrace(
|
124
|
+
error.set_backtrace(ex.backtrace)
|
120
125
|
raise error
|
121
126
|
end
|
122
127
|
|
@@ -132,28 +137,28 @@ class GGem::CLI
|
|
132
137
|
"Usage: ggem generate [options] GEM-NAME\n\n" \
|
133
138
|
"Options: #{@clirb}\n" \
|
134
139
|
"Description:\n" \
|
135
|
-
" #{
|
140
|
+
" #{summary}"
|
136
141
|
end
|
137
142
|
end
|
138
143
|
|
139
144
|
module GemspecCommand
|
140
|
-
include
|
145
|
+
include MuchMixin
|
141
146
|
|
142
|
-
|
147
|
+
mixin_included do
|
143
148
|
include ValidCommand
|
144
149
|
include NotifyCmdCommand
|
145
150
|
end
|
146
151
|
|
147
|
-
|
152
|
+
mixin_instance_methods do
|
148
153
|
def initialize(*args)
|
149
154
|
super
|
150
155
|
|
151
156
|
require "ggem/gemspec"
|
152
157
|
begin
|
153
158
|
@spec = GGem::Gemspec.new(Dir.pwd)
|
154
|
-
rescue GGem::Gemspec::NotFoundError =>
|
159
|
+
rescue GGem::Gemspec::NotFoundError => ex
|
155
160
|
error = ArgumentError.new("There are no gemspecs at #{Dir.pwd}")
|
156
|
-
error.set_backtrace(
|
161
|
+
error.set_backtrace(ex.backtrace)
|
157
162
|
raise error
|
158
163
|
end
|
159
164
|
end
|
@@ -163,8 +168,8 @@ class GGem::CLI
|
|
163
168
|
def notify(*args, &block)
|
164
169
|
begin
|
165
170
|
super
|
166
|
-
rescue GGem::Gemspec::CmdError =>
|
167
|
-
@stderr.puts
|
171
|
+
rescue GGem::Gemspec::CmdError => ex
|
172
|
+
@stderr.puts ex.message
|
168
173
|
raise CommandExitError
|
169
174
|
end
|
170
175
|
end
|
@@ -190,7 +195,7 @@ class GGem::CLI
|
|
190
195
|
"Usage: ggem build [options]\n\n" \
|
191
196
|
"Options: #{@clirb}\n" \
|
192
197
|
"Description:\n" \
|
193
|
-
" #{
|
198
|
+
" #{summary}"
|
194
199
|
end
|
195
200
|
end
|
196
201
|
|
@@ -219,7 +224,7 @@ class GGem::CLI
|
|
219
224
|
"Usage: ggem install [options]\n\n" \
|
220
225
|
"Options: #{@clirb}\n" \
|
221
226
|
"Description:\n" \
|
222
|
-
" #{
|
227
|
+
" #{summary}"
|
223
228
|
end
|
224
229
|
end
|
225
230
|
|
@@ -249,22 +254,22 @@ class GGem::CLI
|
|
249
254
|
"Usage: ggem push [options]\n\n" \
|
250
255
|
"Options: #{@clirb}\n" \
|
251
256
|
"Description:\n" \
|
252
|
-
" #{
|
257
|
+
" #{summary}"
|
253
258
|
end
|
254
259
|
end
|
255
260
|
|
256
261
|
module ForceTagOptionCommand
|
257
|
-
include
|
262
|
+
include MuchMixin
|
258
263
|
|
259
|
-
|
264
|
+
mixin_included do
|
260
265
|
include ValidCommand
|
261
266
|
end
|
262
267
|
|
263
|
-
|
268
|
+
mixin_instance_methods do
|
264
269
|
def initialize
|
265
270
|
super do
|
266
271
|
option "force-tag", "force tagging even with uncommitted files", {
|
267
|
-
:
|
272
|
+
abbrev: "f",
|
268
273
|
}
|
269
274
|
end
|
270
275
|
end
|
@@ -282,9 +287,9 @@ class GGem::CLI
|
|
282
287
|
begin
|
283
288
|
cmd{ @repo.run_validate_clean_cmd }
|
284
289
|
cmd{ @repo.run_validate_committed_cmd }
|
285
|
-
rescue GGem::GitRepo::CmdError
|
290
|
+
rescue GGem::GitRepo::CmdError
|
286
291
|
@stderr.puts "There are files that need to be committed first."
|
287
|
-
if
|
292
|
+
if clirb.opts["force-tag"]
|
288
293
|
@stderr.puts "Forcing tag anyway..."
|
289
294
|
else
|
290
295
|
raise CommandExitError
|
@@ -303,8 +308,8 @@ class GGem::CLI
|
|
303
308
|
end
|
304
309
|
|
305
310
|
@stdout.puts "Pushed git commits and tags."
|
306
|
-
rescue GGem::GitRepo::CmdError =>
|
307
|
-
@stderr.puts
|
311
|
+
rescue GGem::GitRepo::CmdError => ex
|
312
|
+
@stderr.puts ex.message
|
308
313
|
raise CommandExitError
|
309
314
|
end
|
310
315
|
|
@@ -316,7 +321,7 @@ class GGem::CLI
|
|
316
321
|
"Usage: ggem tag [options]\n\n" \
|
317
322
|
"Options: #{@clirb}\n" \
|
318
323
|
"Description:\n" \
|
319
|
-
" #{
|
324
|
+
" #{summary}"
|
320
325
|
end
|
321
326
|
end
|
322
327
|
|
@@ -332,7 +337,7 @@ class GGem::CLI
|
|
332
337
|
|
333
338
|
def run(argv, *args)
|
334
339
|
super
|
335
|
-
@tag_command.run(
|
340
|
+
@tag_command.run(clirb.opts["force-tag"] ? ["--force-tag"] : [])
|
336
341
|
@push_command.run([])
|
337
342
|
end
|
338
343
|
|
@@ -345,14 +350,14 @@ class GGem::CLI
|
|
345
350
|
"Usage: ggem release [options]\n\n" \
|
346
351
|
"Options: #{@clirb}\n" \
|
347
352
|
"Description:\n" \
|
348
|
-
" #{
|
353
|
+
" #{summary}\n" \
|
349
354
|
" (macro for running `ggem tag && ggem push`)"
|
350
355
|
end
|
351
356
|
end
|
352
357
|
|
353
358
|
class CommandSet
|
354
359
|
def initialize(&unknown_cmd_block)
|
355
|
-
@lookup = Hash.new{ |
|
360
|
+
@lookup = Hash.new{ |_h, k| unknown_cmd_block.call(k) }
|
356
361
|
@names = []
|
357
362
|
@aliases = {}
|
358
363
|
@summaries = {}
|
@@ -361,7 +366,7 @@ class GGem::CLI
|
|
361
366
|
def add(klass, name, *aliases)
|
362
367
|
begin
|
363
368
|
cmd = klass.new
|
364
|
-
rescue
|
369
|
+
rescue
|
365
370
|
# don't add any commands you can't init
|
366
371
|
else
|
367
372
|
([name] + aliases).each{ |n| @lookup[n] = cmd }
|
@@ -388,12 +393,13 @@ class GGem::CLI
|
|
388
393
|
end
|
389
394
|
|
390
395
|
def to_s
|
391
|
-
max_name_size = @names.map
|
392
|
-
max_alias_size = @aliases.values.map
|
396
|
+
max_name_size = @names.map(&:size).max || 0
|
397
|
+
max_alias_size = @aliases.values.map(&:size).max || 0
|
393
398
|
|
394
|
-
@to_s ||= @names.map
|
395
|
-
"#{n.ljust(max_name_size)} #{@aliases[n].ljust(max_alias_size)}
|
396
|
-
|
399
|
+
@to_s ||= @names.map{ |n|
|
400
|
+
"#{n.ljust(max_name_size)} #{@aliases[n].ljust(max_alias_size)} "\
|
401
|
+
"#{@summaries[n]}"
|
402
|
+
}.join("\n")
|
397
403
|
end
|
398
404
|
end
|
399
405
|
end
|
data/lib/ggem/gem.rb
CHANGED
@@ -4,6 +4,7 @@ require "fileutils"
|
|
4
4
|
require "ggem/template"
|
5
5
|
|
6
6
|
module GGem; end
|
7
|
+
|
7
8
|
class GGem::Gem
|
8
9
|
NoNameError = Class.new(ArgumentError)
|
9
10
|
|
@@ -30,13 +31,13 @@ class GGem::Gem
|
|
30
31
|
def module_name
|
31
32
|
transforms = {
|
32
33
|
"_" => "",
|
33
|
-
"-" => ""
|
34
|
+
"-" => "",
|
34
35
|
}
|
35
|
-
@module_name ||= transform_name(transforms
|
36
|
+
@module_name ||= transform_name(transforms, &:capitalize)
|
36
37
|
end
|
37
38
|
|
38
39
|
def ruby_name
|
39
|
-
@ruby_name ||= transform_name
|
40
|
+
@ruby_name ||= transform_name(&:downcase)
|
40
41
|
end
|
41
42
|
|
42
43
|
private
|
@@ -44,15 +45,15 @@ class GGem::Gem
|
|
44
45
|
def normalize_name(name)
|
45
46
|
und_camelcs = [/([A-Z])([a-z])/, '_\1\2']
|
46
47
|
rm_dup_und = [/_+/, "_"]
|
47
|
-
rm_lead_und = [/^_/, ""
|
48
|
+
rm_lead_und = [/^_/, ""]
|
48
49
|
name.gsub(*und_camelcs).gsub(*rm_dup_und).sub(*rm_lead_und).downcase
|
49
50
|
end
|
50
51
|
|
51
52
|
def transform_name(conditions = {}, &block)
|
52
|
-
n = (block ? block.call(
|
53
|
+
n = (block ? block.call(name) : name)
|
53
54
|
conditions.each do |on, glue|
|
54
55
|
if (a = n.split(on)).size > 1
|
55
|
-
n = a.map{ |part| block
|
56
|
+
n = a.map{ |part| block&.call(part) }.join(glue)
|
56
57
|
end
|
57
58
|
end
|
58
59
|
n
|
data/lib/ggem/gemspec.rb
CHANGED
@@ -4,10 +4,11 @@ require "pathname"
|
|
4
4
|
require "scmd"
|
5
5
|
|
6
6
|
module GGem; end
|
7
|
+
|
7
8
|
class GGem::Gemspec
|
8
9
|
PUSH_HOST_META_KEY = "allowed_push_host"
|
9
|
-
DEFAULT_PUSH_HOST = "https://rubygems.org"
|
10
|
-
BUILD_TO_DIRNAME = "pkg"
|
10
|
+
DEFAULT_PUSH_HOST = "https://rubygems.org"
|
11
|
+
BUILD_TO_DIRNAME = "pkg"
|
11
12
|
|
12
13
|
NotFoundError = Class.new(ArgumentError)
|
13
14
|
LoadError = Class.new(ArgumentError)
|
@@ -55,25 +56,34 @@ class GGem::Gemspec
|
|
55
56
|
def run_cmd(cmd_string)
|
56
57
|
cmd = Scmd.new(cmd_string)
|
57
58
|
cmd.run
|
58
|
-
|
59
|
-
raise
|
60
|
-
|
59
|
+
unless cmd.success?
|
60
|
+
raise(
|
61
|
+
CmdError,
|
62
|
+
"#{cmd_string}\n#{cmd.stderr.empty? ? cmd.stdout : cmd.stderr}",
|
63
|
+
)
|
61
64
|
end
|
62
65
|
[cmd_string, cmd.exitstatus, cmd.stdout]
|
63
66
|
end
|
64
67
|
|
65
68
|
def load_gemspec(path)
|
66
|
-
eval(
|
67
|
-
|
68
|
-
|
69
|
-
|
69
|
+
eval( # rubocop:disable Security/Eval
|
70
|
+
path.read,
|
71
|
+
TOPLEVEL_BINDING,
|
72
|
+
path.expand_path.to_s,
|
73
|
+
)
|
74
|
+
rescue ScriptError, StandardError => ex
|
75
|
+
original_line = ex.backtrace.find{ |line| line.include?(path.to_s) }
|
76
|
+
msg =
|
77
|
+
"There was a #{ex.class} while loading #{path.basename}: \n#{ex.message}"
|
70
78
|
msg << " from\n #{original_line}" if original_line
|
71
79
|
msg << "\n"
|
72
80
|
raise LoadError, msg
|
73
81
|
end
|
74
82
|
|
75
83
|
def get_push_host(spec)
|
76
|
-
ENV["GGEM_PUSH_HOST"] ||
|
84
|
+
ENV["GGEM_PUSH_HOST"] ||
|
85
|
+
get_meta(spec)[PUSH_HOST_META_KEY] ||
|
86
|
+
DEFAULT_PUSH_HOST
|
77
87
|
end
|
78
88
|
|
79
89
|
def get_meta(spec)
|
data/lib/ggem/git_repo.rb
CHANGED
@@ -4,6 +4,7 @@ require "pathname"
|
|
4
4
|
require "scmd"
|
5
5
|
|
6
6
|
module GGem; end
|
7
|
+
|
7
8
|
class GGem::GitRepo
|
8
9
|
NotFoundError = Class.new(ArgumentError)
|
9
10
|
CmdError = Class.new(RuntimeError)
|
@@ -48,7 +49,7 @@ class GGem::GitRepo
|
|
48
49
|
cmd_string = "cd #{@path} && #{cmd_string}"
|
49
50
|
cmd = Scmd.new(cmd_string)
|
50
51
|
cmd.run
|
51
|
-
|
52
|
+
unless cmd.success?
|
52
53
|
raise CmdError, "#{cmd_string}\n" \
|
53
54
|
"#{cmd.stderr.empty? ? cmd.stdout : cmd.stderr}"
|
54
55
|
end
|
data/lib/ggem/template.rb
CHANGED
@@ -4,6 +4,7 @@ require "erb"
|
|
4
4
|
require "fileutils"
|
5
5
|
|
6
6
|
module GGem; end
|
7
|
+
|
7
8
|
class GGem::Template
|
8
9
|
def initialize(ggem)
|
9
10
|
@ggem = ggem
|
@@ -18,12 +19,15 @@ class GGem::Template
|
|
18
19
|
save_folder "log"
|
19
20
|
save_folder "tmp"
|
20
21
|
|
22
|
+
save_file("l.yml.erb", ".l.yml")
|
23
|
+
save_file("t.yml.erb", ".t.yml")
|
24
|
+
save_file("rubocop.yml.erb", ".rubocop.yml")
|
21
25
|
save_file("ruby-version.erb", ".ruby-version")
|
22
|
-
save_file("gitignore.erb",
|
23
|
-
save_file("Gemfile.erb",
|
24
|
-
save_file("gemspec.erb",
|
25
|
-
save_file("README.md.erb",
|
26
|
-
save_file("LICENSE.erb",
|
26
|
+
save_file("gitignore.erb", ".gitignore")
|
27
|
+
save_file("Gemfile.erb", "Gemfile")
|
28
|
+
save_file("gemspec.erb", "#{@ggem.name}.gemspec")
|
29
|
+
save_file("README.md.erb", "README.md")
|
30
|
+
save_file("LICENSE.erb", "LICENSE")
|
27
31
|
|
28
32
|
save_file("lib.rb.erb", "lib/#{@ggem.ruby_name}.rb")
|
29
33
|
save_file("lib_version.rb.erb", "lib/#{@ggem.ruby_name}/version.rb")
|
@@ -39,7 +43,7 @@ class GGem::Template
|
|
39
43
|
|
40
44
|
private
|
41
45
|
|
42
|
-
def save_folder(relative_path=nil)
|
46
|
+
def save_folder(relative_path = nil)
|
43
47
|
path = File.join([@ggem.path, relative_path].compact)
|
44
48
|
FileUtils.mkdir_p(path)
|
45
49
|
end
|
@@ -53,10 +57,10 @@ class GGem::Template
|
|
53
57
|
source_file = File.join(File.dirname(__FILE__), "template_file", source)
|
54
58
|
output_file = File.join(@ggem.root_path, @ggem.name, output)
|
55
59
|
|
56
|
-
if File.
|
60
|
+
if File.exist?(source_file)
|
57
61
|
FileUtils.mkdir_p(File.dirname(output_file))
|
58
62
|
erb = ERB.new(File.read(source_file))
|
59
|
-
File.open(output_file, "w")
|
63
|
+
File.open(output_file, "w"){ |f| f << erb.result(binding) }
|
60
64
|
else
|
61
65
|
raise ArgumentError, "the source file `#{source_file}` does not exist"
|
62
66
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
+
# -*- encoding: utf-8 -*-
|
1
2
|
# frozen_string_literal: true
|
2
3
|
|
3
|
-
# -*- encoding: utf-8 -*-
|
4
4
|
lib = File.expand_path("../lib", __FILE__)
|
5
5
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
6
|
require "<%= @ggem.ruby_name %>/version"
|
@@ -15,14 +15,16 @@ Gem::Specification.new do |gem|
|
|
15
15
|
gem.homepage = "TODO: homepage"
|
16
16
|
gem.license = "MIT"
|
17
17
|
|
18
|
-
gem.files
|
18
|
+
gem.files = `git ls-files | grep "^[^.]"`.split($INPUT_RECORD_SEPARATOR)
|
19
|
+
|
19
20
|
gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
|
20
21
|
gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
|
21
22
|
gem.require_paths = ["lib"]
|
22
23
|
|
23
24
|
gem.required_ruby_version = "~> 2.5"
|
24
25
|
|
25
|
-
gem.add_development_dependency("assert",
|
26
|
+
gem.add_development_dependency("assert", ["~> 2.19.2"])
|
27
|
+
gem.add_development_dependency("much-style-guide", ["~> 0.3.0"])
|
26
28
|
|
27
29
|
# TODO: gem.add_dependency("gem-name", ["~> 0.0.0"])
|
28
30
|
end
|
@@ -1 +1 @@
|
|
1
|
-
2.5.
|
1
|
+
2.5.8
|
data/lib/ggem/version.rb
CHANGED
@@ -1,13 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require "much-
|
3
|
+
require "much-mixin"
|
4
4
|
require "scmd"
|
5
5
|
|
6
6
|
module GGem; end
|
7
|
+
|
7
8
|
module GGem::CmdTestsHelpers
|
8
|
-
include
|
9
|
+
include MuchMixin
|
9
10
|
|
10
|
-
|
11
|
+
mixin_included do
|
11
12
|
setup do
|
12
13
|
ENV["SCMD_TEST_MODE"] = "1"
|
13
14
|
|
@@ -39,12 +40,11 @@ module GGem::CmdTestsHelpers
|
|
39
40
|
cmd.stderr = Factory.string
|
40
41
|
@cmd_spy = cmd
|
41
42
|
end
|
42
|
-
err = nil
|
43
|
-
begin; run_cmd_block.call; rescue StandardError => err; end
|
44
43
|
|
45
|
-
|
44
|
+
ex =
|
45
|
+
assert_that{ run_cmd_block.call }.raises(cmd_error_class)
|
46
46
|
exp = "#{@cmd_spy.cmd_str}\n#{@cmd_spy.stderr}"
|
47
|
-
assert_equal exp,
|
47
|
+
assert_equal exp, ex.message
|
48
48
|
end
|
49
49
|
end
|
50
50
|
end
|
@@ -1,18 +1,17 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = "gem1"
|
6
6
|
gem.version = "0.1.0"
|
7
7
|
gem.authors = []
|
8
8
|
gem.email = []
|
9
|
-
gem.summary =
|
10
|
-
gem.description =
|
9
|
+
gem.summary = "Gem 1 summary"
|
10
|
+
gem.description = "Gem 1 description"
|
11
11
|
gem.license = "MIT"
|
12
12
|
|
13
13
|
gem.files = []
|
14
14
|
gem.executables = []
|
15
15
|
gem.test_files = []
|
16
16
|
gem.require_paths = []
|
17
|
-
|
18
17
|
end
|
@@ -1,13 +1,13 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
1
|
# -*- encoding: utf-8 -*-
|
2
|
+
|
3
|
+
# frozen_string_literal: true
|
4
4
|
Gem::Specification.new do |gem|
|
5
5
|
gem.name = "gem2"
|
6
6
|
gem.version = "0.2.0"
|
7
7
|
gem.authors = []
|
8
8
|
gem.email = []
|
9
|
-
gem.summary =
|
10
|
-
gem.description =
|
9
|
+
gem.summary = "Gem 2 summary"
|
10
|
+
gem.description = "Gem 2 description"
|
11
11
|
gem.license = "MIT"
|
12
12
|
|
13
13
|
gem.metadata["allowed_push_host"] = "http://gems.example.com"
|
@@ -16,5 +16,4 @@ Gem::Specification.new do |gem|
|
|
16
16
|
gem.executables = []
|
17
17
|
gem.test_files = []
|
18
18
|
gem.require_paths = []
|
19
|
-
|
20
19
|
end
|
data/test/support/name_set.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module GGem; end
|
4
|
+
|
4
5
|
module GGem::NameSet
|
5
6
|
class Base
|
6
7
|
attr_reader :variations, :name, :module_name, :ruby_name
|
7
8
|
|
8
9
|
def expected_folders
|
9
|
-
[
|
10
|
+
[
|
11
|
+
"",
|
10
12
|
"lib",
|
11
13
|
"lib/#{@ruby_name}",
|
12
14
|
"test",
|
@@ -14,12 +16,13 @@ module GGem::NameSet
|
|
14
16
|
"test/system",
|
15
17
|
"test/unit",
|
16
18
|
"log",
|
17
|
-
"tmp"
|
19
|
+
"tmp",
|
18
20
|
]
|
19
21
|
end
|
20
22
|
|
21
23
|
def expected_files
|
22
|
-
[
|
24
|
+
[
|
25
|
+
".ruby-version",
|
23
26
|
".gitignore",
|
24
27
|
"Gemfile",
|
25
28
|
"#{@name}.gemspec",
|
data/test/system/ggem_tests.rb
CHANGED
@@ -7,7 +7,6 @@ require "test/support/name_set"
|
|
7
7
|
|
8
8
|
module GGem
|
9
9
|
class SystemTests < Assert::Context
|
10
|
-
|
11
10
|
NS_SIMPLE = GGem::NameSet::Simple
|
12
11
|
NS_UNDER = GGem::NameSet::Underscored
|
13
12
|
NS_HYPHEN = GGem::NameSet::HyphenatedOther
|
@@ -18,7 +17,8 @@ module GGem
|
|
18
17
|
class GemTests < SystemTests
|
19
18
|
desc "Gem"
|
20
19
|
|
21
|
-
should "know its name attrs for various name styles
|
20
|
+
should "know its name attrs for various name styles "\
|
21
|
+
"(simple/underscored/hyphenated)" do
|
22
22
|
[NS_SIMPLE, NS_UNDER, NS_HYPHEN].each do |ns|
|
23
23
|
assert_gem_name_set(ns.new)
|
24
24
|
end
|
@@ -45,7 +45,8 @@ module GGem
|
|
45
45
|
FileUtils.rm_rf(TMP_PATH)
|
46
46
|
end
|
47
47
|
|
48
|
-
should "save gems with various name styles
|
48
|
+
should "save gems with various name styles "\
|
49
|
+
"(simple/underscored/hyphenated)" do
|
49
50
|
[NS_SIMPLE, NS_UNDER, NS_HYPHEN].each do |ns|
|
50
51
|
init_gem = GGem::Gem.new(TMP_PATH, ns.new.variations.first)
|
51
52
|
gem_from_save = init_gem.save!
|
@@ -60,10 +61,12 @@ module GGem
|
|
60
61
|
def assert_gem_created(name_set)
|
61
62
|
folders = name_set.expected_folders
|
62
63
|
files = name_set.expected_files
|
63
|
-
paths = (folders + files).collect
|
64
|
+
paths = (folders + files).collect do |p|
|
65
|
+
File.join(TMP_PATH, name_set.name, p)
|
66
|
+
end
|
64
67
|
|
65
68
|
paths.flatten.each do |path|
|
66
|
-
assert File.
|
69
|
+
assert File.exist?(path), "`#{path}` does not exist"
|
67
70
|
end
|
68
71
|
end
|
69
72
|
end
|
data/test/unit/cli_tests.rb
CHANGED
@@ -8,7 +8,7 @@ require "ggem/cli/commands"
|
|
8
8
|
require "ggem/gem"
|
9
9
|
require "ggem/gemspec"
|
10
10
|
require "ggem/git_repo"
|
11
|
-
require "much-
|
11
|
+
require "much-mixin"
|
12
12
|
|
13
13
|
class GGem::CLI
|
14
14
|
class UnitTests < Assert::Context
|
@@ -147,7 +147,7 @@ class GGem::CLI
|
|
147
147
|
class RunWithHelpTests < RunSetupTests
|
148
148
|
desc "and run with the help switch"
|
149
149
|
setup do
|
150
|
-
@cli.run([
|
150
|
+
@cli.run(["--help"])
|
151
151
|
end
|
152
152
|
|
153
153
|
should "output the invalid command's help" do
|
@@ -163,7 +163,7 @@ class GGem::CLI
|
|
163
163
|
class RunWithVersionTests < RunSetupTests
|
164
164
|
desc "and run with the version switch"
|
165
165
|
setup do
|
166
|
-
@cli.run([
|
166
|
+
@cli.run(["--version"])
|
167
167
|
end
|
168
168
|
|
169
169
|
should "have output its version" do
|
@@ -217,8 +217,8 @@ class GGem::CLI
|
|
217
217
|
end
|
218
218
|
|
219
219
|
should "parse its argv on run" do
|
220
|
-
assert_raises(CLIRB::HelpExit){ subject.new.run([
|
221
|
-
assert_raises(CLIRB::VersionExit){ subject.new.run([
|
220
|
+
assert_raises(CLIRB::HelpExit){ subject.new.run(["--help"]) }
|
221
|
+
assert_raises(CLIRB::VersionExit){ subject.new.run(["--version"]) }
|
222
222
|
end
|
223
223
|
|
224
224
|
should "raise a help exit if its name is empty" do
|
@@ -269,7 +269,7 @@ class GGem::CLI
|
|
269
269
|
|
270
270
|
should "take custom CLIRB build procs" do
|
271
271
|
cmd = @command_class.new do
|
272
|
-
option "test", "testing", :
|
272
|
+
option "test", "testing", abbrev: "t"
|
273
273
|
end
|
274
274
|
cmd.run(["-t"], @stdout, @stderr)
|
275
275
|
assert_true cmd.clirb.opts["test"]
|
@@ -284,7 +284,7 @@ class GGem::CLI
|
|
284
284
|
desc "GitRepoCommand"
|
285
285
|
setup do
|
286
286
|
@gem1_root_path = TEST_SUPPORT_PATH.join("gem1")
|
287
|
-
Assert.stub(Dir, :pwd){ @gem1_root_path}
|
287
|
+
Assert.stub(Dir, :pwd){ @gem1_root_path }
|
288
288
|
|
289
289
|
@command_class = Class.new{ include GitRepoCommand }
|
290
290
|
@cmd = @command_class.new
|
@@ -305,9 +305,9 @@ class GGem::CLI
|
|
305
305
|
end
|
306
306
|
|
307
307
|
module RootPathTests
|
308
|
-
include
|
308
|
+
include MuchMixin
|
309
309
|
|
310
|
-
|
310
|
+
mixin_included do
|
311
311
|
setup do
|
312
312
|
@root_path = Factory.path
|
313
313
|
Assert.stub(Dir, :pwd){ @root_path }
|
@@ -316,14 +316,16 @@ class GGem::CLI
|
|
316
316
|
end
|
317
317
|
|
318
318
|
module GitRepoSpyTests
|
319
|
-
include
|
319
|
+
include MuchMixin
|
320
320
|
|
321
|
-
|
321
|
+
mixin_included do
|
322
322
|
include RootPathTests
|
323
323
|
|
324
324
|
setup do
|
325
325
|
@repo_spy = nil
|
326
|
-
Assert.stub(GGem::GitRepo, :new)
|
326
|
+
Assert.stub(GGem::GitRepo, :new) do |*args|
|
327
|
+
@repo_spy = GitRepoSpy.new(*args)
|
328
|
+
end
|
327
329
|
end
|
328
330
|
end
|
329
331
|
end
|
@@ -383,17 +385,15 @@ class GGem::CLI
|
|
383
385
|
|
384
386
|
should "re-raise a specific argument error on gem 'no name' errors" do
|
385
387
|
Assert.stub(@gem_class, :new){ raise GGem::Gem::NoNameError }
|
386
|
-
err = nil
|
387
|
-
begin
|
388
|
-
cmd = @command_class.new
|
389
|
-
cmd.run([])
|
390
|
-
rescue ArgumentError => err
|
391
|
-
end
|
392
388
|
|
393
|
-
|
389
|
+
ex =
|
390
|
+
assert_that{
|
391
|
+
cmd = @command_class.new
|
392
|
+
cmd.run([])
|
393
|
+
}.raises(ArgumentError)
|
394
394
|
exp = "GEM-NAME must be provided"
|
395
|
-
assert_equal exp,
|
396
|
-
assert_not_empty
|
395
|
+
assert_equal exp, ex.message
|
396
|
+
assert_not_empty ex.backtrace
|
397
397
|
end
|
398
398
|
end
|
399
399
|
|
@@ -401,7 +401,7 @@ class GGem::CLI
|
|
401
401
|
desc "GemspecCommand"
|
402
402
|
setup do
|
403
403
|
@gem1_root_path = TEST_SUPPORT_PATH.join("gem1")
|
404
|
-
Assert.stub(Dir, :pwd){ @gem1_root_path}
|
404
|
+
Assert.stub(Dir, :pwd){ @gem1_root_path }
|
405
405
|
|
406
406
|
@command_class = Class.new{ include GemspecCommand }
|
407
407
|
@cmd = @command_class.new
|
@@ -424,25 +424,23 @@ class GGem::CLI
|
|
424
424
|
root = Factory.path
|
425
425
|
Assert.stub(Dir, :pwd){ root }
|
426
426
|
|
427
|
-
|
428
|
-
cmd = @command_class.new
|
429
|
-
rescue ArgumentError => err
|
430
|
-
end
|
431
|
-
assert_not_nil err
|
427
|
+
ex = assert_that{ @command_class.new }.raises(ArgumentError)
|
432
428
|
exp = "There are no gemspecs at #{Dir.pwd}"
|
433
|
-
assert_equal exp,
|
429
|
+
assert_equal exp, ex.message
|
434
430
|
end
|
435
431
|
end
|
436
432
|
|
437
433
|
module GemspecSpyTests
|
438
|
-
include
|
434
|
+
include MuchMixin
|
439
435
|
|
440
|
-
|
436
|
+
mixin_included do
|
441
437
|
include RootPathTests
|
442
438
|
|
443
439
|
setup do
|
444
440
|
@spec_spy = nil
|
445
|
-
Assert.stub(GGem::Gemspec, :new)
|
441
|
+
Assert.stub(GGem::Gemspec, :new) do |*args|
|
442
|
+
@spec_spy = GemspecSpy.new(*args)
|
443
|
+
end
|
446
444
|
end
|
447
445
|
end
|
448
446
|
end
|
@@ -481,7 +479,9 @@ class GGem::CLI
|
|
481
479
|
assert_true @spec_spy.run_build_cmd_called
|
482
480
|
|
483
481
|
exp = ENV["DEBUG"] == "1" ? "build\nbuild cmd was run\n" : ""
|
484
|
-
exp +=
|
482
|
+
exp +=
|
483
|
+
"#{@spec_spy.name} #{@spec_spy.version} built to "\
|
484
|
+
"#{@spec_spy.gem_file}\n"
|
485
485
|
assert_equal exp, @stdout.read
|
486
486
|
|
487
487
|
ENV["DEBUG"] = nil
|
@@ -489,7 +489,9 @@ class GGem::CLI
|
|
489
489
|
|
490
490
|
should "handle cmd errors when run" do
|
491
491
|
err_msg = Factory.string
|
492
|
-
Assert.stub(@spec_spy, :run_build_cmd)
|
492
|
+
Assert.stub(@spec_spy, :run_build_cmd) do
|
493
|
+
raise GGem::Gemspec::CmdError, err_msg
|
494
|
+
end
|
493
495
|
|
494
496
|
assert_raises(CommandExitError){ subject.run([], @stdout, @stderr) }
|
495
497
|
assert_equal "#{err_msg}\n", @stderr.read
|
@@ -502,7 +504,9 @@ class GGem::CLI
|
|
502
504
|
desc "InstallCommand"
|
503
505
|
setup do
|
504
506
|
@build_spy = nil
|
505
|
-
Assert.stub(BuildCommand, :new)
|
507
|
+
Assert.stub(BuildCommand, :new) do |*args|
|
508
|
+
@build_spy = CommandSpy.new(*args)
|
509
|
+
end
|
506
510
|
|
507
511
|
@command_class = InstallCommand
|
508
512
|
@cmd = @command_class.new
|
@@ -529,7 +533,8 @@ class GGem::CLI
|
|
529
533
|
assert @build_spy
|
530
534
|
end
|
531
535
|
|
532
|
-
should "run the build command and call the spec's run install cmds when
|
536
|
+
should "run the build command and call the spec's run install cmds when "\
|
537
|
+
"run" do
|
533
538
|
ENV["DEBUG"] = [nil, "1"].sample
|
534
539
|
subject.run(@argv, @stdout, @stderr)
|
535
540
|
|
@@ -546,7 +551,9 @@ class GGem::CLI
|
|
546
551
|
|
547
552
|
should "handle cmd errors when run" do
|
548
553
|
err_msg = Factory.string
|
549
|
-
Assert.stub(@spec_spy, :run_install_cmd)
|
554
|
+
Assert.stub(@spec_spy, :run_install_cmd) do
|
555
|
+
raise GGem::Gemspec::CmdError, err_msg
|
556
|
+
end
|
550
557
|
|
551
558
|
assert_raises(CommandExitError){ subject.run(@argv, @stdout, @stderr) }
|
552
559
|
assert_equal "#{err_msg}\n", @stderr.read
|
@@ -559,7 +566,9 @@ class GGem::CLI
|
|
559
566
|
desc "PushCommand"
|
560
567
|
setup do
|
561
568
|
@build_spy = nil
|
562
|
-
Assert.stub(BuildCommand, :new)
|
569
|
+
Assert.stub(BuildCommand, :new) do |*args|
|
570
|
+
@build_spy = CommandSpy.new(*args)
|
571
|
+
end
|
563
572
|
|
564
573
|
@command_class = PushCommand
|
565
574
|
@cmd = @command_class.new
|
@@ -604,7 +613,9 @@ class GGem::CLI
|
|
604
613
|
|
605
614
|
should "handle cmd errors when run" do
|
606
615
|
err_msg = Factory.string
|
607
|
-
Assert.stub(@spec_spy, :run_push_cmd)
|
616
|
+
Assert.stub(@spec_spy, :run_push_cmd) do
|
617
|
+
raise GGem::Gemspec::CmdError, err_msg
|
618
|
+
end
|
608
619
|
|
609
620
|
assert_raises(CommandExitError){ subject.run(@argv, @stdout, @stderr) }
|
610
621
|
assert_equal "#{err_msg}\n", @stderr.read
|
@@ -717,7 +728,9 @@ class GGem::CLI
|
|
717
728
|
|
718
729
|
should "remove the version tag on push errors" do
|
719
730
|
err_msg = Factory.string
|
720
|
-
Assert.stub(@repo_spy, :run_push_cmd)
|
731
|
+
Assert.stub(@repo_spy, :run_push_cmd) do
|
732
|
+
raise GGem::GitRepo::CmdError, err_msg
|
733
|
+
end
|
721
734
|
|
722
735
|
assert_raises(CommandExitError){ subject.run([], @stdout, @stderr) }
|
723
736
|
assert_equal "#{err_msg}\n", @stderr.read
|
@@ -727,9 +740,13 @@ class GGem::CLI
|
|
727
740
|
end
|
728
741
|
|
729
742
|
should "handle tag removal cmd errors when run" do
|
730
|
-
Assert.stub(@repo_spy, :run_push_cmd)
|
743
|
+
Assert.stub(@repo_spy, :run_push_cmd) do
|
744
|
+
raise GGem::GitRepo::CmdError, Factory.string
|
745
|
+
end
|
731
746
|
err_msg = Factory.string
|
732
|
-
Assert.stub(@repo_spy, :run_rm_tag_cmd)
|
747
|
+
Assert.stub(@repo_spy, :run_rm_tag_cmd) do
|
748
|
+
raise GGem::GitRepo::CmdError, err_msg
|
749
|
+
end
|
733
750
|
|
734
751
|
assert_raises(CommandExitError){ subject.run([], @stdout, @stderr) }
|
735
752
|
assert_equal "#{err_msg}\n", @stderr.read
|
@@ -745,7 +762,9 @@ class GGem::CLI
|
|
745
762
|
Assert.stub(TagCommand, :new){ |*args| @tag_spy = CommandSpy.new(*args) }
|
746
763
|
|
747
764
|
@push_spy = nil
|
748
|
-
Assert.stub(PushCommand, :new)
|
765
|
+
Assert.stub(PushCommand, :new) do |*args|
|
766
|
+
@push_spy = CommandSpy.new(*args)
|
767
|
+
end
|
749
768
|
|
750
769
|
@command_class = ReleaseCommand
|
751
770
|
@cmd = @command_class.new
|
@@ -757,8 +776,9 @@ class GGem::CLI
|
|
757
776
|
end
|
758
777
|
|
759
778
|
should "know its summary" do
|
760
|
-
exp =
|
761
|
-
|
779
|
+
exp =
|
780
|
+
"Tag #{@spec_spy.version_tag} and push built "\
|
781
|
+
"#{@spec_spy.gem_file_name} to #{@spec_spy.push_host}"
|
762
782
|
assert_equal exp, subject.summary
|
763
783
|
end
|
764
784
|
|
@@ -937,7 +957,8 @@ class GGem::CLI
|
|
937
957
|
|
938
958
|
class GemspecSpy
|
939
959
|
attr_reader :name, :version, :version_tag, :push_host
|
940
|
-
attr_reader :run_build_cmd_called, :run_install_cmd_called
|
960
|
+
attr_reader :run_build_cmd_called, :run_install_cmd_called
|
961
|
+
attr_reader :run_push_cmd_called
|
941
962
|
|
942
963
|
def initialize(root_path)
|
943
964
|
@root = Pathname.new(File.expand_path(root_path))
|
@@ -952,15 +973,15 @@ class GGem::CLI
|
|
952
973
|
end
|
953
974
|
|
954
975
|
def path
|
955
|
-
@root.join("#{
|
976
|
+
@root.join("#{name}.gemspec")
|
956
977
|
end
|
957
978
|
|
958
979
|
def gem_file_name
|
959
|
-
"#{
|
980
|
+
"#{name}-#{version}.gem"
|
960
981
|
end
|
961
982
|
|
962
983
|
def gem_file
|
963
|
-
File.join(GGem::Gemspec::BUILD_TO_DIRNAME,
|
984
|
+
File.join(GGem::Gemspec::BUILD_TO_DIRNAME, gem_file_name)
|
964
985
|
end
|
965
986
|
|
966
987
|
def run_build_cmd
|
@@ -982,8 +1003,10 @@ class GGem::CLI
|
|
982
1003
|
class GitRepoSpy
|
983
1004
|
attr_reader :path
|
984
1005
|
attr_reader :run_init_cmd_called
|
985
|
-
attr_reader :run_validate_clean_cmd_called
|
986
|
-
attr_reader :
|
1006
|
+
attr_reader :run_validate_clean_cmd_called
|
1007
|
+
attr_reader :run_validate_committed_cmd_called
|
1008
|
+
attr_reader :run_add_version_tag_cmd_called_with
|
1009
|
+
attr_reader :run_rm_tag_cmd_called_with
|
987
1010
|
attr_reader :run_push_cmd_called
|
988
1011
|
|
989
1012
|
def initialize(path)
|
data/test/unit/gemspec_tests.rb
CHANGED
@@ -94,18 +94,23 @@ class GGem::Gemspec
|
|
94
94
|
|
95
95
|
setup do
|
96
96
|
@exp_build_path = @gem1_root_path.join(subject.gem_file_name)
|
97
|
-
@exp_pkg_path =
|
97
|
+
@exp_pkg_path =
|
98
|
+
@gem1_root_path.join(
|
99
|
+
@gemspec_class::BUILD_TO_DIRNAME,
|
100
|
+
subject.gem_file_name,
|
101
|
+
)
|
98
102
|
end
|
99
103
|
end
|
100
104
|
|
101
105
|
class RunBuildCmdTests < CmdTests
|
102
106
|
desc "`run_build_cmd`"
|
103
107
|
setup do
|
104
|
-
@exp_cmds_run =
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
108
|
+
@exp_cmds_run =
|
109
|
+
[
|
110
|
+
"gem build --verbose #{subject.path}",
|
111
|
+
"mkdir -p #{@exp_pkg_path.dirname}",
|
112
|
+
"mv #{@exp_build_path} #{@exp_pkg_path}",
|
113
|
+
]
|
109
114
|
end
|
110
115
|
|
111
116
|
should "run system cmds to build the gem" do
|
data/test/unit/git_repo_tests.rb
CHANGED
@@ -47,7 +47,7 @@ class GGem::GitRepo
|
|
47
47
|
setup do
|
48
48
|
@exp_cmds_run = [
|
49
49
|
"cd #{@repo_path} && git init",
|
50
|
-
"cd #{@repo_path} && git add --all && git add -f *.keep"
|
50
|
+
"cd #{@repo_path} && git add --all && git add -f *.keep",
|
51
51
|
]
|
52
52
|
end
|
53
53
|
|
@@ -64,7 +64,7 @@ class GGem::GitRepo
|
|
64
64
|
desc "`run_validate_clean_cmd`"
|
65
65
|
setup do
|
66
66
|
@exp_cmds_run = [
|
67
|
-
"cd #{@repo_path} && git diff --exit-code"
|
67
|
+
"cd #{@repo_path} && git diff --exit-code",
|
68
68
|
]
|
69
69
|
end
|
70
70
|
|
@@ -81,7 +81,7 @@ class GGem::GitRepo
|
|
81
81
|
desc "`run_validate_committed_cmd`"
|
82
82
|
setup do
|
83
83
|
@exp_cmds_run = [
|
84
|
-
"cd #{@repo_path} && git diff-index --quiet --cached HEAD"
|
84
|
+
"cd #{@repo_path} && git diff-index --quiet --cached HEAD",
|
85
85
|
]
|
86
86
|
end
|
87
87
|
|
@@ -99,7 +99,7 @@ class GGem::GitRepo
|
|
99
99
|
setup do
|
100
100
|
@exp_cmds_run = [
|
101
101
|
"cd #{@repo_path} && git push",
|
102
|
-
"cd #{@repo_path} && git push --tags"
|
102
|
+
"cd #{@repo_path} && git push --tags",
|
103
103
|
]
|
104
104
|
end
|
105
105
|
|
@@ -119,7 +119,7 @@ class GGem::GitRepo
|
|
119
119
|
@tag = Factory.string
|
120
120
|
|
121
121
|
@exp_cmds_run = [
|
122
|
-
"cd #{@repo_path} && git tag -a -m \"Version #{@version}\" #{@tag}"
|
122
|
+
"cd #{@repo_path} && git tag -a -m \"Version #{@version}\" #{@tag}",
|
123
123
|
]
|
124
124
|
end
|
125
125
|
|
@@ -128,7 +128,9 @@ class GGem::GitRepo
|
|
128
128
|
end
|
129
129
|
|
130
130
|
should "complain if any system cmds are not successful" do
|
131
|
-
assert_exp_cmds_error(CmdError)
|
131
|
+
assert_exp_cmds_error(CmdError) do
|
132
|
+
subject.run_add_version_tag_cmd(@version, @tag)
|
133
|
+
end
|
132
134
|
end
|
133
135
|
end
|
134
136
|
|
@@ -138,7 +140,7 @@ class GGem::GitRepo
|
|
138
140
|
@tag = Factory.string
|
139
141
|
|
140
142
|
@exp_cmds_run = [
|
141
|
-
"cd #{@repo_path} && git tag -d #{@tag}"
|
143
|
+
"cd #{@repo_path} && git tag -d #{@tag}",
|
142
144
|
]
|
143
145
|
end
|
144
146
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ggem
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.10.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Kelly Redding
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2021-01-
|
12
|
+
date: 2021-01-08 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: assert
|
@@ -26,7 +26,21 @@ dependencies:
|
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: 2.19.2
|
28
28
|
- !ruby/object:Gem::Dependency
|
29
|
-
name: much-
|
29
|
+
name: much-style-guide
|
30
|
+
requirement: !ruby/object:Gem::Requirement
|
31
|
+
requirements:
|
32
|
+
- - "~>"
|
33
|
+
- !ruby/object:Gem::Version
|
34
|
+
version: 0.3.0
|
35
|
+
type: :development
|
36
|
+
prerelease: false
|
37
|
+
version_requirements: !ruby/object:Gem::Requirement
|
38
|
+
requirements:
|
39
|
+
- - "~>"
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: 0.3.0
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: much-mixin
|
30
44
|
requirement: !ruby/object:Gem::Requirement
|
31
45
|
requirements:
|
32
46
|
- - "~>"
|
@@ -80,9 +94,12 @@ files:
|
|
80
94
|
- lib/ggem/template_file/README.md.erb
|
81
95
|
- lib/ggem/template_file/gemspec.erb
|
82
96
|
- lib/ggem/template_file/gitignore.erb
|
97
|
+
- lib/ggem/template_file/l.yml.erb
|
83
98
|
- lib/ggem/template_file/lib.rb.erb
|
84
99
|
- lib/ggem/template_file/lib_version.rb.erb
|
100
|
+
- lib/ggem/template_file/rubocop.yml.erb
|
85
101
|
- lib/ggem/template_file/ruby-version.erb
|
102
|
+
- lib/ggem/template_file/t.yml.erb
|
86
103
|
- lib/ggem/template_file/test_helper.rb.erb
|
87
104
|
- lib/ggem/template_file/test_support_factory.rb.erb
|
88
105
|
- lib/ggem/version.rb
|
@@ -117,7 +134,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
117
134
|
- !ruby/object:Gem::Version
|
118
135
|
version: '0'
|
119
136
|
requirements: []
|
120
|
-
rubygems_version: 3.
|
137
|
+
rubygems_version: 3.2.4
|
121
138
|
signing_key:
|
122
139
|
specification_version: 4
|
123
140
|
summary: '"Juh Gem", baby! (a gem utility CLI)'
|