hanami-cli 1.0.0.alpha1 → 2.0.0.alpha6

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