app_archetype 1.2.8 → 1.3.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 (42) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile.lock +36 -9
  3. data/README.md +150 -28
  4. data/app_archetype.gemspec +3 -0
  5. data/bin/app_archetype +20 -0
  6. data/bin/archetype +1 -1
  7. data/lib/app_archetype/cli.rb +171 -139
  8. data/lib/app_archetype/commands/delete_template.rb +58 -0
  9. data/lib/app_archetype/commands/find_templates.rb +66 -0
  10. data/lib/app_archetype/commands/list_templates.rb +49 -0
  11. data/lib/app_archetype/commands/new_template.rb +42 -0
  12. data/lib/app_archetype/commands/open_manifest.rb +48 -0
  13. data/lib/app_archetype/commands/print_path.rb +20 -0
  14. data/lib/app_archetype/commands/print_template_variables.rb +67 -0
  15. data/lib/app_archetype/commands/print_version.rb +19 -0
  16. data/lib/app_archetype/commands/render_template.rb +178 -0
  17. data/lib/app_archetype/commands.rb +13 -0
  18. data/lib/app_archetype/generators.rb +1 -1
  19. data/lib/app_archetype/template_manager.rb +9 -0
  20. data/lib/app_archetype/version.rb +1 -1
  21. data/lib/app_archetype.rb +40 -23
  22. data/scripts/create_new_command +32 -0
  23. data/scripts/generators/command/manifest.json +15 -0
  24. data/scripts/generators/command/template/lib/app_archetype/commands/{{command_name.snake_case}}.rb.hbs +17 -0
  25. data/spec/app_archetype/cli/presenters_spec.rb +99 -99
  26. data/spec/app_archetype/cli/prompts_spec.rb +291 -291
  27. data/spec/app_archetype/cli_spec.rb +427 -65
  28. data/spec/app_archetype/commands/delete_template_spec.rb +132 -0
  29. data/spec/app_archetype/commands/find_templates_spec.rb +130 -0
  30. data/spec/app_archetype/commands/list_templates_spec.rb +55 -0
  31. data/spec/app_archetype/commands/new_template_spec.rb +84 -0
  32. data/spec/app_archetype/commands/open_manifest_spec.rb +113 -0
  33. data/spec/app_archetype/commands/print_path_spec.rb +22 -0
  34. data/spec/app_archetype/commands/print_template_variables_spec.rb +158 -0
  35. data/spec/app_archetype/commands/print_version_spec.rb +21 -0
  36. data/spec/app_archetype/commands/render_template_spec.rb +479 -0
  37. data/spec/app_archetype/generators_spec.rb +1 -1
  38. data/spec/app_archetype/template_manager_spec.rb +32 -0
  39. data/spec/app_archetype_spec.rb +65 -0
  40. metadata +79 -4
  41. data/lib/app_archetype/cli/presenters.rb +0 -106
  42. data/lib/app_archetype/cli/prompts.rb +0 -152
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: app_archetype
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.8
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Bigger
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-26 00:00:00.000000000 Z
11
+ date: 2021-11-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: cli-format
@@ -24,6 +24,20 @@ dependencies:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: hashie
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '0'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: highline
29
43
  requirement: !ruby/object:Gem::Requirement
@@ -150,6 +164,34 @@ dependencies:
150
164
  - - "~>"
151
165
  - !ruby/object:Gem::Version
152
166
  version: '1.0'
167
+ - !ruby/object:Gem::Dependency
168
+ name: tty-prompt
169
+ requirement: !ruby/object:Gem::Requirement
170
+ requirements:
171
+ - - "~>"
172
+ - !ruby/object:Gem::Version
173
+ version: 0.23.1
174
+ type: :runtime
175
+ prerelease: false
176
+ version_requirements: !ruby/object:Gem::Requirement
177
+ requirements:
178
+ - - "~>"
179
+ - !ruby/object:Gem::Version
180
+ version: 0.23.1
181
+ - !ruby/object:Gem::Dependency
182
+ name: tty-table
183
+ requirement: !ruby/object:Gem::Requirement
184
+ requirements:
185
+ - - "~>"
186
+ - !ruby/object:Gem::Version
187
+ version: 0.12.0
188
+ type: :runtime
189
+ prerelease: false
190
+ version_requirements: !ruby/object:Gem::Requirement
191
+ requirements:
192
+ - - "~>"
193
+ - !ruby/object:Gem::Version
194
+ version: 0.12.0
153
195
  - !ruby/object:Gem::Dependency
154
196
  name: bump
155
197
  requirement: !ruby/object:Gem::Requirement
@@ -280,6 +322,7 @@ description:
280
322
  email:
281
323
  - andrew.bigger@gmail.com
282
324
  executables:
325
+ - app_archetype
283
326
  - archetype
284
327
  extensions: []
285
328
  extra_rdoc_files: []
@@ -296,11 +339,20 @@ files:
296
339
  - README.md
297
340
  - Rakefile
298
341
  - app_archetype.gemspec
342
+ - bin/app_archetype
299
343
  - bin/archetype
300
344
  - lib/app_archetype.rb
301
345
  - lib/app_archetype/cli.rb
302
- - lib/app_archetype/cli/presenters.rb
303
- - lib/app_archetype/cli/prompts.rb
346
+ - lib/app_archetype/commands.rb
347
+ - lib/app_archetype/commands/delete_template.rb
348
+ - lib/app_archetype/commands/find_templates.rb
349
+ - lib/app_archetype/commands/list_templates.rb
350
+ - lib/app_archetype/commands/new_template.rb
351
+ - lib/app_archetype/commands/open_manifest.rb
352
+ - lib/app_archetype/commands/print_path.rb
353
+ - lib/app_archetype/commands/print_template_variables.rb
354
+ - lib/app_archetype/commands/print_version.rb
355
+ - lib/app_archetype/commands/render_template.rb
304
356
  - lib/app_archetype/generators.rb
305
357
  - lib/app_archetype/logger.rb
306
358
  - lib/app_archetype/renderer.rb
@@ -314,9 +366,21 @@ files:
314
366
  - lib/app_archetype/template_manager.rb
315
367
  - lib/app_archetype/version.rb
316
368
  - lib/core_ext/string.rb
369
+ - scripts/create_new_command
370
+ - scripts/generators/command/manifest.json
371
+ - scripts/generators/command/template/lib/app_archetype/commands/{{command_name.snake_case}}.rb.hbs
317
372
  - spec/app_archetype/cli/presenters_spec.rb
318
373
  - spec/app_archetype/cli/prompts_spec.rb
319
374
  - spec/app_archetype/cli_spec.rb
375
+ - spec/app_archetype/commands/delete_template_spec.rb
376
+ - spec/app_archetype/commands/find_templates_spec.rb
377
+ - spec/app_archetype/commands/list_templates_spec.rb
378
+ - spec/app_archetype/commands/new_template_spec.rb
379
+ - spec/app_archetype/commands/open_manifest_spec.rb
380
+ - spec/app_archetype/commands/print_path_spec.rb
381
+ - spec/app_archetype/commands/print_template_variables_spec.rb
382
+ - spec/app_archetype/commands/print_version_spec.rb
383
+ - spec/app_archetype/commands/render_template_spec.rb
320
384
  - spec/app_archetype/generators_spec.rb
321
385
  - spec/app_archetype/logger_spec.rb
322
386
  - spec/app_archetype/renderer_spec.rb
@@ -327,6 +391,7 @@ files:
327
391
  - spec/app_archetype/template/variable_manager_spec.rb
328
392
  - spec/app_archetype/template/variable_spec.rb
329
393
  - spec/app_archetype/template_manager_spec.rb
394
+ - spec/app_archetype_spec.rb
330
395
  - spec/core_ext/string_spec.rb
331
396
  - spec/spec_helper.rb
332
397
  homepage: https://github.com/andrewbigger/app_archetype
@@ -356,6 +421,15 @@ test_files:
356
421
  - spec/app_archetype/cli/presenters_spec.rb
357
422
  - spec/app_archetype/cli/prompts_spec.rb
358
423
  - spec/app_archetype/cli_spec.rb
424
+ - spec/app_archetype/commands/delete_template_spec.rb
425
+ - spec/app_archetype/commands/find_templates_spec.rb
426
+ - spec/app_archetype/commands/list_templates_spec.rb
427
+ - spec/app_archetype/commands/new_template_spec.rb
428
+ - spec/app_archetype/commands/open_manifest_spec.rb
429
+ - spec/app_archetype/commands/print_path_spec.rb
430
+ - spec/app_archetype/commands/print_template_variables_spec.rb
431
+ - spec/app_archetype/commands/print_version_spec.rb
432
+ - spec/app_archetype/commands/render_template_spec.rb
359
433
  - spec/app_archetype/generators_spec.rb
360
434
  - spec/app_archetype/logger_spec.rb
361
435
  - spec/app_archetype/renderer_spec.rb
@@ -366,5 +440,6 @@ test_files:
366
440
  - spec/app_archetype/template/variable_manager_spec.rb
367
441
  - spec/app_archetype/template/variable_spec.rb
368
442
  - spec/app_archetype/template_manager_spec.rb
443
+ - spec/app_archetype_spec.rb
369
444
  - spec/core_ext/string_spec.rb
370
445
  - spec/spec_helper.rb
@@ -1,106 +0,0 @@
1
- require 'cli-format'
2
-
3
- module AppArchetype
4
- class CLI < ::Thor
5
- # CLI output presenters
6
- module Presenters
7
- ##
8
- # Output table header
9
- #
10
- RESULT_HEADER = %w[NAME VERSION].freeze
11
-
12
- ##
13
- # Variable table header
14
- #
15
- VARIABLE_HEADER = %w[NAME DESCRIPTION DEFAULT].freeze
16
-
17
- ##
18
- # Validation result table header
19
- #
20
- VALIDATION_HEADER = %w[ERROR].freeze
21
-
22
- class <<self
23
- ##
24
- # Creates a presenter for given data
25
- #
26
- # Accepts header row data and has configurable format.
27
- #
28
- # Header must be array of string
29
- #
30
- # Data is array of arrays where the inner array is a row.
31
- #
32
- # Format by default is a table, although can be 'csv'
33
- # or 'json'.
34
- #
35
- # @param header [Array]
36
- # @param data [Array]
37
- # @param format [String]
38
- #
39
- # @return [CliFormat::Presenter]
40
- #
41
- def table(header: [], data: [], format: 'table')
42
- has_header = header.any?
43
- opts = { header: has_header, format: format }
44
-
45
- presenter = CliFormat::Presenter.new(opts)
46
- presenter.header = header if has_header
47
-
48
- data.each { |row| presenter.rows << row }
49
-
50
- presenter
51
- end
52
-
53
- ##
54
- # Builds a table of manifest information
55
- #
56
- # @param [Array] manifests
57
- #
58
- def manifest_list(manifests)
59
- table(
60
- header: RESULT_HEADER,
61
- data: manifests.map do |manifest|
62
- [
63
- manifest.name,
64
- manifest.version
65
- ]
66
- end
67
- ).show
68
- end
69
-
70
- ##
71
- # Builds a table of variable information
72
- #
73
- # @param [Array] variables
74
- #
75
- def variable_list(variables)
76
- table(
77
- header: VARIABLE_HEADER,
78
- data: variables.map do |variable|
79
- [
80
- variable.name,
81
- variable.description,
82
- variable.default
83
- ]
84
- end
85
- ).show
86
- end
87
-
88
- ##
89
- # Builds a table for manifest validation results
90
- #
91
- # @param [Array] results
92
- #
93
- def validation_result(results)
94
- table(
95
- header: VALIDATION_HEADER,
96
- data: results.map do |result|
97
- [
98
- result
99
- ]
100
- end
101
- ).show
102
- end
103
- end
104
- end
105
- end
106
- end
@@ -1,152 +0,0 @@
1
- require 'highline'
2
-
3
- module AppArchetype
4
- class CLI < ::Thor
5
- # CLI output presenters
6
- module Prompts
7
- ##
8
- # Variable prompt question. Asked when evaluating template
9
- # variables
10
- #
11
- # @param [AppArchetype::Template::Variable] variable
12
- #
13
- # @return [Proc]
14
- #
15
- VAR_PROMPT_MESSAGE = lambda do |variable|
16
- "\nEnter value for `#{variable.name}` variable\n\n"\
17
- "DESCRIPTION: #{variable.description}\n"\
18
- "TYPE: #{variable.type}\n"\
19
- "DEFAULT: #{variable.default}"
20
- end
21
-
22
- class <<self
23
- ##
24
- # Prompt returns a TTY prompt object for asking the user
25
- # questions.
26
- #
27
- # @return [HighLine]
28
- def prompt
29
- HighLine.new
30
- end
31
-
32
- ##
33
- # A yes/no prompt for asking the user a yes or no question.
34
- #
35
- # @return [Boolean]
36
- #
37
- def yes?(message)
38
- prompt.ask("#{message} [Y/n]", String) { |input| input.strip == 'Y' }
39
- end
40
-
41
- ##
42
- # Prompt for requesting user input.
43
- #
44
- # A default can be provided in the event the user does not
45
- # provide an answer.
46
- #
47
- # Validator also performs type conversion by default it is
48
- # a string
49
- #
50
- # @param message [String]
51
- # @param default [Object]
52
- # @param validator [Object|Lambda]
53
- #
54
- # @return [Object]
55
- #
56
- def ask(message, validator: String, default: nil)
57
- resp = prompt.ask(message, validator)
58
- return default if !default.nil? && resp.to_s.empty?
59
-
60
- resp
61
- end
62
-
63
- ##
64
- # Y/N prompt to ensure user is sure they wish to delete
65
- # the selected template
66
- #
67
- # @param [AppArchetype::Template::Manifest] manifest
68
- #
69
- # @return [Boolean]
70
- def delete_template(manifest)
71
- yes?(
72
- "Are you sure you want to delete `#{manifest.name}`?"
73
- )
74
- end
75
-
76
- ##
77
- # Returns a variable prompt based on the type of variable
78
- # required. Once prompt has been executed, the response is
79
- # returned to the caller.
80
- #
81
- # When the value is set in the manifest, the set value is
82
- # returned without a prompt.
83
- #
84
- # For boolean and integer variables, the relevant prompt
85
- # function is called.
86
- #
87
- # By default the string variable prompt will be used.
88
- #
89
- # @param [AppArchetype::Template::Variable] var
90
- #
91
- # @return [Object]
92
- #
93
- def variable_prompt_for(var)
94
- return var.value if var.value?
95
- return boolean_variable_prompt(var) if var.type == 'boolean'
96
- return integer_variable_prompt(var) if var.type == 'integer'
97
-
98
- string_variable_prompt(var)
99
- end
100
-
101
- ##
102
- # Prompt for boolean variable. This quizzes the user as to
103
- # whether they want the variable set or not. The response
104
- # is returned to the caller.
105
- #
106
- # @param [AppArchetype::Template::Variable] variable
107
- #
108
- # @return [Boolean]
109
- #
110
- def boolean_variable_prompt(variable)
111
- yes?(
112
- VAR_PROMPT_MESSAGE.call(variable)
113
- )
114
- end
115
-
116
- ##
117
- # Prompt for integer. This quizzes the user for their
118
- # choice and then attempts to convert it to an integer.
119
- #
120
- # In the event a non integer value is entered, a
121
- # RuntimeError is thrown.
122
- #
123
- # @param [AppArchetype::Template::Variable] variable
124
- #
125
- # @return [Integer]
126
- #
127
- def integer_variable_prompt(variable)
128
- ask(
129
- VAR_PROMPT_MESSAGE.call(variable),
130
- default: variable.default,
131
- validator: Integer
132
- )
133
- end
134
-
135
- ##
136
- # Prompt for a string. Asks user for input and returns
137
- # it.
138
- #
139
- # @param [AppArchetype::Template::Variable] variable
140
- #
141
- # @return [String]
142
- #
143
- def string_variable_prompt(variable)
144
- ask(
145
- VAR_PROMPT_MESSAGE.call(variable),
146
- default: variable.default
147
- )
148
- end
149
- end
150
- end
151
- end
152
- end