clean-architecture 3.0.0 → 3.0.1

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 (74) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +52 -0
  3. data/.ruby-version +1 -1
  4. data/CHANGELOG.md +4 -0
  5. data/Gemfile +0 -2
  6. data/clean-architecture.gemspec +3 -3
  7. data/lib/clean_architecture/queries/http_failure_code.rb +2 -1
  8. data/lib/clean_architecture/version.rb +1 -1
  9. data/sorbet/rbi/gems/activemodel.rbi +2 -1
  10. data/sorbet/rbi/gems/activesupport.rbi +3 -3
  11. data/sorbet/rbi/gems/ast.rbi +1 -0
  12. data/sorbet/rbi/gems/byebug.rbi +3 -2
  13. data/sorbet/rbi/gems/coderay.rbi +1 -0
  14. data/sorbet/rbi/gems/concurrent-ruby.rbi +22 -23
  15. data/sorbet/rbi/gems/docile.rbi +1 -0
  16. data/sorbet/rbi/gems/dry-configurable.rbi +107 -57
  17. data/sorbet/rbi/gems/dry-container.rbi +1 -0
  18. data/sorbet/rbi/gems/dry-core.rbi +1 -0
  19. data/sorbet/rbi/gems/dry-equalizer.rbi +5 -4
  20. data/sorbet/rbi/gems/dry-inflector.rbi +1 -0
  21. data/sorbet/rbi/gems/dry-initializer.rbi +4 -4
  22. data/sorbet/rbi/gems/dry-logic.rbi +12 -11
  23. data/sorbet/rbi/gems/dry-matcher.rbi +2 -1
  24. data/sorbet/rbi/gems/dry-monads.rbi +8 -6
  25. data/sorbet/rbi/gems/dry-schema.rbi +92 -96
  26. data/sorbet/rbi/gems/dry-struct.rbi +32 -60
  27. data/sorbet/rbi/gems/dry-types.rbi +76 -55
  28. data/sorbet/rbi/gems/dry-validation.rbi +34 -30
  29. data/sorbet/rbi/gems/duckface-interfaces.rbi +1 -0
  30. data/sorbet/rbi/gems/i18n.rbi +2 -1
  31. data/sorbet/rbi/gems/jaro_winkler.rbi +2 -1
  32. data/sorbet/rbi/gems/method_source.rbi +1 -0
  33. data/sorbet/rbi/gems/parallel.rbi +2 -1
  34. data/sorbet/rbi/gems/parser.rbi +80 -452
  35. data/sorbet/rbi/gems/pry-byebug.rbi +10 -4
  36. data/sorbet/rbi/gems/pry.rbi +1 -0
  37. data/sorbet/rbi/gems/rainbow.rbi +1 -0
  38. data/sorbet/rbi/gems/rake.rbi +77 -67
  39. data/sorbet/rbi/gems/rb-readline.rbi +1 -0
  40. data/sorbet/rbi/gems/rexml.rbi +589 -0
  41. data/sorbet/rbi/gems/rspec-core.rbi +14 -1
  42. data/sorbet/rbi/gems/rspec-expectations.rbi +2 -34
  43. data/sorbet/rbi/gems/rspec-mocks.rbi +133 -1
  44. data/sorbet/rbi/gems/rspec-support.rbi +4 -1
  45. data/sorbet/rbi/gems/rspec.rbi +1 -0
  46. data/sorbet/rbi/gems/rubocop-rspec.rbi +51 -4
  47. data/sorbet/rbi/gems/rubocop.rbi +746 -442
  48. data/sorbet/rbi/gems/ruby-progressbar.rbi +1 -0
  49. data/sorbet/rbi/gems/simplecov-html.rbi +6 -1
  50. data/sorbet/rbi/gems/simplecov.rbi +144 -17
  51. data/sorbet/rbi/gems/stackprof.rbi +2 -1
  52. data/sorbet/rbi/gems/unicode-display_width.rbi +2 -1
  53. data/sorbet/rbi/hidden-definitions/errors.txt +2040 -890
  54. data/sorbet/rbi/hidden-definitions/hidden.rbi +1431 -2092
  55. data/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +325 -295
  56. data/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +357 -3
  57. data/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +9 -0
  58. data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +37 -15
  59. data/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +8 -8
  60. data/sorbet/rbi/todo.rbi +1 -4
  61. metadata +11 -23
  62. data/.github/workflows/rspec.yml +0 -21
  63. data/sorbet/rbi/gems/axiom-types.rbi +0 -159
  64. data/sorbet/rbi/gems/codeclimate-engine-rb.rbi +0 -123
  65. data/sorbet/rbi/gems/coercible.rbi +0 -156
  66. data/sorbet/rbi/gems/descendants_tracker.rbi +0 -17
  67. data/sorbet/rbi/gems/equalizer.rbi +0 -22
  68. data/sorbet/rbi/gems/ice_nine.rbi +0 -66
  69. data/sorbet/rbi/gems/kwalify.rbi +0 -339
  70. data/sorbet/rbi/gems/psych.rbi +0 -462
  71. data/sorbet/rbi/gems/reek.rbi +0 -1066
  72. data/sorbet/rbi/gems/thread_safe.rbi +0 -81
  73. data/sorbet/rbi/gems/timecop.rbi +0 -97
  74. data/sorbet/rbi/gems/virtus.rbi +0 -421
@@ -29,7 +29,7 @@ module ActiveModel::Validations
29
29
  params(
30
30
  names: T.any(Symbol, String),
31
31
  if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
32
- on: T.any(Symbol, String),
32
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
33
33
  prepend: T::Boolean,
34
34
  unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
35
35
  ).void
@@ -74,6 +74,7 @@ module ActiveModel::Validations
74
74
  strict: T::Boolean,
75
75
  uniqueness: T.any(T::Boolean, T::Hash[T.untyped, T.untyped]),
76
76
  unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
77
+ kwargs: T.untyped
77
78
  ).void
78
79
  end
79
80
  def validates(
@@ -94,91 +95,41 @@ module ActiveModel::Validations
94
95
  size: false,
95
96
  strict: false,
96
97
  uniqueness: false,
97
- unless: :_
98
+ unless: :_,
99
+ **kwargs
98
100
  )
99
101
  end
100
102
  end
103
+
104
+ mixes_in_class_methods(ClassMethods)
101
105
  end
102
106
 
103
- class ActiveModel::Type::Boolean
107
+ class ActiveModel::Type::Value
108
+ extend T::Sig
109
+
110
+ sig { params(precision: T.untyped, limit: T.untyped, scale: T.untyped).void }
111
+ def initialize(precision: nil, limit: nil, scale: nil); end
112
+
113
+ sig { params(value: T.untyped).returns(T.untyped) }
114
+ def cast(value); end
115
+ end
116
+
117
+ class ActiveModel::Type::Boolean < ActiveModel::Type::Value
104
118
  sig { params(arg0: T.untyped).returns(T.nilable(T::Boolean))}
105
119
  def cast(arg0); end
106
120
  end
107
121
 
108
- module ActiveModel::Validations::HelperMethods
109
- sig do
110
- params(
111
- attr_names: T.any(String, Symbol),
112
- message: String,
113
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
114
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
115
- on: T.any(Symbol, String),
116
- allow_nil: T::Boolean,
117
- allow_blank: T::Boolean,
118
- strict: T::Boolean
119
- ).void
120
- end
121
- def validates_absence_of(
122
- *attr_names,
123
- message: 'must be blank',
124
- if: nil,
125
- unless: :_,
126
- on: :_,
127
- allow_nil: false,
128
- allow_blank: false,
129
- strict: false
130
- ); end
131
-
132
- sig do
133
- params(
134
- attr_names: T.any(String, Symbol),
135
- message: String,
136
- accept: T.untyped,
137
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
138
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
139
- on: T.any(Symbol, String),
140
- allow_nil: T::Boolean,
141
- allow_blank: T::Boolean,
142
- strict: T::Boolean
143
- ).void
144
- end
145
- def validates_acceptance_of(
146
- *attr_names,
147
- message: 'must be accepted',
148
- accept: ['1', true],
149
- if: nil,
150
- unless: :_,
151
- on: :_,
152
- allow_nil: false,
153
- allow_blank: false,
154
- strict: false
155
- ); end
122
+ class ActiveModel::Type::ImmutableString < ActiveModel::Type::Value
123
+ sig { params(arg0: T.untyped).returns(T.nilable(String))}
124
+ def cast(arg0); end
125
+ end
156
126
 
157
- sig do
158
- params(
159
- attr_names: T.any(String, Symbol),
160
- message: String,
161
- case_sensitive: T::Boolean,
162
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
163
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
164
- on: T.any(Symbol, String),
165
- allow_nil: T::Boolean,
166
- allow_blank: T::Boolean,
167
- strict: T::Boolean
168
- ).void
169
- end
170
- def validates_confirmation_of(
171
- *attr_names,
172
- message: "doesn't match %{translated_attribute_name}",
173
- case_sensitive: true,
174
- if: nil,
175
- unless: :_,
176
- on: :_,
177
- allow_nil: false,
178
- allow_blank: false,
179
- strict: false
180
- ); end
127
+ class ActiveModel::Type::String < ActiveModel::Type::ImmutableString
128
+ sig { params(arg0: T.untyped).returns(T.nilable(String))}
129
+ def cast(arg0); end
130
+ end
181
131
 
132
+ module ActiveModel::Validations::HelperMethods
182
133
  # A type alias for the in/within parameters on the
183
134
  # validates_(inclusion/exclusion)_of methods.
184
135
  InWithinType = T.type_alias do
@@ -188,235 +139,314 @@ module ActiveModel::Validations::HelperMethods
188
139
  String,
189
140
  T::Array[T.any(String, Symbol)],
190
141
  T::Range[Integer],
142
+ T::Array[T::Boolean],
191
143
  T.proc.params(arg0: T.untyped).returns(T::Boolean)
192
144
  )
193
145
  )
194
146
  end
195
- sig do
196
- params(
197
- attr_names: T.any(String, Symbol),
198
- message: String,
199
- in: InWithinType,
200
- within: InWithinType,
201
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
202
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
203
- on: T.any(Symbol, String),
204
- allow_nil: T::Boolean,
205
- allow_blank: T::Boolean,
206
- strict: T::Boolean
207
- ).void
208
- end
209
- def validates_exclusion_of(
210
- *attr_names,
211
- message: 'is reserved',
212
- in: nil,
213
- within: nil,
214
- if: nil,
215
- unless: :_,
216
- on: :_,
217
- allow_nil: false,
218
- allow_blank: false,
219
- strict: false
220
- ); end
221
147
 
222
- sig do
223
- params(
224
- attr_names: T.any(String, Symbol),
225
- message: String,
226
- with: T.untyped,
227
- without: T.untyped,
228
- multiline: T.untyped,
229
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
230
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
231
- on: T.any(Symbol, String),
232
- allow_nil: T::Boolean,
233
- allow_blank: T::Boolean,
234
- strict: T::Boolean
235
- ).void
236
- end
237
- def validates_format_of(
238
- *attr_names,
239
- message: 'is invalid',
240
- with: nil,
241
- without: nil,
242
- multiline: nil,
243
- if: nil,
244
- unless: :_,
245
- on: :_,
246
- allow_nil: false,
247
- allow_blank: false,
248
- strict: false
249
- ); end
148
+ module ClassMethods
149
+ sig do
150
+ params(
151
+ attr_names: T.any(String, Symbol),
152
+ message: String,
153
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
154
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
155
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
156
+ allow_nil: T::Boolean,
157
+ allow_blank: T::Boolean,
158
+ strict: T::Boolean
159
+ ).void
160
+ end
161
+ def validates_absence_of(
162
+ *attr_names,
163
+ message: 'must be blank',
164
+ if: nil,
165
+ unless: :_,
166
+ on: :_,
167
+ allow_nil: false,
168
+ allow_blank: false,
169
+ strict: false
170
+ ); end
250
171
 
251
- sig do
252
- params(
253
- attr_names: T.any(String, Symbol),
254
- message: String,
255
- in: InWithinType,
256
- within: InWithinType,
257
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
258
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
259
- on: T.any(Symbol, String),
260
- allow_nil: T::Boolean,
261
- allow_blank: T::Boolean,
262
- strict: T::Boolean
263
- ).void
264
- end
265
- def validates_inclusion_of(
266
- *attr_names,
267
- message: 'is not included in the list',
268
- in: nil,
269
- within: nil,
270
- if: nil,
271
- unless: :_,
272
- on: :_,
273
- allow_nil: false,
274
- allow_blank: false,
275
- strict: false
276
- ); end
172
+ sig do
173
+ params(
174
+ attr_names: T.any(String, Symbol),
175
+ message: String,
176
+ accept: T.untyped,
177
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
178
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
179
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
180
+ allow_nil: T::Boolean,
181
+ allow_blank: T::Boolean,
182
+ strict: T::Boolean
183
+ ).void
184
+ end
185
+ def validates_acceptance_of(
186
+ *attr_names,
187
+ message: 'must be accepted',
188
+ accept: ['1', true],
189
+ if: nil,
190
+ unless: :_,
191
+ on: :_,
192
+ allow_nil: false,
193
+ allow_blank: false,
194
+ strict: false
195
+ ); end
277
196
 
278
- sig do
279
- params(
280
- attr_names: T.any(String, Symbol),
281
- message: T.nilable(String),
282
- minimum: T.nilable(Integer),
283
- maximum: T.nilable(Integer),
284
- is: T.nilable(Integer),
285
- within: T.nilable(T::Range[Integer]),
286
- in: T.nilable(T::Range[Integer]),
287
- too_long: String,
288
- too_short: String,
289
- wrong_length: String,
290
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
291
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
292
- on: T.any(Symbol, String),
293
- allow_nil: T::Boolean,
294
- allow_blank: T::Boolean,
295
- strict: T::Boolean
296
- ).void
297
- end
298
- def validates_length_of(
299
- *attr_names,
300
- message: nil,
301
- minimum: nil,
302
- maximum: nil,
303
- is: nil,
304
- within: nil,
305
- in: nil,
306
- too_long: 'is too long (maximum is %{count} characters)',
307
- too_short: 'is too short (minimum is %{count} characters)',
308
- wrong_length: 'is the wrong length (should be %{count} characters)',
309
- if: nil,
310
- unless: :_,
311
- on: :_,
312
- allow_nil: false,
313
- allow_blank: false,
314
- strict: false
315
- ); end
197
+ sig do
198
+ params(
199
+ attr_names: T.any(String, Symbol),
200
+ message: String,
201
+ case_sensitive: T::Boolean,
202
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
203
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
204
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
205
+ allow_nil: T::Boolean,
206
+ allow_blank: T::Boolean,
207
+ strict: T::Boolean
208
+ ).void
209
+ end
210
+ def validates_confirmation_of(
211
+ *attr_names,
212
+ message: "doesn't match %{translated_attribute_name}",
213
+ case_sensitive: true,
214
+ if: nil,
215
+ unless: :_,
216
+ on: :_,
217
+ allow_nil: false,
218
+ allow_blank: false,
219
+ strict: false
220
+ ); end
316
221
 
317
- # validates_size_of is an alias of validates_length_of
318
- sig do
319
- params(
320
- attr_names: T.any(String, Symbol),
321
- message: T.nilable(String),
322
- minimum: T.nilable(Integer),
323
- maximum: T.nilable(Integer),
324
- is: T.nilable(Integer),
325
- within: T.nilable(T::Range[Integer]),
326
- in: T.nilable(T::Range[Integer]),
327
- too_long: String,
328
- too_short: String,
329
- wrong_length: String,
330
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
331
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
332
- on: T.any(Symbol, String),
333
- allow_nil: T::Boolean,
334
- allow_blank: T::Boolean,
335
- strict: T::Boolean
336
- ).void
337
- end
338
- def validates_size_of(
339
- *attr_names,
340
- message: nil,
341
- minimum: nil,
342
- maximum: nil,
343
- is: nil,
344
- within: nil,
345
- in: nil,
346
- too_long: 'is too long (maximum is %{count} characters)',
347
- too_short: 'is too short (minimum is %{count} characters)',
348
- wrong_length: 'is the wrong length (should be %{count} characters)',
349
- if: nil,
350
- unless: :_,
351
- on: :_,
352
- allow_nil: false,
353
- allow_blank: false,
354
- strict: false
355
- ); end
222
+ sig do
223
+ params(
224
+ attr_names: T.any(String, Symbol),
225
+ message: String,
226
+ in: InWithinType,
227
+ within: InWithinType,
228
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
229
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
230
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
231
+ allow_nil: T::Boolean,
232
+ allow_blank: T::Boolean,
233
+ strict: T::Boolean
234
+ ).void
235
+ end
236
+ def validates_exclusion_of(
237
+ *attr_names,
238
+ message: 'is reserved',
239
+ in: nil,
240
+ within: nil,
241
+ if: nil,
242
+ unless: :_,
243
+ on: :_,
244
+ allow_nil: false,
245
+ allow_blank: false,
246
+ strict: false
247
+ ); end
356
248
 
357
- # Create a type alias so we don't have to repeat this long type signature 6 times.
358
- NumberComparatorType = T.type_alias {T.nilable(T.any(Integer, Float, T.proc.params(arg0: T.untyped).returns(T::Boolean), Symbol))}
359
- sig do
360
- params(
361
- attr_names: T.any(String, Symbol),
362
- message: String,
363
- only_integer: T::Boolean,
364
- greater_than: NumberComparatorType,
365
- greater_than_or_equal_to: NumberComparatorType,
366
- equal_to: NumberComparatorType,
367
- less_than: NumberComparatorType,
368
- less_than_or_equal_to: NumberComparatorType,
369
- other_than: NumberComparatorType,
370
- odd: T::Boolean,
371
- even: T::Boolean,
372
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
373
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
374
- on: T.any(Symbol, String),
375
- allow_nil: T::Boolean,
376
- allow_blank: T::Boolean,
377
- strict: T::Boolean
378
- ).void
379
- end
380
- def validates_numericality_of(
381
- *attr_names,
382
- message: 'is not a number',
383
- only_integer: false,
384
- greater_than: nil,
385
- greater_than_or_equal_to: nil,
386
- equal_to: nil,
387
- less_than: nil,
388
- less_than_or_equal_to: nil,
389
- other_than: nil,
390
- odd: false,
391
- even: false,
392
- if: nil,
393
- unless: :_,
394
- on: :_,
395
- allow_nil: false,
396
- allow_blank: false,
397
- strict: false
398
- ); end
249
+ sig do
250
+ params(
251
+ attr_names: T.any(String, Symbol),
252
+ message: String,
253
+ with: T.untyped,
254
+ without: T.untyped,
255
+ multiline: T.untyped,
256
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
257
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
258
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
259
+ allow_nil: T::Boolean,
260
+ allow_blank: T::Boolean,
261
+ strict: T::Boolean
262
+ ).void
263
+ end
264
+ def validates_format_of(
265
+ *attr_names,
266
+ message: 'is invalid',
267
+ with: nil,
268
+ without: nil,
269
+ multiline: nil,
270
+ if: nil,
271
+ unless: :_,
272
+ on: :_,
273
+ allow_nil: false,
274
+ allow_blank: false,
275
+ strict: false
276
+ ); end
277
+
278
+ sig do
279
+ params(
280
+ attr_names: T.any(String, Symbol),
281
+ message: String,
282
+ in: InWithinType,
283
+ within: InWithinType,
284
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
285
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
286
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
287
+ allow_nil: T::Boolean,
288
+ allow_blank: T::Boolean,
289
+ strict: T::Boolean
290
+ ).void
291
+ end
292
+ def validates_inclusion_of(
293
+ *attr_names,
294
+ message: 'is not included in the list',
295
+ in: nil,
296
+ within: nil,
297
+ if: nil,
298
+ unless: :_,
299
+ on: :_,
300
+ allow_nil: false,
301
+ allow_blank: false,
302
+ strict: false
303
+ ); end
304
+
305
+ sig do
306
+ params(
307
+ attr_names: T.any(String, Symbol),
308
+ message: T.nilable(String),
309
+ minimum: T.nilable(Integer),
310
+ maximum: T.nilable(Integer),
311
+ is: T.nilable(Integer),
312
+ within: T.nilable(T::Range[Integer]),
313
+ in: T.nilable(T::Range[Integer]),
314
+ too_long: String,
315
+ too_short: String,
316
+ wrong_length: String,
317
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
318
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
319
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
320
+ allow_nil: T::Boolean,
321
+ allow_blank: T::Boolean,
322
+ strict: T::Boolean
323
+ ).void
324
+ end
325
+ def validates_length_of(
326
+ *attr_names,
327
+ message: nil,
328
+ minimum: nil,
329
+ maximum: nil,
330
+ is: nil,
331
+ within: nil,
332
+ in: nil,
333
+ too_long: 'is too long (maximum is %{count} characters)',
334
+ too_short: 'is too short (minimum is %{count} characters)',
335
+ wrong_length: 'is the wrong length (should be %{count} characters)',
336
+ if: nil,
337
+ unless: :_,
338
+ on: :_,
339
+ allow_nil: false,
340
+ allow_blank: false,
341
+ strict: false
342
+ ); end
343
+
344
+ # validates_size_of is an alias of validates_length_of
345
+ sig do
346
+ params(
347
+ attr_names: T.any(String, Symbol),
348
+ message: T.nilable(String),
349
+ minimum: T.nilable(Integer),
350
+ maximum: T.nilable(Integer),
351
+ is: T.nilable(Integer),
352
+ within: T.nilable(T::Range[Integer]),
353
+ in: T.nilable(T::Range[Integer]),
354
+ too_long: String,
355
+ too_short: String,
356
+ wrong_length: String,
357
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
358
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
359
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
360
+ allow_nil: T::Boolean,
361
+ allow_blank: T::Boolean,
362
+ strict: T::Boolean
363
+ ).void
364
+ end
365
+ def validates_size_of(
366
+ *attr_names,
367
+ message: nil,
368
+ minimum: nil,
369
+ maximum: nil,
370
+ is: nil,
371
+ within: nil,
372
+ in: nil,
373
+ too_long: 'is too long (maximum is %{count} characters)',
374
+ too_short: 'is too short (minimum is %{count} characters)',
375
+ wrong_length: 'is the wrong length (should be %{count} characters)',
376
+ if: nil,
377
+ unless: :_,
378
+ on: :_,
379
+ allow_nil: false,
380
+ allow_blank: false,
381
+ strict: false
382
+ ); end
383
+
384
+ # Create a type alias so we don't have to repeat this long type signature 6 times.
385
+ NumberComparatorType = T.type_alias {T.nilable(T.any(Integer, Float, T.proc.params(arg0: T.untyped).returns(T::Boolean), Symbol))}
386
+ sig do
387
+ params(
388
+ attr_names: T.any(String, Symbol),
389
+ message: String,
390
+ only_integer: T::Boolean,
391
+ greater_than: NumberComparatorType,
392
+ greater_than_or_equal_to: NumberComparatorType,
393
+ equal_to: NumberComparatorType,
394
+ less_than: NumberComparatorType,
395
+ less_than_or_equal_to: NumberComparatorType,
396
+ other_than: NumberComparatorType,
397
+ odd: T::Boolean,
398
+ even: T::Boolean,
399
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
400
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
401
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
402
+ allow_nil: T::Boolean,
403
+ allow_blank: T::Boolean,
404
+ strict: T::Boolean
405
+ ).void
406
+ end
407
+ def validates_numericality_of(
408
+ *attr_names,
409
+ message: 'is not a number',
410
+ only_integer: false,
411
+ greater_than: nil,
412
+ greater_than_or_equal_to: nil,
413
+ equal_to: nil,
414
+ less_than: nil,
415
+ less_than_or_equal_to: nil,
416
+ other_than: nil,
417
+ odd: false,
418
+ even: false,
419
+ if: nil,
420
+ unless: :_,
421
+ on: :_,
422
+ allow_nil: false,
423
+ allow_blank: false,
424
+ strict: false
425
+ ); end
399
426
 
400
- sig do
401
- params(
402
- attr_names: T.any(String, Symbol),
403
- message: String,
404
- if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
405
- unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
406
- on: T.any(Symbol, String),
407
- allow_nil: T::Boolean,
408
- allow_blank: T::Boolean,
409
- strict: T::Boolean
410
- ).void
427
+ sig do
428
+ params(
429
+ attr_names: T.any(String, Symbol),
430
+ message: String,
431
+ if: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
432
+ unless: T.any(Symbol, String, T.proc.params(arg0: T.untyped).returns(T::Boolean)),
433
+ on: T.any(Symbol, String, T::Array[T.any(Symbol, String)]),
434
+ allow_nil: T::Boolean,
435
+ allow_blank: T::Boolean,
436
+ strict: T::Boolean
437
+ ).void
438
+ end
439
+ def validates_presence_of(
440
+ *attr_names,
441
+ message: "can't be blank",
442
+ if: nil,
443
+ unless: :_,
444
+ on: :_,
445
+ allow_nil: false,
446
+ allow_blank: false,
447
+ strict: false
448
+ ); end
411
449
  end
412
- def validates_presence_of(
413
- *attr_names,
414
- message: "can't be blank",
415
- if: nil,
416
- unless: :_,
417
- on: :_,
418
- allow_nil: false,
419
- allow_blank: false,
420
- strict: false
421
- ); end
450
+
451
+ mixes_in_class_methods(ClassMethods)
422
452
  end