hanami-cli 0.3.0 → 2.0.0.alpha3

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 (102) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +42 -0
  3. data/.gitignore +4 -2
  4. data/.rspec +1 -0
  5. data/.rubocop.yml +25 -1
  6. data/CHANGELOG.md +30 -1
  7. data/CODE_OF_CONDUCT.md +84 -0
  8. data/Gemfile +13 -6
  9. data/LICENSE.txt +21 -0
  10. data/README.md +12 -605
  11. data/Rakefile +9 -12
  12. data/bin/console +1 -0
  13. data/exe/hanami +10 -0
  14. data/hanami-cli.gemspec +25 -18
  15. data/lib/hanami/cli/bundler.rb +73 -0
  16. data/lib/hanami/cli/command.rb +16 -355
  17. data/lib/hanami/cli/command_line.rb +17 -0
  18. data/lib/hanami/cli/commands/application.rb +63 -0
  19. data/lib/hanami/cli/commands/db/utils/database.rb +122 -0
  20. data/lib/hanami/cli/commands/db/utils/database_config.rb +48 -0
  21. data/lib/hanami/cli/commands/db/utils/mysql.rb +27 -0
  22. data/lib/hanami/cli/commands/db/utils/postgres.rb +49 -0
  23. data/lib/hanami/cli/commands/db/utils/sqlite.rb +37 -0
  24. data/lib/hanami/cli/commands/gem/new.rb +77 -0
  25. data/lib/hanami/cli/commands/gem/version.rb +18 -0
  26. data/lib/hanami/cli/commands/gem.rb +21 -0
  27. data/lib/hanami/cli/commands/monolith/console.rb +50 -0
  28. data/lib/hanami/cli/commands/monolith/db/create.rb +25 -0
  29. data/lib/hanami/cli/commands/monolith/db/create_migration.rb +29 -0
  30. data/lib/hanami/cli/commands/monolith/db/drop.rb +25 -0
  31. data/lib/hanami/cli/commands/monolith/db/migrate.rb +40 -0
  32. data/lib/hanami/cli/commands/monolith/db/reset.rb +26 -0
  33. data/lib/hanami/cli/commands/monolith/db/rollback.rb +55 -0
  34. data/lib/hanami/cli/commands/monolith/db/sample_data.rb +40 -0
  35. data/lib/hanami/cli/commands/monolith/db/seed.rb +40 -0
  36. data/lib/hanami/cli/commands/monolith/db/setup.rb +24 -0
  37. data/lib/hanami/cli/commands/monolith/db/structure/dump.rb +25 -0
  38. data/lib/hanami/cli/commands/monolith/db/version.rb +26 -0
  39. data/lib/hanami/cli/commands/monolith/generate/action.rb +62 -0
  40. data/lib/hanami/cli/commands/monolith/generate/slice.rb +62 -0
  41. data/lib/hanami/cli/commands/monolith/generate.rb +14 -0
  42. data/lib/hanami/cli/commands/monolith/install.rb +16 -0
  43. data/lib/hanami/cli/commands/monolith/version.rb +18 -0
  44. data/lib/hanami/cli/commands/monolith.rb +55 -0
  45. data/lib/hanami/cli/commands.rb +26 -0
  46. data/lib/hanami/cli/error.rb +8 -0
  47. data/lib/hanami/cli/generators/context.rb +38 -0
  48. data/lib/hanami/cli/generators/gem/application/monolith/action.erb +21 -0
  49. data/lib/hanami/cli/generators/gem/application/monolith/application.erb +8 -0
  50. data/lib/hanami/cli/generators/gem/application/monolith/config_ru.erb +5 -0
  51. data/lib/hanami/cli/generators/gem/application/monolith/entities.erb +9 -0
  52. data/lib/hanami/cli/generators/gem/application/monolith/env.erb +0 -0
  53. data/lib/hanami/cli/generators/gem/application/monolith/functions.erb +13 -0
  54. data/lib/hanami/cli/generators/gem/application/monolith/gemfile.erb +19 -0
  55. data/lib/hanami/cli/generators/gem/application/monolith/keep.erb +0 -0
  56. data/lib/hanami/cli/generators/gem/application/monolith/operation.erb +18 -0
  57. data/lib/hanami/cli/generators/gem/application/monolith/rakefile.erb +3 -0
  58. data/lib/hanami/cli/generators/gem/application/monolith/readme.erb +1 -0
  59. data/lib/hanami/cli/generators/gem/application/monolith/repository.erb +13 -0
  60. data/lib/hanami/cli/generators/gem/application/monolith/routes.erb +4 -0
  61. data/lib/hanami/cli/generators/gem/application/monolith/settings.erb +6 -0
  62. data/lib/hanami/cli/generators/gem/application/monolith/types.erb +10 -0
  63. data/lib/hanami/cli/generators/gem/application/monolith/validation_contract.erb +14 -0
  64. data/lib/hanami/cli/generators/gem/application/monolith/view_context.erb +15 -0
  65. data/lib/hanami/cli/generators/gem/application/monolith.rb +83 -0
  66. data/lib/hanami/cli/generators/gem/application.rb +21 -0
  67. data/lib/hanami/cli/generators/monolith/action/action.erb +13 -0
  68. data/lib/hanami/cli/generators/monolith/action/template.erb +0 -0
  69. data/lib/hanami/cli/generators/monolith/action/template.html.erb +2 -0
  70. data/lib/hanami/cli/generators/monolith/action/view.erb +13 -0
  71. data/lib/hanami/cli/generators/monolith/action.rb +123 -0
  72. data/lib/hanami/cli/generators/monolith/action_context.rb +76 -0
  73. data/lib/hanami/cli/generators/monolith/slice/action.erb +9 -0
  74. data/lib/hanami/cli/generators/monolith/slice/entities.erb +9 -0
  75. data/lib/hanami/cli/generators/monolith/slice/keep.erb +0 -0
  76. data/lib/hanami/cli/generators/monolith/slice/repository.erb +10 -0
  77. data/lib/hanami/cli/generators/monolith/slice/routes.erb +2 -0
  78. data/lib/hanami/cli/generators/monolith/slice/view.erb +9 -0
  79. data/lib/hanami/cli/generators/monolith/slice.rb +56 -0
  80. data/lib/hanami/cli/generators/monolith/slice_context.rb +33 -0
  81. data/lib/hanami/cli/repl/core.rb +55 -0
  82. data/lib/hanami/cli/repl/irb.rb +41 -0
  83. data/lib/hanami/cli/repl/pry.rb +29 -0
  84. data/lib/hanami/cli/system_call.rb +51 -0
  85. data/lib/hanami/cli/url.rb +34 -0
  86. data/lib/hanami/cli/version.rb +4 -3
  87. data/lib/hanami/cli.rb +10 -121
  88. data/lib/hanami/console/context.rb +39 -0
  89. data/lib/hanami/console/plugins/slice_readers.rb +42 -0
  90. data/lib/hanami/rake_tasks.rb +52 -0
  91. metadata +138 -42
  92. data/.circleci/config.yml +0 -141
  93. data/.travis.yml +0 -26
  94. data/lib/hanami/cli/banner.rb +0 -127
  95. data/lib/hanami/cli/command_registry.rb +0 -213
  96. data/lib/hanami/cli/errors.rb +0 -44
  97. data/lib/hanami/cli/option.rb +0 -132
  98. data/lib/hanami/cli/parser.rb +0 -142
  99. data/lib/hanami/cli/program_name.rb +0 -19
  100. data/lib/hanami/cli/registry.rb +0 -328
  101. data/lib/hanami/cli/usage.rb +0 -89
  102. data/script/ci +0 -61
data/.circleci/config.yml DELETED
@@ -1,141 +0,0 @@
1
- # Ruby CircleCI 2.0 configuration file
2
- #
3
- # Check https://circleci.com/docs/2.0/language-ruby/ for more details
4
- #
5
- version: 2
6
- jobs:
7
- "ruby-2.3":
8
- docker:
9
- - image: hanami/ruby-2.3
10
- working_directory: ~/hanami-utils
11
- steps:
12
- - checkout
13
- # Download and cache dependencies
14
- - restore_cache:
15
- keys:
16
- - v1-dependencies-{{ checksum "Gemfile.lock" }}
17
- # fallback to using the latest cache if no exact match is found
18
- - v1-dependencies-
19
- - run:
20
- name: install dependencies
21
- command: |
22
- bundle install --jobs=4 --retry=3 --path vendor/bundle
23
- - save_cache:
24
- paths:
25
- - ./vendor/bundle
26
- key: v1-dependencies-{{ checksum "Gemfile.lock" }}
27
- # run tests!
28
- - run:
29
- name: run tests
30
- command: |
31
- ./script/ci
32
- "ruby-2.4":
33
- docker:
34
- - image: hanami/ruby-2.4
35
- working_directory: ~/hanami-utils
36
- steps:
37
- - checkout
38
- # Download and cache dependencies
39
- - restore_cache:
40
- keys:
41
- - v1-dependencies-{{ checksum "Gemfile.lock" }}
42
- # fallback to using the latest cache if no exact match is found
43
- - v1-dependencies-
44
- - run:
45
- name: install dependencies
46
- command: |
47
- bundle install --jobs=4 --retry=3 --path vendor/bundle
48
- - save_cache:
49
- paths:
50
- - ./vendor/bundle
51
- key: v1-dependencies-{{ checksum "Gemfile.lock" }}
52
- # run tests!
53
- - run:
54
- name: run tests
55
- command: |
56
- ./script/ci
57
- "ruby-2.5":
58
- docker:
59
- - image: hanami/ruby-2.5
60
- working_directory: ~/hanami-utils
61
- steps:
62
- - checkout
63
- # Download and cache dependencies
64
- - restore_cache:
65
- keys:
66
- - v1-dependencies-{{ checksum "Gemfile.lock" }}
67
- # fallback to using the latest cache if no exact match is found
68
- - v1-dependencies-
69
- - run:
70
- name: install dependencies
71
- command: |
72
- bundle install --jobs=4 --retry=3 --path vendor/bundle
73
- - save_cache:
74
- paths:
75
- - ./vendor/bundle
76
- key: v1-dependencies-{{ checksum "Gemfile.lock" }}
77
- # run tests!
78
- - run:
79
- name: run tests
80
- command: |
81
- ./script/ci
82
- "jruby-9.1":
83
- docker:
84
- - image: hanami/jruby-9.1
85
- working_directory: ~/hanami-utils
86
- steps:
87
- - checkout
88
- # Download and cache dependencies
89
- - restore_cache:
90
- keys:
91
- - v1-dependencies-{{ checksum "Gemfile.lock" }}
92
- # fallback to using the latest cache if no exact match is found
93
- - v1-dependencies-
94
- - run:
95
- name: install dependencies
96
- command: |
97
- bundle install --jobs=4 --retry=3 --path vendor/bundle
98
- - save_cache:
99
- paths:
100
- - ./vendor/bundle
101
- key: v1-dependencies-{{ checksum "Gemfile.lock" }}
102
- # run tests!
103
- - run:
104
- name: run tests
105
- command: |
106
- ./script/ci
107
- "jruby-9.2":
108
- docker:
109
- - image: hanami/jruby-9.2
110
- working_directory: ~/hanami-utils
111
- steps:
112
- - checkout
113
- # Download and cache dependencies
114
- - restore_cache:
115
- keys:
116
- - v1-dependencies-{{ checksum "Gemfile.lock" }}
117
- # fallback to using the latest cache if no exact match is found
118
- - v1-dependencies-
119
- - run:
120
- name: install dependencies
121
- command: |
122
- bundle install --jobs=4 --retry=3 --path vendor/bundle
123
- - save_cache:
124
- paths:
125
- - ./vendor/bundle
126
- key: v1-dependencies-{{ checksum "Gemfile.lock" }}
127
- # run tests!
128
- - run:
129
- name: run tests
130
- command: |
131
- ./script/ci
132
-
133
- workflows:
134
- version: 2
135
- build:
136
- jobs:
137
- - "ruby-2.3"
138
- - "ruby-2.4"
139
- - "ruby-2.5"
140
- - "jruby-9.1"
141
- - "jruby-9.2"
data/.travis.yml DELETED
@@ -1,26 +0,0 @@
1
- language: ruby
2
- sudo: false
3
- cache: bundler
4
- before_script:
5
- - gem update --system
6
- script: ./script/ci
7
- rvm:
8
- - 2.4.4
9
- - 2.3.7
10
- - 2.5.1
11
- - jruby-9.1.9.0
12
- - ruby-head
13
- - jruby-head
14
-
15
- matrix:
16
- allow_failures:
17
- - rvm: ruby-head
18
- - rvm: jruby-head
19
-
20
- notifications:
21
- webhooks:
22
- urls:
23
- - https://webhooks.gitter.im/e/fde2367248d53de4fe70
24
- on_success: change # options: [always|never|change] default: always
25
- on_failure: always # options: [always|never|change] default: always
26
- on_start: never # options: [always|never|change] default: always
@@ -1,127 +0,0 @@
1
- require "hanami/cli/program_name"
2
-
3
- module Hanami
4
- class CLI
5
- # Command banner
6
- #
7
- # @since 0.1.0
8
- # @api private
9
- module Banner
10
- # Prints command banner
11
- #
12
- # @param command [Hanami::CLI::Command] the command
13
- # @param out [IO] standard output
14
- #
15
- # @since 0.1.0
16
- # @api private
17
- def self.call(command, out)
18
- output = [
19
- command_name(command),
20
- command_name_and_arguments(command),
21
- command_description(command),
22
- command_arguments(command),
23
- command_options(command),
24
- command_examples(command)
25
- ].compact.join("\n")
26
-
27
- out.puts output
28
- end
29
-
30
- # @since 0.1.0
31
- # @api private
32
- def self.command_name(command)
33
- "Command:\n #{full_command_name(command)}"
34
- end
35
-
36
- # @since 0.1.0
37
- # @api private
38
- def self.command_name_and_arguments(command)
39
- "\nUsage:\n #{full_command_name(command)}#{arguments(command)}"
40
- end
41
-
42
- # @since 0.1.0
43
- # @api private
44
- def self.command_examples(command)
45
- return if command.examples.empty?
46
-
47
- "\nExamples:\n#{command.examples.map { |example| " #{full_command_name(command)} #{example}" }.join("\n")}"
48
- end
49
-
50
- # @since 0.1.0
51
- # @api private
52
- def self.command_description(command)
53
- return if command.description.nil?
54
-
55
- "\nDescription:\n #{command.description}"
56
- end
57
-
58
- # @since 0.1.0
59
- # @api private
60
- def self.command_arguments(command)
61
- return if command.arguments.empty?
62
-
63
- "\nArguments:\n#{extended_command_arguments(command)}"
64
- end
65
-
66
- # @since 0.1.0
67
- # @api private
68
- def self.command_options(command)
69
- "\nOptions:\n#{extended_command_options(command)}"
70
- end
71
-
72
- # @since 0.1.0
73
- # @api private
74
- def self.full_command_name(command)
75
- ProgramName.call(command.command_name)
76
- end
77
-
78
- # @since 0.1.0
79
- # @api private
80
- def self.arguments(command) # rubocop:disable Metrics/AbcSize
81
- required_arguments = command.required_arguments
82
- optional_arguments = command.optional_arguments
83
-
84
- required = required_arguments.map { |arg| arg.name.upcase }.join(' ') if required_arguments.any?
85
- optional = optional_arguments.map { |arg| "[#{arg.name.upcase}]" }.join(' ') if optional_arguments.any?
86
- result = [required, optional].compact
87
-
88
- " #{result.join(' ')}" unless result.empty?
89
- end
90
-
91
- # @since 0.1.0
92
- # @api private
93
- def self.extended_command_arguments(command)
94
- command.arguments.map do |argument|
95
- " #{argument.name.to_s.upcase.ljust(20)}\t# #{'REQUIRED ' if argument.required?}#{argument.desc}"
96
- end.join("\n")
97
- end
98
-
99
- # @since 0.1.0
100
- # @api private
101
- #
102
- # rubocop:disable Metrics/AbcSize
103
- # rubocop:disable Metrics/MethodLength
104
- def self.extended_command_options(command)
105
- result = command.options.map do |option|
106
- name = Utils::String.dasherize(option.name)
107
- name = if option.boolean?
108
- "[no-]#{name}"
109
- else
110
- "#{name}=VALUE"
111
- end
112
-
113
- name = "#{name}, #{option.aliases.map { |a| a.start_with?('--') ? "#{a}=VALUE" : "#{a} VALUE" }.join(', ')}" unless option.aliases.empty?
114
- name = " --#{name.ljust(30)}"
115
- name = "#{name}\t# #{option.desc}"
116
- name = "#{name}, default: #{option.default.inspect}" unless option.default.nil?
117
- name
118
- end
119
-
120
- result << " --#{'help, -h'.ljust(30)}\t# Print this help"
121
- result.join("\n")
122
- end
123
- # rubocop:enable Metrics/MethodLength
124
- # rubocop:enable Metrics/AbcSize
125
- end
126
- end
127
- end
@@ -1,213 +0,0 @@
1
- require "concurrent/hash"
2
- require 'hanami/utils/callbacks'
3
-
4
- module Hanami
5
- class CLI
6
- # Command registry
7
- #
8
- # @since 0.1.0
9
- # @api private
10
- class CommandRegistry
11
- # @since 0.1.0
12
- # @api private
13
- def initialize
14
- @root = Node.new
15
- end
16
-
17
- # @since 0.1.0
18
- # @api private
19
- def set(name, command, aliases, **options)
20
- node = @root
21
- command = command_for(name, command, **options)
22
- name.split(/[[:space:]]/).each do |token|
23
- node = node.put(node, token)
24
- end
25
-
26
- node.aliases!(aliases)
27
- node.leaf!(command) unless command.nil?
28
-
29
- nil
30
- end
31
-
32
- # @since 0.1.0
33
- # @api private
34
- #
35
- # rubocop:disable Metrics/AbcSize
36
- # rubocop:disable Metrics/MethodLength
37
- def get(arguments)
38
- node = @root
39
- args = []
40
- names = []
41
- result = LookupResult.new(node, args, names, node.leaf?)
42
-
43
- arguments.each_with_index do |token, i|
44
- tmp = node.lookup(token)
45
-
46
- if tmp.nil?
47
- result = LookupResult.new(node, args, names, false)
48
- break
49
- elsif tmp.leaf?
50
- args = arguments[i + 1..-1]
51
- names = arguments[0..i]
52
- node = tmp
53
- result = LookupResult.new(node, args, names, true)
54
- break
55
- else
56
- names = arguments[0..i]
57
- node = tmp
58
- result = LookupResult.new(node, args, names, node.leaf?)
59
- end
60
- end
61
-
62
- result
63
- end
64
- # rubocop:enable Metrics/MethodLength
65
- # rubocop:enable Metrics/AbcSize
66
-
67
- private
68
-
69
- # @since 0.1.0
70
- # @api private
71
- def command_for(name, command, **options)
72
- if command.nil?
73
- command
74
- else
75
- command.new(command_name: name, **options)
76
- end
77
- end
78
-
79
- # Node of the registry
80
- #
81
- # @since 0.1.0
82
- # @api private
83
- class Node
84
- # @since 0.1.0
85
- # @api private
86
- attr_reader :parent
87
-
88
- # @since 0.1.0
89
- # @api private
90
- attr_reader :children
91
-
92
- # @since 0.1.0
93
- # @api private
94
- attr_reader :aliases
95
-
96
- # @since 0.1.0
97
- # @api private
98
- attr_reader :command
99
-
100
- # @since 0.1.0
101
- # @api private
102
- attr_reader :before_callbacks
103
-
104
- # @since 0.1.0
105
- # @api private
106
- attr_reader :after_callbacks
107
-
108
- # @since 0.1.0
109
- # @api private
110
- def initialize(parent = nil)
111
- @parent = parent
112
- @children = Concurrent::Hash.new
113
- @aliases = Concurrent::Hash.new
114
- @command = nil
115
-
116
- @before_callbacks = Utils::Callbacks::Chain.new
117
- @after_callbacks = Utils::Callbacks::Chain.new
118
- end
119
-
120
- # @since 0.1.0
121
- # @api private
122
- def put(parent, key)
123
- children[key] ||= self.class.new(parent)
124
- end
125
-
126
- # @since 0.1.0
127
- # @api private
128
- def lookup(token)
129
- children[token] || aliases[token]
130
- end
131
-
132
- # @since 0.1.0
133
- # @api private
134
- def leaf!(command)
135
- @command = command
136
- end
137
-
138
- # @since 0.1.0
139
- # @api private
140
- def alias!(key, child)
141
- @aliases[key] = child
142
- end
143
-
144
- # @since 0.1.0
145
- # @api private
146
- def aliases!(aliases)
147
- aliases.each do |a|
148
- parent.alias!(a, self)
149
- end
150
- end
151
-
152
- # @since 0.1.0
153
- # @api private
154
- def leaf?
155
- !command.nil?
156
- end
157
- end
158
-
159
- # Result of a registry lookup
160
- #
161
- # @since 0.1.0
162
- # @api private
163
- class LookupResult
164
- # @since 0.1.0
165
- # @api private
166
- attr_reader :names
167
-
168
- # @since 0.1.0
169
- # @api private
170
- attr_reader :arguments
171
-
172
- # @since 0.1.0
173
- # @api private
174
- def initialize(node, arguments, names, found)
175
- @node = node
176
- @arguments = arguments
177
- @names = names
178
- @found = found
179
- end
180
-
181
- # @since 0.1.0
182
- # @api private
183
- def found?
184
- @found
185
- end
186
-
187
- # @since 0.1.0
188
- # @api private
189
- def children
190
- @node.children
191
- end
192
-
193
- # @since 0.1.0
194
- # @api private
195
- def command
196
- @node.command
197
- end
198
-
199
- # @since 0.2.0
200
- # @api private
201
- def before_callbacks
202
- @node.before_callbacks
203
- end
204
-
205
- # @since 0.2.0
206
- # @api private
207
- def after_callbacks
208
- @node.after_callbacks
209
- end
210
- end
211
- end
212
- end
213
- end
@@ -1,44 +0,0 @@
1
- require "hanami/utils/deprecation"
2
-
3
- module Hanami
4
- # General purpose Command Line Interface (CLI) framework for Ruby
5
- #
6
- # @since 0.1.0
7
- class CLI
8
- # @since 0.2.0
9
- class Error < StandardError
10
- end
11
-
12
- # @since 0.2.1
13
- class UnknownCommandError < Error
14
- # @since 0.2.1
15
- # @api private
16
- def initialize(command_name)
17
- super("unknown command: `#{command_name}'")
18
- end
19
- end
20
-
21
- # @since 0.2.0
22
- class InvalidCallbackError < Error
23
- # @since 0.2.0
24
- # @api private
25
- def initialize(callback)
26
- message = case callback
27
- when Class
28
- "expected `#{callback.inspect}' to respond to `#initialize' with arity 0"
29
- else
30
- "expected `#{callback.inspect}' to respond to `#call'"
31
- end
32
-
33
- super(message)
34
- end
35
- end
36
-
37
- # @since 0.2.1
38
- def self.const_missing(name)
39
- super unless name == :UnkwnownCommandError
40
- Hanami::Utils::Deprecation.new('UnkwnownCommandError is deprecated, please use UnknownCommandError')
41
- UnknownCommandError
42
- end
43
- end
44
- end
@@ -1,132 +0,0 @@
1
- require "hanami/utils/string"
2
-
3
- module Hanami
4
- class CLI
5
- # Command line option
6
- #
7
- # @since 0.1.0
8
- # @api private
9
- class Option
10
- # @since 0.1.0
11
- # @api private
12
- attr_reader :name
13
-
14
- # @since 0.1.0
15
- # @api private
16
- attr_reader :options
17
-
18
- # @since 0.1.0
19
- # @api private
20
- def initialize(name, options = {})
21
- @name = name
22
- @options = options
23
- end
24
-
25
- # @since 0.1.0
26
- # @api private
27
- def aliases
28
- options[:aliases] || []
29
- end
30
-
31
- # @since 0.1.0
32
- # @api private
33
- def desc
34
- desc = options[:desc]
35
- values ? "#{desc}: (#{values.join('/')})" : desc
36
- end
37
-
38
- # @since 0.1.0
39
- # @api private
40
- def required?
41
- options[:required]
42
- end
43
-
44
- # @since 0.1.0
45
- # @api private
46
- def type
47
- options[:type]
48
- end
49
-
50
- # @since 0.1.0
51
- # @api private
52
- def values
53
- options[:values]
54
- end
55
-
56
- # @since 0.1.0
57
- # @api private
58
- def boolean?
59
- type == :boolean
60
- end
61
-
62
- # @since 0.3.0
63
- # @api private
64
- def array?
65
- type == :array
66
- end
67
-
68
- # @since 0.1.0
69
- # @api private
70
- def default
71
- options[:default]
72
- end
73
-
74
- # @since 0.1.0
75
- # @api private
76
- def description_name
77
- options[:label] || name.upcase
78
- end
79
-
80
- # @since 0.1.0
81
- # @api private
82
- def argument?
83
- false
84
- end
85
-
86
- # @since 0.1.0
87
- # @api private
88
- #
89
- # rubocop:disable Metrics/AbcSize
90
- # rubocop:disable Metrics/MethodLength
91
- def parser_options
92
- dasherized_name = Hanami::Utils::String.dasherize(name)
93
- parser_options = []
94
-
95
- if boolean?
96
- parser_options << "--[no-]#{dasherized_name}"
97
- else
98
- parser_options << "--#{dasherized_name}=#{name}"
99
- parser_options << "--#{dasherized_name} #{name}"
100
- end
101
-
102
- parser_options << Array if array?
103
- parser_options << values if values
104
- parser_options.unshift(alias_name) unless alias_name.nil?
105
- parser_options << desc if desc
106
- parser_options
107
- end
108
- # rubocop:enable Metrics/MethodLength
109
- # rubocop:enable Metrics/AbcSize
110
-
111
- private
112
-
113
- # @since 0.1.0
114
- # @api private
115
- def alias_name
116
- aliases.join(" ") if aliases.any?
117
- end
118
- end
119
-
120
- # Command line argument
121
- #
122
- # @since 0.1.0
123
- # @api private
124
- class Argument < Option
125
- # @since 0.1.0
126
- # @api private
127
- def argument?
128
- true
129
- end
130
- end
131
- end
132
- end