gorails 0.1.2 → 0.1.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (65) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +14 -1
  3. data/Gemfile.lock +1 -1
  4. data/bin/update-deps +95 -0
  5. data/exe/gorails +3 -2
  6. data/lib/gorails/commands/railsbytes.rb +10 -10
  7. data/lib/gorails/commands.rb +1 -4
  8. data/lib/gorails/version.rb +1 -1
  9. data/lib/gorails.rb +11 -20
  10. data/vendor/deps/cli-kit/REVISION +1 -0
  11. data/vendor/deps/cli-kit/lib/cli/kit/args/definition.rb +301 -0
  12. data/vendor/deps/cli-kit/lib/cli/kit/args/evaluation.rb +237 -0
  13. data/vendor/deps/cli-kit/lib/cli/kit/args/parser/node.rb +131 -0
  14. data/vendor/deps/cli-kit/lib/cli/kit/args/parser.rb +128 -0
  15. data/vendor/deps/cli-kit/lib/cli/kit/args/tokenizer.rb +132 -0
  16. data/vendor/deps/cli-kit/lib/cli/kit/args.rb +15 -0
  17. data/vendor/deps/cli-kit/lib/cli/kit/base_command.rb +29 -0
  18. data/vendor/deps/cli-kit/lib/cli/kit/command_help.rb +256 -0
  19. data/vendor/deps/cli-kit/lib/cli/kit/command_registry.rb +141 -0
  20. data/vendor/deps/cli-kit/lib/cli/kit/config.rb +137 -0
  21. data/vendor/deps/cli-kit/lib/cli/kit/core_ext.rb +30 -0
  22. data/vendor/deps/cli-kit/lib/cli/kit/error_handler.rb +165 -0
  23. data/vendor/deps/cli-kit/lib/cli/kit/executor.rb +99 -0
  24. data/vendor/deps/cli-kit/lib/cli/kit/ini.rb +94 -0
  25. data/vendor/deps/cli-kit/lib/cli/kit/levenshtein.rb +89 -0
  26. data/vendor/deps/cli-kit/lib/cli/kit/logger.rb +95 -0
  27. data/vendor/deps/cli-kit/lib/cli/kit/opts.rb +284 -0
  28. data/vendor/deps/cli-kit/lib/cli/kit/resolver.rb +67 -0
  29. data/vendor/deps/cli-kit/lib/cli/kit/sorbet_runtime_stub.rb +142 -0
  30. data/vendor/deps/cli-kit/lib/cli/kit/support/test_helper.rb +253 -0
  31. data/vendor/deps/cli-kit/lib/cli/kit/support.rb +10 -0
  32. data/vendor/deps/cli-kit/lib/cli/kit/system.rb +350 -0
  33. data/vendor/deps/cli-kit/lib/cli/kit/util.rb +133 -0
  34. data/vendor/deps/cli-kit/lib/cli/kit/version.rb +7 -0
  35. data/vendor/deps/cli-kit/lib/cli/kit.rb +151 -0
  36. data/vendor/deps/cli-ui/REVISION +1 -0
  37. data/vendor/deps/cli-ui/lib/cli/ui/ansi.rb +180 -0
  38. data/vendor/deps/cli-ui/lib/cli/ui/color.rb +98 -0
  39. data/vendor/deps/cli-ui/lib/cli/ui/formatter.rb +216 -0
  40. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_stack.rb +116 -0
  41. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/box.rb +176 -0
  42. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style/bracket.rb +149 -0
  43. data/vendor/deps/cli-ui/lib/cli/ui/frame/frame_style.rb +112 -0
  44. data/vendor/deps/cli-ui/lib/cli/ui/frame.rb +300 -0
  45. data/vendor/deps/cli-ui/lib/cli/ui/glyph.rb +92 -0
  46. data/vendor/deps/cli-ui/lib/cli/ui/os.rb +58 -0
  47. data/vendor/deps/cli-ui/lib/cli/ui/printer.rb +72 -0
  48. data/vendor/deps/cli-ui/lib/cli/ui/progress.rb +102 -0
  49. data/vendor/deps/cli-ui/lib/cli/ui/prompt/interactive_options.rb +534 -0
  50. data/vendor/deps/cli-ui/lib/cli/ui/prompt/options_handler.rb +36 -0
  51. data/vendor/deps/cli-ui/lib/cli/ui/prompt.rb +354 -0
  52. data/vendor/deps/cli-ui/lib/cli/ui/sorbet_runtime_stub.rb +143 -0
  53. data/vendor/deps/cli-ui/lib/cli/ui/spinner/async.rb +46 -0
  54. data/vendor/deps/cli-ui/lib/cli/ui/spinner/spin_group.rb +292 -0
  55. data/vendor/deps/cli-ui/lib/cli/ui/spinner.rb +82 -0
  56. data/vendor/deps/cli-ui/lib/cli/ui/stdout_router.rb +264 -0
  57. data/vendor/deps/cli-ui/lib/cli/ui/terminal.rb +53 -0
  58. data/vendor/deps/cli-ui/lib/cli/ui/truncater.rb +107 -0
  59. data/vendor/deps/cli-ui/lib/cli/ui/version.rb +6 -0
  60. data/vendor/deps/cli-ui/lib/cli/ui/widgets/base.rb +37 -0
  61. data/vendor/deps/cli-ui/lib/cli/ui/widgets/status.rb +75 -0
  62. data/vendor/deps/cli-ui/lib/cli/ui/widgets.rb +91 -0
  63. data/vendor/deps/cli-ui/lib/cli/ui/wrap.rb +63 -0
  64. data/vendor/deps/cli-ui/lib/cli/ui.rb +356 -0
  65. metadata +57 -1
@@ -0,0 +1,284 @@
1
+ # typed: true
2
+ require 'cli/kit'
3
+
4
+ module CLI
5
+ module Kit
6
+ class Opts
7
+ extend T::Sig
8
+
9
+ module Mixin
10
+ extend T::Sig
11
+ include Kernel
12
+
13
+ module MixinClassMethods
14
+ extend T::Sig
15
+
16
+ sig { params(included_module: Module).void }
17
+ def include(included_module)
18
+ super
19
+ return unless included_module.is_a?(MixinClassMethods)
20
+
21
+ included_module.tracked_methods.each { |m| track_method(m) }
22
+ end
23
+
24
+ # No signature - Sorbet uses method_added internally, so can't verify it
25
+ def method_added(method_name) # rubocop:disable Sorbet/EnforceSignatures
26
+ super
27
+ track_method(method_name)
28
+ end
29
+
30
+ sig { params(method_name: Symbol).void }
31
+ def track_method(method_name)
32
+ @tracked_methods ||= []
33
+ @tracked_methods << method_name unless @tracked_methods.include?(method_name)
34
+ end
35
+
36
+ sig { returns(T::Array[Symbol]) }
37
+ def tracked_methods
38
+ @tracked_methods || []
39
+ end
40
+ end
41
+
42
+ sig { params(klass: Module).void }
43
+ def self.included(klass)
44
+ klass.extend(MixinClassMethods)
45
+ end
46
+
47
+ sig do
48
+ params(
49
+ name: Symbol,
50
+ short: T.nilable(String),
51
+ long: T.nilable(String),
52
+ desc: T.nilable(String),
53
+ default: T.any(NilClass, String, T.proc.returns(String)),
54
+ ).returns(T.nilable(String))
55
+ end
56
+ def option(name: infer_name, short: nil, long: nil, desc: nil, default: nil)
57
+ unless default.nil?
58
+ raise(ArgumentError, 'declare options with non-nil defaults using `option!` instead of `option`')
59
+ end
60
+
61
+ case @obj
62
+ when Args::Definition
63
+ @obj.add_option(
64
+ name, short: short, long: long, desc: desc, default: default,
65
+ )
66
+ '(result unavailable)'
67
+ when Args::Evaluation
68
+ @obj.opt.send(name)
69
+ end
70
+ end
71
+
72
+ sig do
73
+ params(
74
+ name: Symbol,
75
+ short: T.nilable(String),
76
+ long: T.nilable(String),
77
+ desc: T.nilable(String),
78
+ default: T.any(NilClass, String, T.proc.returns(String)),
79
+ ).returns(String)
80
+ end
81
+ def option!(name: infer_name, short: nil, long: nil, desc: nil, default: nil)
82
+ case @obj
83
+ when Args::Definition
84
+ @obj.add_option(
85
+ name, short: short, long: long, desc: desc, default: default,
86
+ )
87
+ '(result unavailable)'
88
+ when Args::Evaluation
89
+ @obj.opt.send(name)
90
+ end
91
+ end
92
+
93
+ sig do
94
+ params(
95
+ name: Symbol,
96
+ short: T.nilable(String),
97
+ long: T.nilable(String),
98
+ desc: T.nilable(String),
99
+ ).returns(T::Array[String])
100
+ end
101
+ def multi_option(name: infer_name, short: nil, long: nil, desc: nil)
102
+ case @obj
103
+ when Args::Definition
104
+ @obj.add_option(
105
+ name, short: short, long: long, desc: desc, multi: true,
106
+ )
107
+ ['(result unavailable)']
108
+ when Args::Evaluation
109
+ @obj.opt.send(name)
110
+ end
111
+ end
112
+
113
+ sig do
114
+ params(
115
+ name: Symbol,
116
+ short: T.nilable(String),
117
+ long: T.nilable(String),
118
+ desc: T.nilable(String),
119
+ ).returns(T::Boolean)
120
+ end
121
+ def flag(name: infer_name, short: nil, long: nil, desc: nil)
122
+ case @obj
123
+ when Args::Definition
124
+ @obj.add_flag(name, short: short, long: long, desc: desc)
125
+ false
126
+ when Args::Evaluation
127
+ @obj.flag.send(name)
128
+ end
129
+ end
130
+
131
+ sig { params(name: Symbol, desc: T.nilable(String)).returns(String) }
132
+ def position!(name: infer_name, desc: nil)
133
+ case @obj
134
+ when Args::Definition
135
+ @obj.add_position(name, desc: desc, required: true, multiple: false)
136
+ '(result unavailable)'
137
+ when Args::Evaluation
138
+ @obj.position.send(name)
139
+ end
140
+ end
141
+
142
+ sig { params(name: Symbol, desc: T.nilable(String)).returns(T.nilable(String)) }
143
+ def position(name: infer_name, desc: nil)
144
+ case @obj
145
+ when Args::Definition
146
+ @obj.add_position(name, desc: desc, required: false, multiple: false)
147
+ '(result unavailable)'
148
+ when Args::Evaluation
149
+ @obj.position.send(name)
150
+ end
151
+ end
152
+
153
+ sig { params(name: Symbol, desc: T.nilable(String)).returns(T::Array[String]) }
154
+ def rest(name: infer_name, desc: nil)
155
+ case @obj
156
+ when Args::Definition
157
+ @obj.add_position(name, desc: desc, required: false, multiple: true)
158
+ ['(result unavailable)']
159
+ when Args::Evaluation
160
+ @obj.position.send(name)
161
+ end
162
+ end
163
+
164
+ private
165
+
166
+ sig { returns(Symbol) }
167
+ def infer_name
168
+ to_skip = 1
169
+ Kernel.caller_locations&.each do |loc|
170
+ next if loc.path =~ /sorbet-runtime/
171
+
172
+ if to_skip > 0
173
+ to_skip -= 1
174
+ next
175
+ end
176
+ return(T.must(loc.label&.to_sym))
177
+ end
178
+ raise(ArgumentError, 'could not infer name')
179
+ end
180
+ end
181
+ include(Mixin)
182
+
183
+ DEFAULT_OPTIONS = [:helpflag]
184
+
185
+ sig { returns(T::Boolean) }
186
+ def helpflag
187
+ flag(name: :help, short: '-h', long: '--help', desc: 'Show this help message')
188
+ end
189
+
190
+ sig { params(obj: T.any(Args::Definition, Args::Evaluation)).void }
191
+ def initialize(obj)
192
+ @obj = obj
193
+ end
194
+
195
+ sig { returns(T::Array[String]) }
196
+ def unparsed
197
+ obj = assert_result!
198
+ obj.unparsed
199
+ end
200
+
201
+ sig do
202
+ params(
203
+ block: T.nilable(
204
+ T.proc.params(arg0: Symbol, arg1: T.nilable(String)).void,
205
+ ),
206
+ ).returns(T.untyped)
207
+ end
208
+ def each_option(&block)
209
+ return(enum_for(:each_option)) unless block_given?
210
+
211
+ obj = assert_result!
212
+ obj.defn.options.each do |opt|
213
+ name = opt.name
214
+ value = obj.opt.send(name)
215
+ yield(name, value)
216
+ end
217
+ end
218
+
219
+ sig do
220
+ params(
221
+ block: T.nilable(
222
+ T.proc.params(arg0: Symbol, arg1: T::Boolean).void,
223
+ ),
224
+ ).returns(T.untyped)
225
+ end
226
+ def each_flag(&block)
227
+ return(enum_for(:each_flag)) unless block_given?
228
+
229
+ obj = assert_result!
230
+ obj.defn.flags.each do |flag|
231
+ name = flag.name
232
+ value = obj.flag.send(name)
233
+ yield(name, value)
234
+ end
235
+ end
236
+
237
+ sig { params(name: String).returns(T.nilable(T.any(String, T::Boolean))) }
238
+ def [](name)
239
+ obj = assert_result!
240
+ if obj.opt.respond_to?(name)
241
+ obj.opt.send(name)
242
+ elsif obj.flag.respond_to?(name)
243
+ obj.flag.send(name)
244
+ end
245
+ end
246
+
247
+ sig { params(name: String).returns(T.nilable(String)) }
248
+ def lookup_option(name)
249
+ obj = assert_result!
250
+ obj.opt.send(name)
251
+ rescue NoMethodError
252
+ # TODO: should we raise a KeyError?
253
+ nil
254
+ end
255
+
256
+ sig { params(name: String).returns(T::Boolean) }
257
+ def lookup_flag(name)
258
+ obj = assert_result!
259
+ obj.flag.send(name)
260
+ rescue NoMethodError
261
+ false
262
+ end
263
+
264
+ sig { returns(Args::Evaluation) }
265
+ def assert_result!
266
+ raise(NotImplementedError, 'not implemented') if @obj.is_a?(Args::Definition)
267
+
268
+ @obj
269
+ end
270
+
271
+ sig { void }
272
+ def install_to_definition
273
+ raise('not a Definition') unless @obj.is_a?(Args::Definition)
274
+
275
+ T.cast(self.class, Mixin::MixinClassMethods).tracked_methods.each do |m|
276
+ send(m)
277
+ end
278
+ DEFAULT_OPTIONS.each do |m|
279
+ send(m)
280
+ end
281
+ end
282
+ end
283
+ end
284
+ end
@@ -0,0 +1,67 @@
1
+ # typed: true
2
+ require 'cli/kit'
3
+
4
+ module CLI
5
+ module Kit
6
+ class Resolver
7
+ extend T::Sig
8
+
9
+ sig { params(tool_name: String, command_registry: CLI::Kit::CommandRegistry).void }
10
+ def initialize(tool_name:, command_registry:)
11
+ @tool_name = tool_name
12
+ @command_registry = command_registry
13
+ end
14
+
15
+ sig { params(args: T::Array[String]).returns([T.class_of(CLI::Kit::BaseCommand), String, T::Array[String]]) }
16
+ def call(args)
17
+ args = args.dup
18
+ command_name = args.shift
19
+
20
+ command, resolved_name = @command_registry.lookup_command(command_name)
21
+
22
+ if command.nil?
23
+ command_not_found(command_name)
24
+ raise CLI::Kit::AbortSilent # Already output message
25
+ end
26
+
27
+ [command, resolved_name, args]
28
+ end
29
+
30
+ private
31
+
32
+ sig { params(name: T.nilable(String)).void }
33
+ def command_not_found(name)
34
+ CLI::UI::Frame.open('Command not found', color: :red, timing: false) do
35
+ $stderr.puts(CLI::UI.fmt("{{command:#{@tool_name} #{name}}} was not found"))
36
+ end
37
+
38
+ cmds = commands_and_aliases
39
+ if cmds.all? { |cmd| cmd.is_a?(String) }
40
+ possible_matches = cmds.min_by(2) do |cmd|
41
+ CLI::Kit::Levenshtein.distance(cmd, name)
42
+ end
43
+
44
+ # We don't want to match against any possible command
45
+ # so reject anything that is too far away
46
+ possible_matches.reject! do |possible_match|
47
+ CLI::Kit::Levenshtein.distance(possible_match, name) > 3
48
+ end
49
+
50
+ # If we have any matches left, tell the user
51
+ if possible_matches.any?
52
+ CLI::UI::Frame.open('{{bold:Did you mean?}}', timing: false, color: :blue) do
53
+ possible_matches.each do |possible_match|
54
+ $stderr.puts CLI::UI.fmt("{{command:#{@tool_name} #{possible_match}}}")
55
+ end
56
+ end
57
+ end
58
+ end
59
+ end
60
+
61
+ sig { returns(T::Array[String]) }
62
+ def commands_and_aliases
63
+ @command_registry.command_names + @command_registry.aliases.keys
64
+ end
65
+ end
66
+ end
67
+ end
@@ -0,0 +1,142 @@
1
+ # typed: ignore
2
+ # frozen_string_literal: true
3
+
4
+ module T
5
+ class << self
6
+ def absurd(value); end
7
+ def all(type_a, type_b, *types); end
8
+ def any(type_a, type_b, *types); end
9
+ def attached_class; end
10
+ def class_of(klass); end
11
+ def enum(values); end
12
+ def nilable(type); end
13
+ def noreturn; end
14
+ def self_type; end
15
+ def type_alias(type = nil, &_blk); end
16
+ def type_parameter(name); end
17
+ def untyped; end
18
+
19
+ def assert_type!(value, _type, _checked: true)
20
+ value
21
+ end
22
+
23
+ def cast(value, _type, _checked: true)
24
+ value
25
+ end
26
+
27
+ def let(value, _type, _checked: true)
28
+ value
29
+ end
30
+
31
+ def must(arg, _msg = nil)
32
+ arg
33
+ end
34
+
35
+ def proc
36
+ T::Proc.new
37
+ end
38
+
39
+ def reveal_type(value)
40
+ value
41
+ end
42
+
43
+ def unsafe(value)
44
+ value
45
+ end
46
+ end
47
+
48
+ module Sig
49
+ def sig(arg0 = nil, &blk); end
50
+ end
51
+
52
+ module Helpers
53
+ def abstract!; end
54
+ def interface!; end
55
+ def final!; end
56
+ def sealed!; end
57
+ def mixes_in_class_methods(mod); end
58
+ end
59
+
60
+ module Generic
61
+ include(T::Helpers)
62
+
63
+ def type_parameters(*params); end
64
+ def type_member(variance = :invariant, fixed: nil, lower: nil, upper: BasicObject); end
65
+ def type_template(variance = :invariant, fixed: nil, lower: nil, upper: BasicObject); end
66
+
67
+ def [](*types)
68
+ self
69
+ end
70
+ end
71
+
72
+ module Array
73
+ def self.[](type); end
74
+ end
75
+
76
+ Boolean = Object.new.freeze
77
+
78
+ module Configuration
79
+ def self.call_validation_error_handler(signature, opts); end
80
+ def self.call_validation_error_handler=(value); end
81
+ def self.default_checked_level=(default_checked_level); end
82
+ def self.enable_checking_for_sigs_marked_checked_tests; end
83
+ def self.enable_final_checks_on_hooks; end
84
+ def self.enable_legacy_t_enum_migration_mode; end
85
+ def self.reset_final_checks_on_hooks; end
86
+ def self.hard_assert_handler(str, extra); end
87
+ def self.hard_assert_handler=(value); end
88
+ def self.inline_type_error_handler(error); end
89
+ def self.inline_type_error_handler=(value); end
90
+ def self.log_info_handler(str, extra); end
91
+ def self.log_info_handler=(value); end
92
+ def self.scalar_types; end
93
+ def self.scalar_types=(values); end
94
+ # rubocop:disable Naming/InclusiveLanguage
95
+ def self.sealed_violation_whitelist; end
96
+ def self.sealed_violation_whitelist=(sealed_violation_whitelist); end
97
+ # rubocop:enable Naming/InclusiveLanguage
98
+ def self.sig_builder_error_handler=(value); end
99
+ def self.sig_validation_error_handler(error, opts); end
100
+ def self.sig_validation_error_handler=(value); end
101
+ def self.soft_assert_handler(str, extra); end
102
+ def self.soft_assert_handler=(value); end
103
+ end
104
+
105
+ module Enumerable
106
+ def self.[](type); end
107
+ end
108
+
109
+ module Enumerator
110
+ def self.[](type); end
111
+ end
112
+
113
+ module Hash
114
+ def self.[](keys, values); end
115
+ end
116
+
117
+ class Proc
118
+ def bind(*_)
119
+ self
120
+ end
121
+
122
+ def params(*_param)
123
+ self
124
+ end
125
+
126
+ def void
127
+ self
128
+ end
129
+
130
+ def returns(_type)
131
+ self
132
+ end
133
+ end
134
+
135
+ module Range
136
+ def self.[](type); end
137
+ end
138
+
139
+ module Set
140
+ def self.[](type); end
141
+ end
142
+ end