hanami-cli 0.3.0 → 2.0.0.alpha3

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