tty 0.7.0 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
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