tty 0.7.0 → 0.8.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.
Files changed (69) hide show
  1. checksums.yaml +4 -4
  2. data/.rspec +2 -2
  3. data/.travis.yml +15 -4
  4. data/CHANGELOG.md +22 -0
  5. data/Gemfile +4 -7
  6. data/README.md +648 -58
  7. data/appveyor.yml +3 -4
  8. data/exe/teletype +18 -0
  9. data/lib/tty.rb +7 -4
  10. data/lib/tty/cli.rb +140 -0
  11. data/lib/tty/cmd.rb +132 -0
  12. data/lib/tty/commands/add.rb +321 -0
  13. data/lib/tty/commands/new.rb +256 -0
  14. data/lib/tty/gemspec.rb +30 -0
  15. data/lib/tty/licenses.rb +34 -0
  16. data/lib/tty/path_helpers.rb +38 -0
  17. data/lib/tty/plugins.rb +20 -12
  18. data/lib/tty/templater.rb +54 -0
  19. data/lib/tty/templates/add/command.rb.tt +31 -0
  20. data/lib/tty/templates/add/gitkeep.tt +1 -0
  21. data/lib/tty/templates/add/namespace.rb.tt +17 -0
  22. data/lib/tty/templates/add/spec/integration/command_spec.rb.tt +20 -0
  23. data/lib/tty/templates/add/spec/integration/sub_command_spec.rb.tt +16 -0
  24. data/lib/tty/templates/add/spec/unit/command_spec.rb.tt +15 -0
  25. data/lib/tty/templates/add/spec/unit/sub_command_spec.rb.tt +15 -0
  26. data/lib/tty/templates/add/test/integration/command_test.rb.tt +23 -0
  27. data/lib/tty/templates/add/test/integration/sub_command_test.rb.tt +19 -0
  28. data/lib/tty/templates/add/test/unit/command_test.rb.tt +16 -0
  29. data/lib/tty/templates/add/test/unit/sub_command_test.rb.tt +16 -0
  30. data/lib/tty/templates/new/agplv3_LICENSE.txt.tt +555 -0
  31. data/lib/tty/templates/new/apache_LICENSE.txt.tt +157 -0
  32. data/lib/tty/templates/new/bsd2_LICENSE.txt.tt +22 -0
  33. data/lib/tty/templates/new/bsd3_LICENSE.txt.tt +26 -0
  34. data/lib/tty/templates/new/exe/newcli.tt +18 -0
  35. data/lib/tty/templates/new/gitkeep.tt +1 -0
  36. data/lib/tty/templates/new/gplv2_LICENSE.txt.tt +255 -0
  37. data/lib/tty/templates/new/gplv3_LICENSE.txt.tt +543 -0
  38. data/lib/tty/templates/new/lgplv3_LICENSE.txt.tt +143 -0
  39. data/lib/tty/templates/new/lib/newcli/cli.rb.tt +24 -0
  40. data/lib/tty/templates/new/lib/newcli/command.rb.tt +124 -0
  41. data/lib/tty/templates/new/mit_LICENSE.txt.tt +20 -0
  42. data/lib/tty/templates/new/mplv2_LICENSE.txt.tt +277 -0
  43. data/lib/tty/version.rb +1 -1
  44. data/spec/fixtures/foo-0.0.1.gemspec +4 -4
  45. data/spec/integration/add_desc_args_spec.rb +341 -0
  46. data/spec/integration/add_force_spec.rb +98 -0
  47. data/spec/integration/add_namespaced_spec.rb +291 -0
  48. data/spec/integration/add_spec.rb +535 -0
  49. data/spec/integration/add_subcommand_spec.rb +259 -0
  50. data/spec/integration/new_author_spec.rb +19 -0
  51. data/spec/integration/new_license_spec.rb +39 -0
  52. data/spec/integration/new_namespaced_spec.rb +228 -0
  53. data/spec/integration/new_spec.rb +354 -0
  54. data/spec/integration/new_test_spec.rb +21 -0
  55. data/spec/integration/start_spec.rb +21 -0
  56. data/spec/spec_helper.rb +47 -16
  57. data/spec/unit/gemspec_spec.rb +17 -0
  58. data/spec/{tty/plugins/load_spec.rb → unit/plugins/activate_spec.rb} +2 -4
  59. data/spec/unit/plugins/load_from_spec.rb +28 -0
  60. data/spec/{tty → unit}/plugins/plugin/load_spec.rb +1 -3
  61. data/spec/{tty → unit}/plugins/plugin/new_spec.rb +1 -3
  62. data/spec/{tty → unit}/tty_spec.rb +1 -3
  63. data/tty.gemspec +25 -15
  64. metadata +186 -49
  65. data/spec/tty/plugins/find_spec.rb +0 -20
  66. data/tasks/metrics/cane.rake +0 -14
  67. data/tasks/metrics/flog.rake +0 -17
  68. data/tasks/metrics/heckle.rake +0 -15
  69. data/tasks/metrics/reek.rake +0 -13
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  module TTY
4
- VERSION = "0.7.0"
4
+ VERSION = "0.8.0".freeze
5
5
  end # TTY
@@ -1,11 +1,11 @@
1
1
  # encoding: utf-8
2
2
 
3
3
  Gem::Specification.new do |spec|
4
- spec.name = 'foo'
5
- spec.version = '0.0.1'
6
- spec.platform = 'ruby'
4
+ spec.name = 'foo'
5
+ spec.version = '0.0.1'
6
+ spec.platform = 'ruby'
7
+ spec.summary = 'A foo gem'
7
8
  spec.require_paths = ['lib']
8
- spec.summary = 'A foo gem'
9
9
 
10
10
  spec.add_dependency 'pastel'
11
11
  spec.add_dependency 'equatable'
@@ -0,0 +1,341 @@
1
+ RSpec.describe "`teletype add --desc --args` command", type: :cli do
2
+ it "adds command with description and custom arguments" do
3
+ app_path = tmp_path('newcli')
4
+ cli_template = <<-EOS
5
+ require 'thor'
6
+
7
+ module Newcli
8
+ class CLI < Thor
9
+ end
10
+ end
11
+ EOS
12
+ dir = {
13
+ app_path => [
14
+ 'lib' => [
15
+ 'newcli' => [
16
+ ['cli.rb', cli_template]
17
+ ]
18
+ ]
19
+ ]
20
+ }
21
+ ::TTY::File.create_dir(dir, verbose: false)
22
+ within_dir(app_path) do
23
+ command = "teletype add config --test rspec --desc='Set and get configuration option' --args=arg1 arg2 --no-color"
24
+
25
+ out, err, status = Open3.capture3(command)
26
+
27
+ expect(out).to match <<-OUT
28
+ create spec/integration/config_spec.rb
29
+ create spec/unit/config_spec.rb
30
+ create lib/newcli/commands/config.rb
31
+ create lib/newcli/templates/config/.gitkeep
32
+ inject lib/newcli/cli.rb
33
+ OUT
34
+ expect(err).to eq('')
35
+ expect(status.exitstatus).to eq(0)
36
+
37
+ expect(::File.read('lib/newcli/cli.rb')).to eq <<-EOS
38
+ require 'thor'
39
+
40
+ module Newcli
41
+ class CLI < Thor
42
+
43
+ desc 'config ARG1 ARG2', 'Set and get configuration option'
44
+ method_option :help, aliases: '-h', type: :boolean,
45
+ desc: 'Display usage information'
46
+ def config(arg1, arg2)
47
+ if options[:help]
48
+ invoke :help, ['config']
49
+ else
50
+ require_relative 'commands/config'
51
+ Newcli::Commands::Config.new(arg1, arg2, options).execute
52
+ end
53
+ end
54
+ end
55
+ end
56
+ EOS
57
+
58
+ expect(::File.read('lib/newcli/commands/config.rb')).to eq <<-EOS
59
+ # frozen_string_literal: true
60
+
61
+ require_relative '../command'
62
+
63
+ module Newcli
64
+ module Commands
65
+ class Config < Newcli::Command
66
+ def initialize(arg1, arg2, options)
67
+ @arg1 = arg1
68
+ @arg2 = arg2
69
+ @options = options
70
+ end
71
+
72
+ def execute(input: $stdin, output: $stdout)
73
+ # Command logic goes here ...
74
+ output.puts "OK"
75
+ end
76
+ end
77
+ end
78
+ end
79
+ EOS
80
+
81
+ # test setup
82
+ #
83
+ expect(::File.read('spec/integration/config_spec.rb')).to eq <<-EOS
84
+ RSpec.describe "`newcli config` command", type: :cli do
85
+ it "executes `newcli help config` command successfully" do
86
+ output = `newcli help config`
87
+ expected_output = <<-OUT
88
+ Usage:
89
+ newcli config ARG1 ARG2
90
+
91
+ Options:
92
+ -h, [--help], [--no-help] # Display usage information
93
+
94
+ Set and get configuration option
95
+ OUT
96
+
97
+ expect(output).to eq(expected_output)
98
+ end
99
+ end
100
+ EOS
101
+
102
+ expect(::File.read('spec/unit/config_spec.rb')).to eq <<-EOS
103
+ require 'newcli/commands/config'
104
+
105
+ RSpec.describe Newcli::Commands::Config do
106
+ it "executes `config` command successfully" do
107
+ output = StringIO.new
108
+ arg1 = nil
109
+ arg2 = nil
110
+ options = {}
111
+ command = Newcli::Commands::Config.new(arg1, arg2, options)
112
+
113
+ command.execute(output: output)
114
+
115
+ expect(output.string).to eq("OK\\n")
116
+ end
117
+ end
118
+ EOS
119
+ end
120
+ end
121
+
122
+ it "adds command with variadic number of arguments" do
123
+ app_path = tmp_path('newcli')
124
+ cli_template = <<-EOS
125
+ require 'thor'
126
+
127
+ module Newcli
128
+ class CLI < Thor
129
+ end
130
+ end
131
+ EOS
132
+ dir = {
133
+ app_path => [
134
+ 'lib' => [
135
+ 'newcli' => [
136
+ ['cli.rb', cli_template]
137
+ ]
138
+ ]
139
+ ]
140
+ }
141
+ ::TTY::File.create_dir(dir, verbose: false)
142
+ within_dir(app_path) do
143
+ command = "teletype add config --args=arg1 *names --test=minitest --no-color"
144
+
145
+ out, err, status = Open3.capture3(command)
146
+
147
+ expect(out).to match <<-OUT
148
+ create test/integration/config_test.rb
149
+ create test/unit/config_test.rb
150
+ create lib/newcli/commands/config.rb
151
+ create lib/newcli/templates/config/.gitkeep
152
+ inject lib/newcli/cli.rb
153
+ OUT
154
+ expect(err).to eq('')
155
+ expect(status.exitstatus).to eq(0)
156
+
157
+ expect(::File.read('lib/newcli/cli.rb')).to eq <<-EOS
158
+ require 'thor'
159
+
160
+ module Newcli
161
+ class CLI < Thor
162
+
163
+ desc 'config ARG1 NAMES...', 'Command description...'
164
+ method_option :help, aliases: '-h', type: :boolean,
165
+ desc: 'Display usage information'
166
+ def config(arg1, *names)
167
+ if options[:help]
168
+ invoke :help, ['config']
169
+ else
170
+ require_relative 'commands/config'
171
+ Newcli::Commands::Config.new(arg1, names, options).execute
172
+ end
173
+ end
174
+ end
175
+ end
176
+ EOS
177
+
178
+ expect(::File.read('lib/newcli/commands/config.rb')).to eq <<-EOS
179
+ # frozen_string_literal: true
180
+
181
+ require_relative '../command'
182
+
183
+ module Newcli
184
+ module Commands
185
+ class Config < Newcli::Command
186
+ def initialize(arg1, names, options)
187
+ @arg1 = arg1
188
+ @names = names
189
+ @options = options
190
+ end
191
+
192
+ def execute(input: $stdin, output: $stdout)
193
+ # Command logic goes here ...
194
+ output.puts "OK"
195
+ end
196
+ end
197
+ end
198
+ end
199
+ EOS
200
+
201
+ # test/integration/config_test.rb
202
+ #
203
+ expect(::File.read('test/integration/config_test.rb')).to eq <<-EOS
204
+ require 'test_helper'
205
+ require 'newcli/commands/config'
206
+
207
+ class Newcli::Commands::ConfigTest < Minitest::Test
208
+ def test_executes_newcli_help_config_command_successfully
209
+ output = `newcli help config`
210
+ expected_output = <<-OUT
211
+ Usage:
212
+ newcli config ARG1 NAMES...
213
+
214
+ Options:
215
+ -h, [--help], [--no-help] # Display usage information
216
+
217
+ Command description...
218
+ OUT
219
+
220
+ assert_equal expected_output, output
221
+ end
222
+ end
223
+ EOS
224
+
225
+ # test/unit/config_test.rb
226
+ #
227
+ expect(::File.read('test/unit/config_test.rb')).to eq <<-EOS
228
+ require 'test_helper'
229
+ require 'newcli/commands/config'
230
+
231
+ class Newcli::Commands::ConfigTest < Minitest::Test
232
+ def test_executes_config_command_successfully
233
+ output = StringIO.new
234
+ arg1 = nil
235
+ names = nil
236
+ options = {}
237
+ command = Newcli::Commands::Config.new(arg1, names, options)
238
+
239
+ command.execute(output: output)
240
+
241
+ assert_equal "OK\\n", output.string
242
+ end
243
+ end
244
+ EOS
245
+ end
246
+ end
247
+
248
+ it "adds subcommand with description and custom arguments" do
249
+ app_path = tmp_path('newcli')
250
+ cli_template = <<-EOS
251
+ require 'thor'
252
+
253
+ module Newcli
254
+ class CLI < Thor
255
+ end
256
+ end
257
+ EOS
258
+ dir = {
259
+ app_path => [
260
+ 'lib' => [
261
+ 'newcli' => [
262
+ ['cli.rb', cli_template]
263
+ ]
264
+ ]
265
+ ]
266
+ }
267
+ ::TTY::File.create_dir(dir, verbose: false)
268
+ within_dir(app_path) do
269
+ command = "teletype add config set --desc='Set configuration option' --args=name 'value = nil'"
270
+
271
+ _, err, status = Open3.capture3(command)
272
+
273
+ expect(err).to eq('')
274
+ expect(status.exitstatus).to eq(0)
275
+
276
+ expect(::File.read('lib/newcli/cli.rb')).to eq <<-EOS
277
+ require 'thor'
278
+
279
+ module Newcli
280
+ class CLI < Thor
281
+
282
+ require_relative 'commands/config'
283
+ register Newcli::Commands::Config, 'config', 'config [SUBCOMMAND]', 'Set configuration option'
284
+ end
285
+ end
286
+ EOS
287
+
288
+ expect(::File.read('lib/newcli/commands/config.rb')).to eq <<-EOS
289
+ # frozen_string_literal: true
290
+
291
+ require 'thor'
292
+
293
+ module Newcli
294
+ module Commands
295
+ class Config < Thor
296
+
297
+ namespace :config
298
+
299
+ desc 'set NAME [VALUE]', 'Set configuration option'
300
+ method_option :help, aliases: '-h', type: :boolean,
301
+ desc: 'Display usage information'
302
+ def set(name, value = nil)
303
+ if options[:help]
304
+ invoke :help, ['set']
305
+ else
306
+ require_relative 'config/set'
307
+ Newcli::Commands::Config::Set.new(name, value, options).execute
308
+ end
309
+ end
310
+ end
311
+ end
312
+ end
313
+ EOS
314
+
315
+ expect(::File.read('lib/newcli/commands/config/set.rb')).to eq <<-EOS
316
+ # frozen_string_literal: true
317
+
318
+ require_relative '../../command'
319
+
320
+ module Newcli
321
+ module Commands
322
+ class Config
323
+ class Set < Newcli::Command
324
+ def initialize(name, value, options)
325
+ @name = name
326
+ @value = value
327
+ @options = options
328
+ end
329
+
330
+ def execute(input: $stdin, output: $stdout)
331
+ # Command logic goes here ...
332
+ output.puts "OK"
333
+ end
334
+ end
335
+ end
336
+ end
337
+ end
338
+ EOS
339
+ end
340
+ end
341
+ end
@@ -0,0 +1,98 @@
1
+ RSpec.describe "`teletype add --force` command", type: :cli do
2
+ it "forces adding already existing command" do
3
+ app_path = tmp_path('newcli')
4
+ cli_template = <<-EOS
5
+ require 'thor'
6
+
7
+ module Newcli
8
+ class CLI < Thor
9
+ desc 'config', 'Set and unset configuration information'
10
+ method_option :help, aliases: '-h', type: :boolean,
11
+ desc: 'Display usage information'
12
+ def config(*)
13
+ if options[:help]
14
+ else
15
+ require_relative 'commands/config'
16
+ Newcli::Commands::Config.new(options).execute
17
+ end
18
+ end
19
+ end
20
+ end
21
+ EOS
22
+
23
+ config_template = <<-EOS
24
+ require_relative '../command'
25
+
26
+ module Newcli
27
+ module Commands
28
+ class Config < Newcli::Command
29
+ def initialize(options)
30
+ @options = options
31
+ end
32
+
33
+ def execute(input: $stdin, output: $stdout)
34
+ puts 'config command'
35
+ end
36
+ end
37
+ end
38
+ end
39
+ EOS
40
+
41
+ dir = {
42
+ app_path => [
43
+ 'lib' => [
44
+ 'newcli' => [
45
+ ['cli.rb', cli_template],
46
+ 'commands' => [
47
+ ['config.rb', config_template]
48
+ ]
49
+ ]
50
+ ],
51
+ 'spec' => [
52
+ 'integration' => [
53
+ 'config_spec.rb'
54
+ ]
55
+ ]
56
+ ]
57
+ }
58
+ ::TTY::File.create_dir(dir, verbose: false)
59
+
60
+ output = <<-OUT
61
+ force spec/integration/config_spec.rb
62
+ create spec/unit/config_spec.rb
63
+ force lib/newcli/commands/config.rb
64
+ create lib/newcli/templates/config/.gitkeep
65
+ OUT
66
+
67
+ within_dir(app_path) do
68
+ command = "teletype add config --no-color --force"
69
+
70
+ out, err, status = Open3.capture3(command)
71
+
72
+ expect(out).to eq(output)
73
+ expect(err).to eq('')
74
+ expect(status.exitstatus).to eq(0)
75
+
76
+ expect(::File.read('lib/newcli/commands/config.rb')).to eq <<-EOS
77
+ # frozen_string_literal: true
78
+
79
+ require_relative '../command'
80
+
81
+ module Newcli
82
+ module Commands
83
+ class Config < Newcli::Command
84
+ def initialize(options)
85
+ @options = options
86
+ end
87
+
88
+ def execute(input: $stdin, output: $stdout)
89
+ # Command logic goes here ...
90
+ output.puts "OK"
91
+ end
92
+ end
93
+ end
94
+ end
95
+ EOS
96
+ end
97
+ end
98
+ end