titleist 0.1.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (109) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/tests.yml +19 -0
  3. data/.gitignore +1 -2
  4. data/.rubocop.yml +26 -1
  5. data/.ruby-version +1 -1
  6. data/Gemfile +13 -2
  7. data/README.md +95 -25
  8. data/Rakefile +17 -6
  9. data/docs/index.md +7 -0
  10. data/lib/generators/titleist/titleist_generator.rb +3 -0
  11. data/lib/titleist.rb +14 -9
  12. data/lib/titleist/controller.rb +36 -0
  13. data/lib/titleist/engine.rb +10 -4
  14. data/lib/titleist/helper.rb +23 -0
  15. data/lib/titleist/title.rb +52 -89
  16. data/lib/titleist/version.rb +5 -1
  17. data/rbi/sord.rbi +117 -0
  18. data/sorbet/config +2 -0
  19. data/sorbet/rbi/gems/actioncable.rbi +318 -0
  20. data/sorbet/rbi/gems/actionmailbox.rbi +56 -0
  21. data/sorbet/rbi/gems/actionmailer.rbi +446 -0
  22. data/sorbet/rbi/gems/actionpack.rbi +3411 -0
  23. data/sorbet/rbi/gems/actiontext.rbi +79 -0
  24. data/sorbet/rbi/gems/actionview.rbi +1185 -0
  25. data/sorbet/rbi/gems/activejob.rbi +362 -0
  26. data/sorbet/rbi/gems/activemodel.rbi +749 -0
  27. data/sorbet/rbi/gems/activerecord.rbi +5713 -0
  28. data/sorbet/rbi/gems/activestorage.rbi +221 -0
  29. data/sorbet/rbi/gems/activesupport.rbi +2437 -0
  30. data/sorbet/rbi/gems/addressable.rbi +146 -0
  31. data/sorbet/rbi/gems/ast.rbi +47 -0
  32. data/sorbet/rbi/gems/capybara.rbi +1787 -0
  33. data/sorbet/rbi/gems/childprocess.rbi +106 -0
  34. data/sorbet/rbi/gems/codeclimate-test-reporter.rbi +125 -0
  35. data/sorbet/rbi/gems/concurrent-ruby.rbi +1587 -0
  36. data/sorbet/rbi/gems/crass.rbi +92 -0
  37. data/sorbet/rbi/gems/docile.rbi +29 -0
  38. data/sorbet/rbi/gems/erubi.rbi +26 -0
  39. data/sorbet/rbi/gems/globalid.rbi +98 -0
  40. data/sorbet/rbi/gems/i18n.rbi +191 -0
  41. data/sorbet/rbi/gems/jaro_winkler.rbi +14 -0
  42. data/sorbet/rbi/gems/loofah.rbi +129 -0
  43. data/sorbet/rbi/gems/mail.rbi +1582 -0
  44. data/sorbet/rbi/gems/marcel.rbi +12 -0
  45. data/sorbet/rbi/gems/method_source.rbi +63 -0
  46. data/sorbet/rbi/gems/mini_mime.rbi +51 -0
  47. data/sorbet/rbi/gems/minitest.rbi +419 -0
  48. data/sorbet/rbi/gems/mocha.rbi +794 -0
  49. data/sorbet/rbi/gems/nio4r.rbi +67 -0
  50. data/sorbet/rbi/gems/nokogiri.rbi +1010 -0
  51. data/sorbet/rbi/gems/parallel.rbi +81 -0
  52. data/sorbet/rbi/gems/parser.rbi +920 -0
  53. data/sorbet/rbi/gems/public_suffix.rbi +103 -0
  54. data/sorbet/rbi/gems/puma.rbi +586 -0
  55. data/sorbet/rbi/gems/rack-test.rbi +161 -0
  56. data/sorbet/rbi/gems/rack.rbi +634 -0
  57. data/sorbet/rbi/gems/rails-dom-testing.rbi +67 -0
  58. data/sorbet/rbi/gems/rails-html-sanitizer.rbi +91 -0
  59. data/sorbet/rbi/gems/railties.rbi +834 -0
  60. data/sorbet/rbi/gems/rainbow.rbi +117 -0
  61. data/sorbet/rbi/gems/rake.rbi +269 -0
  62. data/sorbet/rbi/gems/regexp_parser.rbi +912 -0
  63. data/sorbet/rbi/gems/rubocop.rbi +7232 -0
  64. data/sorbet/rbi/gems/ruby-progressbar.rbi +304 -0
  65. data/sorbet/rbi/gems/rubyzip.rbi +546 -0
  66. data/sorbet/rbi/gems/selenium-webdriver.rbi +1450 -0
  67. data/sorbet/rbi/gems/simplecov-html.rbi +30 -0
  68. data/sorbet/rbi/gems/simplecov.rbi +189 -0
  69. data/sorbet/rbi/gems/site_ruby.rbi +265 -0
  70. data/sorbet/rbi/gems/sprockets-rails.rbi +105 -0
  71. data/sorbet/rbi/gems/sprockets.rbi +753 -0
  72. data/sorbet/rbi/gems/sqlite3.rbi +353 -0
  73. data/sorbet/rbi/gems/thor.rbi +579 -0
  74. data/sorbet/rbi/gems/thread_safe.rbi +81 -0
  75. data/sorbet/rbi/gems/tzinfo.rbi +405 -0
  76. data/sorbet/rbi/gems/unicode-display_width.rbi +16 -0
  77. data/sorbet/rbi/gems/webdrivers.rbi +155 -0
  78. data/sorbet/rbi/gems/xpath.rbi +158 -0
  79. data/sorbet/rbi/gems/yard.rbi +1159 -0
  80. data/sorbet/rbi/hidden-definitions/errors.txt +14957 -0
  81. data/sorbet/rbi/hidden-definitions/hidden.rbi +24898 -0
  82. data/sorbet/rbi/sorbet-typed/lib/actionmailer/all/actionmailer.rbi +13 -0
  83. data/sorbet/rbi/sorbet-typed/lib/actionpack/all/actionpack.rbi +938 -0
  84. data/sorbet/rbi/sorbet-typed/lib/actionview/all/actionview.rbi +314 -0
  85. data/sorbet/rbi/sorbet-typed/lib/activemodel/all/activemodel.rbi +425 -0
  86. data/sorbet/rbi/sorbet-typed/lib/activerecord/>=5.2/activerecord.rbi +17 -0
  87. data/sorbet/rbi/sorbet-typed/lib/activerecord/all/activerecord.rbi +1425 -0
  88. data/sorbet/rbi/sorbet-typed/lib/activerecord/~>6.0.0/activerecord.rbi +475 -0
  89. data/sorbet/rbi/sorbet-typed/lib/activestorage/>=6.0.0/activestorage.rbi +19 -0
  90. data/sorbet/rbi/sorbet-typed/lib/activestorage/all/activestorage.rbi +173 -0
  91. data/sorbet/rbi/sorbet-typed/lib/activesupport/>=6.0.0.rc1/activesupport.rbi +23 -0
  92. data/sorbet/rbi/sorbet-typed/lib/activesupport/all/activesupport.rbi +858 -0
  93. data/sorbet/rbi/sorbet-typed/lib/bundler/all/bundler.rbi +8684 -0
  94. data/sorbet/rbi/sorbet-typed/lib/minitest/all/minitest.rbi +108 -0
  95. data/sorbet/rbi/sorbet-typed/lib/railties/all/railties.rbi +25 -0
  96. data/sorbet/rbi/sorbet-typed/lib/rainbow/all/rainbow.rbi +254 -0
  97. data/sorbet/rbi/sorbet-typed/lib/ruby/all/gem.rbi +4222 -0
  98. data/sorbet/rbi/sorbet-typed/lib/ruby/all/open3.rbi +111 -0
  99. data/sorbet/rbi/sorbet-typed/lib/ruby/all/resolv.rbi +543 -0
  100. data/sorbet/rbi/todo.rbi +20 -0
  101. data/titleist.gemspec +3 -14
  102. metadata +96 -155
  103. data/.travis.yml +0 -45
  104. data/app/controllers/.keep +0 -0
  105. data/app/helpers/.keep +0 -0
  106. data/app/helpers/titleist_helper.rb +0 -47
  107. data/app/mailers/.keep +0 -0
  108. data/app/models/.keep +0 -0
  109. data/app/views/.keep +0 -0
@@ -0,0 +1,19 @@
1
+ # This file is autogenerated. Do not edit it by hand. Regenerate it with:
2
+ # srb rbi sorbet-typed
3
+ #
4
+ # If you would like to make changes to this file, great! Please upstream any changes you make here:
5
+ #
6
+ # https://github.com/sorbet/sorbet-typed/edit/master/lib/activestorage/>=6.0.0/activestorage.rbi
7
+ #
8
+ # typed: strong
9
+
10
+ class ActiveStorage::Attached::One
11
+ sig { returns(T::Boolean) }
12
+ def blank?; end
13
+ end
14
+
15
+ class ActiveStorage::Attached::Many
16
+ # Returns all attached blobs.
17
+ sig { returns(T::Array[T.untyped]) }
18
+ def blobs; end
19
+ end
@@ -0,0 +1,173 @@
1
+ # This file is autogenerated. Do not edit it by hand. Regenerate it with:
2
+ # srb rbi sorbet-typed
3
+ #
4
+ # If you would like to make changes to this file, great! Please upstream any changes you make here:
5
+ #
6
+ # https://github.com/sorbet/sorbet-typed/edit/master/lib/activestorage/all/activestorage.rbi
7
+ #
8
+ # typed: strong
9
+
10
+ module ActiveStorage
11
+ sig { returns(Gem::Version) }
12
+ def self.gem_version; end
13
+
14
+ sig { returns(Gem::Version) }
15
+ def self.version; end
16
+ end
17
+
18
+ class ActiveStorage::Attached::One
19
+ # These aren't technically included, but Attached::One delegates any missing
20
+ # methods to Attachment, which in turn delegates to Blob. This is essentially
21
+ # a hack to make it easier to maintain the ActiveStorage signatures. We can't
22
+ #include Blob directly because it's a class, so `include`ing it doesn't work.
23
+ include ActiveStorage::Blob::Analyzable
24
+ include ActiveStorage::Blob::Identifiable
25
+ include ActiveStorage::Blob::Representable
26
+
27
+ # Attaches an `attachable` to the record.
28
+ #
29
+ # If the record is persisted and unchanged, the attachment is saved to
30
+ # the database immediately. Otherwise, it'll be saved to the DB when the
31
+ # record is next saved.
32
+ #
33
+ # ```ruby
34
+ # person.avatar.attach(params[:avatar]) # ActionDispatch::Http::UploadedFile object
35
+ # person.avatar.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
36
+ # person.avatar.attach(io: File.open("/path/to/face.jpg"), filename: "face.jpg", content_type: "image/jpg")
37
+ # person.avatar.attach(avatar_blob) # ActiveStorage::Blob object
38
+ # ```
39
+ sig { params(attachable: T.untyped).void }
40
+ def attach(attachable); end
41
+
42
+ # Returns `true` if an attachment has been made.
43
+ #
44
+ # ```ruby
45
+ # class User < ApplicationRecord
46
+ # has_one_attached :avatar
47
+ # end
48
+ #
49
+ # User.new.avatar.attached? # => false
50
+ # ```
51
+ sig { returns(T::Boolean) }
52
+ def attached?; end
53
+
54
+ # Returns the associated attachment record.
55
+ #
56
+ # You don't have to call this method to access the attachment's methods as
57
+ # they are all available at the model level.
58
+ sig { returns(T.nilable(ActiveStorage::Attachment)) }
59
+ def attachment; end
60
+
61
+ # Deletes the attachment without purging it, leaving its blob in place.
62
+ sig { void }
63
+ def detach; end
64
+
65
+ # Directly purges the attachment (i.e. destroys the blob and
66
+ # attachment and deletes the file on the service).
67
+ sig { void }
68
+ def purge; end
69
+
70
+ # Purges the attachment through the queuing system.
71
+ sig { void }
72
+ def purge_later; end
73
+ end
74
+
75
+ class ActiveStorage::Attached::Many
76
+ # These aren't technically included, but Attached::Many delegates any missing
77
+ # methods to Attachment, which in turn delegates to Blob. This is essentially
78
+ # a hack to make it easier to maintain the ActiveStorage signatures. We can't
79
+ # include Blob directly because it's a class, so `include`ing it doesn't work.
80
+ include ActiveStorage::Blob::Analyzable
81
+ include ActiveStorage::Blob::Identifiable
82
+ include ActiveStorage::Blob::Representable
83
+
84
+ # Attaches one or more `attachables` to the record.
85
+ #
86
+ # If the record is persisted and unchanged, the attachments are saved to
87
+ # the database immediately. Otherwise, they'll be saved to the DB when the
88
+ # record is next saved.
89
+ #
90
+ # ```ruby
91
+ # document.images.attach(params[:images]) # Array of ActionDispatch::Http::UploadedFile objects
92
+ # document.images.attach(params[:signed_blob_id]) # Signed reference to blob from direct upload
93
+ # document.images.attach(io: File.open("/path/to/racecar.jpg"), filename: "racecar.jpg", content_type: "image/jpg")
94
+ # document.images.attach([ first_blob, second_blob ])
95
+ # ```
96
+ sig { params(attachables: T.untyped).void }
97
+ def attach(*attachables); end
98
+
99
+ # Returns `true` if any attachments have been made.
100
+ #
101
+ # ```ruby
102
+ # class Gallery < ApplicationRecord
103
+ # has_many_attached :photos
104
+ # end
105
+ #
106
+ # Gallery.new.photos.attached? # => false
107
+ # ```
108
+ sig { returns(T::Boolean) }
109
+ def attached?; end
110
+
111
+ # Returns all the associated attachment records.
112
+ #
113
+ # All methods called on this proxy object that aren't listed here will automatically be delegated to `attachments`.
114
+ sig { returns(T.nilable(T::Array[ActiveStorage::Attachment])) }
115
+ def attachments; end
116
+
117
+ # Deletes associated attachments without purging them, leaving their respective blobs in place.
118
+ sig { void }
119
+ def detach; end
120
+
121
+ # Directly purges each associated attachment (i.e. destroys the blobs and
122
+ # attachments and deletes the files on the service).
123
+ sig { void }
124
+ def purge; end
125
+
126
+ # Purges each associated attachment through the queuing system.
127
+ sig { void }
128
+ def purge_later; end
129
+ end
130
+
131
+ module ActiveStorage::Blob::Representable
132
+ # Returns an ActiveStorage::Variant instance with the set of `transformations` provided. This is only relevant for image
133
+ # files, and it allows any image to be transformed for size, colors, and the like. Example:
134
+ #
135
+ # ```ruby
136
+ # avatar.variant(resize_to_limit: [100, 100]).processed.service_url
137
+ # ```
138
+ #
139
+ # This will create and process a variant of the avatar blob that's constrained to a height and width of 100px.
140
+ # Then it'll upload said variant to the service according to a derivative key of the blob and the transformations.
141
+ #
142
+ # Frequently, though, you don't actually want to transform the variant right away. But rather simply refer to a
143
+ # specific variant that can be created by a controller on-demand. Like so:
144
+ #
145
+ # ```ruby
146
+ # <%= image_tag Current.user.avatar.variant(resize_to_limit: [100, 100]) %>
147
+ # ```
148
+ #
149
+ # This will create a URL for that specific blob with that specific variant, which the ActiveStorage::RepresentationsController
150
+ # can then produce on-demand.
151
+ #
152
+ # Raises ActiveStorage::InvariableError if ImageMagick cannot transform the blob. To determine whether a blob is
153
+ # variable, call ActiveStorage::Blob#variable?.
154
+ sig { params(transformations: T.untyped).returns(ActiveStorage::Variant) }
155
+ def variant(transformations); end
156
+ end
157
+
158
+ class ActiveStorage::Attachment < ActiveRecord::Base
159
+ # These aren't technically included, but Attachment delegates any missing
160
+ # methods to Blob, which means it effectively inherits methods from Blob.
161
+ # This is essentially a hack to make it easier to maintain the
162
+ # ActiveStorage signatures. We can't include Blob directly because
163
+ # it's a class, so `include`ing it doesn't work.
164
+ include ActiveStorage::Blob::Analyzable
165
+ include ActiveStorage::Blob::Identifiable
166
+ include ActiveStorage::Blob::Representable
167
+ end
168
+
169
+ class ActiveStorage::Blob < ActiveRecord::Base
170
+ include ActiveStorage::Blob::Analyzable
171
+ include ActiveStorage::Blob::Identifiable
172
+ include ActiveStorage::Blob::Representable
173
+ end
@@ -0,0 +1,23 @@
1
+ # This file is autogenerated. Do not edit it by hand. Regenerate it with:
2
+ # srb rbi sorbet-typed
3
+ #
4
+ # If you would like to make changes to this file, great! Please upstream any changes you make here:
5
+ #
6
+ # https://github.com/sorbet/sorbet-typed/edit/master/lib/activesupport/>=6.0.0.rc1/activesupport.rbi
7
+ #
8
+ # typed: strong
9
+
10
+ class Array
11
+ sig { params(elements: T.untyped).returns(T::Array[T.untyped]) }
12
+ def excluding(*elements); end
13
+
14
+ sig do
15
+ params(
16
+ blk: T.nilable(T.proc.params(arg0: Elem).returns(T::Boolean))
17
+ ).returns(T.any(T::Array[Elem], T::Enumerable[Elem]))
18
+ end
19
+ def extract!(&blk); end
20
+
21
+ sig { params(elements: T.untyped).returns(T::Array[T.untyped]) }
22
+ def including(*elements); end
23
+ end
@@ -0,0 +1,858 @@
1
+ # This file is autogenerated. Do not edit it by hand. Regenerate it with:
2
+ # srb rbi sorbet-typed
3
+ #
4
+ # If you would like to make changes to this file, great! Please upstream any changes you make here:
5
+ #
6
+ # https://github.com/sorbet/sorbet-typed/edit/master/lib/activesupport/all/activesupport.rbi
7
+ #
8
+ # typed: false
9
+
10
+ module ActiveSupport
11
+ sig { params(kind: Symbol, blk: T.proc.bind(T.class_of(ActionController::Base)).void).void }
12
+ def self.on_load(kind, &blk); end
13
+ end
14
+
15
+ class Object
16
+ sig { params(duck: T.any(String, Symbol)).returns(T::Boolean) }
17
+ def acts_like?(duck); end
18
+
19
+ sig {returns(T::Boolean)}
20
+ def blank?; end
21
+
22
+ sig { returns(T.self_type) }
23
+ def deep_dup; end
24
+
25
+ sig { returns(TrueClass) }
26
+ def duplicable?; end
27
+
28
+ sig { params(another_object: Object).returns(T::Boolean) }
29
+ def in?(another_object); end
30
+
31
+ sig { returns(T::Hash[String, T.untyped]) }
32
+ def instance_values; end
33
+
34
+ sig { returns(T::Array[String]) }
35
+ def instance_variable_names; end
36
+
37
+ sig { returns(T.nilable(T.self_type)) }
38
+ def presence; end
39
+
40
+ sig { returns(T::Boolean) }
41
+ def present?; end
42
+
43
+ sig { returns(String) }
44
+ def to_param; end
45
+
46
+ sig { params(key: String).returns(String) }
47
+ def to_query(key); end
48
+
49
+ sig do
50
+ params(
51
+ method_name: T.any(Symbol, String, NilClass),
52
+ args: T.untyped,
53
+ b: T.nilable(T.proc.params(arg0: T.untyped).returns(T.untyped))
54
+ ).returns(T.untyped)
55
+ end
56
+ def try(method_name = nil, *args, &b); end
57
+
58
+ sig do
59
+ params(
60
+ method_name: T.any(Symbol, String, NilClass),
61
+ args: T.untyped,
62
+ b: T.nilable(T.proc.params(arg0: T.untyped).returns(T.untyped))
63
+ ).returns(T.untyped)
64
+ end
65
+ def try!(method_name = nil, *args, &b); end
66
+
67
+ sig do
68
+ params(
69
+ options: T::Hash[T.untyped, T.untyped],
70
+ block: T.nilable(T.proc.returns(T.untyped))
71
+ ).returns(T.untyped)
72
+ end
73
+ def with_options(options, &block); end
74
+ end
75
+
76
+ class FalseClass
77
+ sig { returns(NilClass) }
78
+ def presence; end
79
+ end
80
+
81
+ class Method
82
+ sig { returns(FalseClass) }
83
+ def duplicable?; end
84
+ end
85
+
86
+ class NilClass
87
+ sig { returns(T::Boolean) }
88
+ def duplicable?; end
89
+
90
+ sig do
91
+ params(
92
+ method_name: T.any(Symbol, String, NilClass),
93
+ args: T.untyped,
94
+ b: T.nilable(T.proc.params(arg0: T.untyped).returns(T.untyped))
95
+ ).returns(NilClass)
96
+ end
97
+ def try(method_name = nil, *args, &b); end
98
+
99
+ sig do
100
+ params(
101
+ method_name: T.any(Symbol, String, NilClass),
102
+ args: T.untyped,
103
+ b: T.nilable(T.proc.params(arg0: T.untyped).returns(T.untyped))
104
+ ).returns(NilClass)
105
+ end
106
+ def try!(method_name = nil, *args, &b); end
107
+ end
108
+
109
+ class String
110
+ sig { returns(T::Boolean) }
111
+ def acts_like_string?; end
112
+
113
+ sig { params(position: T.any(Integer, String, Regexp, T::Range[Integer])).returns(T.nilable(String)) }
114
+ def at(position); end
115
+
116
+ sig { returns(T::Boolean) }
117
+ def blank?; end
118
+
119
+ sig { params(first_letter: Symbol).returns(String) }
120
+ def camelize(first_letter = :upper); end
121
+
122
+ # camelcase is an alias of camelize
123
+ sig { params(first_letter: Symbol).returns(String) }
124
+ def camelcase(first_letter = :upper); end
125
+
126
+ sig { returns(String) }
127
+ def classify; end
128
+
129
+ sig { returns(String) }
130
+ def constantize; end
131
+
132
+ sig { returns(String) }
133
+ def dasherize; end
134
+
135
+ sig { returns(String) }
136
+ def deconstantize; end
137
+
138
+ sig { returns(String) }
139
+ def demodulize; end
140
+
141
+ # ends_with? is an alias of the core method 'end_with?'
142
+ sig { params(arg0: String).returns(T::Boolean) }
143
+ def ends_with?(*arg0); end
144
+
145
+ sig { params(string: String).returns(T::Boolean) }
146
+ def exclude?(string); end
147
+
148
+ sig { params(limit: Integer).returns(String) }
149
+ def first(limit = 1); end
150
+
151
+ sig { params(separate_class_name_and_id_with_underscore: T::Boolean).returns(String) }
152
+ def foreign_key(separate_class_name_and_id_with_underscore = true); end
153
+
154
+ sig { params(position: Integer).returns(String) }
155
+ def from(position); end
156
+
157
+ sig { returns(T.untyped) }
158
+ def html_safe; end
159
+
160
+ sig { params(capitalize: T::Boolean, keep_id_suffix: T::Boolean).returns(String) }
161
+ def humanize(capitalize: true, keep_id_suffix: false); end
162
+
163
+ sig { params(zone: String).returns(T.any(Time, ActiveSupport::TimeWithZone)) }
164
+ def in_time_zone(zone = ::Time.zone); end
165
+
166
+ sig { params(amount: Integer, indent_string: T.nilable(String), indent_empty_lines: T::Boolean).returns(T.nilable(String)) }
167
+ def indent!(amount, indent_string = nil, indent_empty_lines = false); end
168
+
169
+ sig { params(amount: Integer, indent_string: T.nilable(String), indent_empty_lines: T::Boolean).returns(T.nilable(String)) }
170
+ def indent(amount, indent_string = nil, indent_empty_lines = false); end
171
+
172
+ sig { returns(ActiveSupport::StringInquirer) }
173
+ def inquiry; end
174
+
175
+ sig { returns(T::Boolean) }
176
+ def is_utf8?; end
177
+
178
+ sig { params(limit: Integer).returns(String) }
179
+ def last(limit = 1); end
180
+
181
+ sig { returns(ActiveSupport::Multibyte::Chars) }
182
+ def mb_chars; end
183
+
184
+ sig { params(separator: String, preserve_case: T::Boolean).returns(String) }
185
+ def parameterize(separator: "-", preserve_case: false); end
186
+
187
+ sig { params(count: T.nilable(Integer), locale: Symbol).returns(String) }
188
+ def pluralize(count = nil, locale = :en); end
189
+
190
+ sig { params(patterns: T.untyped).returns(T.untyped) }
191
+ def remove!(*patterns); end
192
+
193
+ sig { params(patterns: T.untyped).returns(T.untyped) }
194
+ def remove(*patterns); end
195
+
196
+ sig { returns(T.untyped) }
197
+ def safe_constantize; end
198
+
199
+ sig { params(locale: Symbol).returns(String) }
200
+ def singularize(locale = :en); end
201
+
202
+ sig { returns(T.untyped) }
203
+ def squish!; end
204
+
205
+ sig { returns(String) }
206
+ def squish; end
207
+
208
+ # starts_with? is an alias of the core method 'start_with?''
209
+ sig { params(arg0: String).returns(T::Boolean) }
210
+ def starts_with?(*arg0); end
211
+
212
+ sig { returns(String) }
213
+ def strip_heredoc; end
214
+
215
+ sig { returns(String) }
216
+ def tableize; end
217
+
218
+ sig { params(keep_id_suffix: T::Boolean).returns(String) }
219
+ def titleize(keep_id_suffix: false); end
220
+
221
+ # titlecase is an alias of titleize
222
+ sig { params(keep_id_suffix: T::Boolean).returns(String) }
223
+ def titlecase(keep_id_suffix: false); end
224
+
225
+ sig { params(position: Integer).returns(String) }
226
+ def to(position); end
227
+
228
+ sig { returns(Date) }
229
+ def to_date; end
230
+
231
+ sig { returns(DateTime) }
232
+ def to_datetime; end
233
+
234
+ sig { params(form: Symbol).returns(Time) }
235
+ def to_time(form = :local); end
236
+
237
+ sig { params(truncate_at: Integer, separator: T.nilable(T.any(String, Regexp)), omission: String).returns(String) }
238
+ def truncate(truncate_at, separator: nil, omission: "..."); end
239
+
240
+ sig { params(words_count: Integer, separator: T.nilable(T.any(String, Regexp)), omission: String).returns(String) }
241
+ def truncate_words(words_count, separator: nil, omission: "..."); end
242
+
243
+ sig { returns(String) }
244
+ def underscore; end
245
+
246
+ sig { returns(String) }
247
+ def upcase_first; end
248
+ end
249
+
250
+ class Array
251
+ sig { returns(T::Boolean) }
252
+ def blank?; end
253
+
254
+ sig { returns(T::Array[T.untyped]) }
255
+ def deep_dup; end
256
+
257
+ sig { returns(T::Hash[T.untyped, T.untyped]) }
258
+ def extract_options!; end
259
+
260
+ sig { returns(Elem) }
261
+ def fifth; end
262
+
263
+ sig { returns(Elem) }
264
+ def forty_two; end
265
+
266
+ sig { returns(Elem) }
267
+ def fourth; end
268
+
269
+ sig { params(position: Integer).returns(T::Array[T.untyped]) }
270
+ def from(position); end
271
+
272
+ sig { params(number: Integer, fill_with: T.untyped).returns(T.untyped) }
273
+ def in_groups(number, fill_with = nil); end
274
+
275
+ sig { params(number: Integer, fill_with: T.untyped).returns(T.untyped) }
276
+ def in_groups_of(number, fill_with = nil); end
277
+
278
+ sig { returns(T.untyped) }
279
+ def inquiry; end
280
+
281
+ sig { returns(Elem) }
282
+ def second; end
283
+
284
+ sig { returns(Elem) }
285
+ def second_to_last; end
286
+
287
+ sig do
288
+ params(
289
+ value: T.untyped,
290
+ blk: T.proc.params(arg0: Elem).void
291
+ ).returns(T::Array[Elem])
292
+ end
293
+ def split(value = nil, &blk); end
294
+
295
+ sig { returns(Elem) }
296
+ def third; end
297
+
298
+ sig { returns(Elem) }
299
+ def third_to_last; end
300
+
301
+ sig { params(position: Integer).returns(T::Array[T.untyped]) }
302
+ def to(position); end
303
+
304
+ # to_default_s is an alias of the core method 'to_s'
305
+ sig {returns(String)}
306
+ def to_defaul_s; end
307
+
308
+ sig { params(format: Symbol).returns(String) }
309
+ def to_formatted_s(format = :default); end
310
+
311
+ sig { returns(String) }
312
+ def to_param; end
313
+
314
+ sig { params(key: String).returns(String) }
315
+ def to_query(key); end
316
+
317
+ sig do
318
+ params(
319
+ words_connector: String,
320
+ two_words_connector: String,
321
+ last_word_connector: String,
322
+ locale: T.nilable(Symbol)
323
+ ).returns(String)
324
+ end
325
+ def to_sentence(words_connector: ", ", two_words_connector: " and ", last_word_connector: ", and ", locale: nil); end
326
+
327
+ sig { params(options: T.untyped).returns(T.untyped) }
328
+ def to_xml(options = nil); end
329
+
330
+ sig { params(elements: T.untyped).returns(T.untyped) }
331
+ def without(*elements); end
332
+ end
333
+
334
+ module ActiveSupport::NumberHelper
335
+ sig do
336
+ params(
337
+ number: T.any(Integer, Float, String),
338
+ locale: Symbol,
339
+ precision: T.nilable(Integer),
340
+ unit: String,
341
+ separator: String,
342
+ delimiter: String,
343
+ format: String,
344
+ negative_format: String
345
+ ).returns(String)
346
+ end
347
+ def number_to_currency(number, locale: :en, precision: 2, unit: "$", separator: ".", delimiter: ",", format: "%u%n", negative_format: "-%u%n"); end
348
+
349
+ sig do
350
+ params(
351
+ number: T.any(Integer, Float, String),
352
+ locale: Symbol,
353
+ delimiter: String,
354
+ separator: String,
355
+ delimiter_pattern: T.nilable(Regexp)
356
+ ).returns(String)
357
+ end
358
+ def number_to_delimited(number, locale: :en, delimiter: ",", separator: ".", delimiter_pattern: nil); end
359
+
360
+ sig do
361
+ params(
362
+ number: T.any(Integer, Float, String),
363
+ locale: Symbol,
364
+ precision: T.nilable(Integer),
365
+ significant: T::Boolean,
366
+ separator: String,
367
+ delimiter: String,
368
+ strip_insignificant_zeros: T::Boolean,
369
+ units: T.any(T::Hash[T.untyped, T.untyped], String, Symbol),
370
+ format: String
371
+ ).returns(String)
372
+ end
373
+ def number_to_human(number, locale: :en, precision: 3, significant: true, separator: ".", delimiter: "", strip_insignificant_zeros: true, units: {}, format: "%n %u"); end
374
+
375
+ sig do
376
+ params(
377
+ number: T.any(Integer, Float, String),
378
+ locale: Symbol,
379
+ precision: T.nilable(Integer),
380
+ significant: T::Boolean,
381
+ separator: String,
382
+ delimiter: String,
383
+ strip_insignificant_zeros: T::Boolean
384
+ ).returns(String)
385
+ end
386
+ def number_to_human_size(number, locale: :en, precision: 3, significant: true, separator: ".", delimiter: "", strip_insignificant_zeros: true); end
387
+
388
+ sig do
389
+ params(
390
+ number: T.any(Integer, Float, String),
391
+ locale: Symbol,
392
+ precision: T.nilable(Integer),
393
+ significant: T::Boolean,
394
+ separator: String,
395
+ delimiter: String,
396
+ strip_insignificant_zeros: T::Boolean,
397
+ format: String
398
+ ).returns(String)
399
+ end
400
+ def number_to_percentage(number, locale: :en, precision: 3, significant: false, separator: ".", delimiter: "", strip_insignificant_zeros: false, format: "%n%"); end
401
+
402
+ sig do
403
+ params(
404
+ number: T.any(Integer, Float, String),
405
+ area_code: T::Boolean,
406
+ delimiter: String,
407
+ extension: T.nilable(Integer),
408
+ country_code: T.nilable(Integer),
409
+ pattern: T.nilable(Regexp)
410
+ ).returns(String)
411
+ end
412
+ def number_to_phone(number, area_code: false, delimiter: "-", extension: nil, country_code: nil, pattern: nil); end
413
+
414
+ sig do
415
+ params(
416
+ number: T.any(Integer, Float, String),
417
+ locale: Symbol,
418
+ precision: T.nilable(Integer),
419
+ significant: T::Boolean,
420
+ separator: String,
421
+ delimiter: String,
422
+ strip_insignificant_zeros: T::Boolean
423
+ ).returns(String)
424
+ end
425
+ def number_to_rounded(number, locale: :en, precision: 3, significant: false, separator: ".", delimiter: "", strip_insignificant_zeros: false); end
426
+ end
427
+
428
+ module ActiveSupport::Inflector
429
+ sig do
430
+ params(
431
+ term: String,
432
+ uppercase_first_letter: T::Boolean
433
+ ).returns(String)
434
+ end
435
+ def camelize(term, uppercase_first_letter = true); end
436
+
437
+ sig { params(table_name: String).returns(String) }
438
+ def classify(table_name); end
439
+
440
+ sig { params(camel_cased_word: String).returns(T.untyped) }
441
+ def constantize(camel_cased_word); end
442
+
443
+ sig { params(underscored_word: String).returns(String) }
444
+ def dasherize(underscored_word); end
445
+
446
+ sig { params(path: String).returns(String) }
447
+ def deconstantize(path); end
448
+
449
+ sig { params(path: String).returns(String) }
450
+ def demodulize(path); end
451
+
452
+ sig do
453
+ params(
454
+ class_name: String,
455
+ separate_class_name_and_id_with_underscore: T::Boolean
456
+ ).returns(String)
457
+ end
458
+ def foreign_key(class_name, separate_class_name_and_id_with_underscore = true); end
459
+
460
+ sig do
461
+ params(
462
+ lower_case_and_underscored_word: String,
463
+ capitalize: T::Boolean,
464
+ keep_id_suffix: T::Boolean
465
+ ).returns(String)
466
+ end
467
+ def humanize(lower_case_and_underscored_word, capitalize: true, keep_id_suffix: false); end
468
+
469
+ sig { params(locale: Symbol, blk: T.untyped).returns(T.untyped) }
470
+ def inflections(locale = :en, &blk); end
471
+
472
+ sig { params(number: Integer).returns(String) }
473
+ def ordinal(number); end
474
+
475
+ sig { params(number: Integer).returns(String) }
476
+ def ordinalize(number); end
477
+
478
+ sig do
479
+ params(
480
+ string: String,
481
+ separator: String,
482
+ preserve_case: T::Boolean,
483
+ locale: Symbol
484
+ ).returns(String)
485
+ end
486
+ def parameterize(string, separator: '-', preserve_case: false, locale: nil); end
487
+
488
+ sig { params(word: String, locale: Symbol).returns(String) }
489
+ def pluralize(word, locale = :en); end
490
+
491
+ sig { params(camel_cased_word: String).returns(T.untyped) }
492
+ def safe_constantize(camel_cased_word); end
493
+
494
+ sig { params(word: String, locale: Symbol).returns(String) }
495
+ def singularize(word, locale = :en); end
496
+
497
+ sig { params(class_name: String).returns(String) }
498
+ def tableize(class_name); end
499
+
500
+ sig { params(word: String, keep_id_suffix: T::Boolean).returns(String) }
501
+ def titleize(word, keep_id_suffix: false); end
502
+
503
+ sig { params(string: String, replacement: String, locale: Symbol).returns(String) }
504
+ def transliterate(string, replacement = '?', locale: nil); end
505
+
506
+ sig { params(camel_cased_word: String).returns(String) }
507
+ def underscore(camel_cased_word); end
508
+
509
+ sig { params(string: String).returns(String) }
510
+ def upcase_first(string); end
511
+ end
512
+
513
+
514
+ # defines some of the methods at https://github.com/rails/rails/blob/v6.0.0/activesupport/lib/active_support/core_ext/time/calculations.rb
515
+ # these get added to Time, but are available on TimeWithZone thanks to https://github.com/rails/rails/blob/v6.0.0/activesupport/lib/active_support/time_with_zone.rb#L520
516
+ # this is not a complete definition!
517
+ class ActiveSupport::TimeWithZone
518
+ sig { returns(ActiveSupport::TimeWithZone) }
519
+ def midnight; end
520
+
521
+ sig { returns(ActiveSupport::TimeWithZone) }
522
+ def beginning_of_day; end
523
+
524
+ sig { returns(ActiveSupport::TimeWithZone) }
525
+ def at_midnight; end
526
+
527
+ sig { returns(ActiveSupport::TimeWithZone) }
528
+ def at_beginning_of_day; end
529
+
530
+ sig { returns(ActiveSupport::TimeWithZone) }
531
+ def middle_of_day; end
532
+
533
+ sig { returns(ActiveSupport::TimeWithZone) }
534
+ def midday; end
535
+
536
+ sig { returns(ActiveSupport::TimeWithZone) }
537
+ def noon; end
538
+
539
+ sig { returns(ActiveSupport::TimeWithZone) }
540
+ def at_midday; end
541
+
542
+ sig { returns(ActiveSupport::TimeWithZone) }
543
+ def at_noon; end
544
+
545
+ sig { returns(ActiveSupport::TimeWithZone) }
546
+ def at_middle_of_day; end
547
+
548
+ sig { returns(ActiveSupport::TimeWithZone) }
549
+ def end_of_day; end
550
+
551
+ sig { returns(ActiveSupport::TimeWithZone) }
552
+ def at_end_of_day; end
553
+ end
554
+
555
+ # defines some of the methods at https://github.com/rails/rails/blob/v6.0.0/activesupport/lib/active_support/core_ext/date
556
+ # this is not a complete definition!
557
+ class Date
558
+ sig { params(options: T::Hash[Symbol, Integer]).returns(Date) }
559
+ def advance(options); end
560
+
561
+ # these are the sigs for Date- in the stdlib
562
+ # https://github.com/sorbet/sorbet/blob/3910f6cfd9935c9b42e2135e32e15ab8a6e5b9be/rbi/stdlib/date.rbi#L373
563
+ # note that if more sigs are added to sorbet you should replicate them here
564
+ # check sorbet master: https://github.com/sorbet/sorbet/blob/master/rbi/stdlib/date.rbi
565
+ sig {params(arg0: Numeric).returns(T.self_type)}
566
+ sig {params(arg0: Date).returns(Rational)}
567
+ # these sigs are added for activesupport users
568
+ sig {params(arg0: ActiveSupport::Duration).returns(T.self_type)}
569
+ def -(arg0); end
570
+ end
571
+
572
+ # defines some of the methods at https://github.com/rails/rails/blob/v6.0.0/activesupport/lib/active_support/core_ext/time
573
+ # this is not a complete definition!
574
+ class Time
575
+ sig { returns(Time) }
576
+ def midnight; end
577
+
578
+ sig { returns(Time) }
579
+ def beginning_of_day; end
580
+
581
+ sig { params(options: T::Hash[Symbol, Integer]).returns(Time) }
582
+ def advance(options); end
583
+
584
+ sig { returns(Time) }
585
+ def at_midnight; end
586
+
587
+ sig { returns(Time) }
588
+ def at_beginning_of_day; end
589
+
590
+ sig { returns(Time) }
591
+ def middle_of_day; end
592
+
593
+ sig { returns(Time) }
594
+ def midday; end
595
+
596
+ sig { returns(Time) }
597
+ def noon; end
598
+
599
+ sig { returns(Time) }
600
+ def at_midday; end
601
+
602
+ sig { returns(Time) }
603
+ def at_noon; end
604
+
605
+ sig { returns(Time) }
606
+ def at_middle_of_day; end
607
+
608
+ # https://github.com/rails/rails/blob/v6.0.0/activesupport/lib/active_support/core_ext/date_and_time/zones.rb
609
+ sig { params(zone: String).returns(T.any(Time, ActiveSupport::TimeWithZone)) }
610
+ def in_time_zone(zone = ::Time.zone); end
611
+
612
+ # these are the sigs for Time- in the stdlib
613
+ # https://github.com/sorbet/sorbet/blob/c3691753e4ce545e1eb66cbd3e55de67d8879b98/rbi/core/time.rbi#L347
614
+ # note that if more sigs are added to sorbet you should replicate them here
615
+ # check sorbet master: https://github.com/sorbet/sorbet/blob/master/rbi/core/time.rbi#L347
616
+ sig do
617
+ params(
618
+ arg0: Time,
619
+ )
620
+ .returns(Float)
621
+ end
622
+ sig do
623
+ params(
624
+ arg0: Numeric,
625
+ )
626
+ .returns(Time)
627
+ end
628
+ # these sigs are added for activesupport users
629
+ sig {params(arg0: ActiveSupport::Duration).returns(Time)}
630
+ def -(arg0); end
631
+ end
632
+
633
+ # defines some of the methods at https://github.com/rails/rails/tree/v6.0.0/activesupport/lib/active_support/core_ext/hash
634
+ # this is not a complete definition!
635
+ class Hash
636
+ sig { returns(T::Hash[String, T.untyped]) }
637
+ def stringify_keys; end
638
+
639
+ sig { returns(T::Hash[String, T.untyped]) }
640
+ def stringify_keys!; end
641
+
642
+ sig { returns(T::Hash[String, T.untyped]) }
643
+ def deep_stringify_keys; end
644
+
645
+ sig { returns(T::Hash[String, T.untyped]) }
646
+ def deep_stringify_keys!; end
647
+
648
+ sig { returns(T::Hash[Symbol, T.untyped]) }
649
+ def symbolize_keys; end
650
+
651
+ sig { returns(T::Hash[Symbol, T.untyped]) }
652
+ def symbolize_keys!; end
653
+
654
+ sig { returns(T::Hash[Symbol, T.untyped]) }
655
+ def deep_symbolize_keys; end
656
+
657
+ sig { returns(T::Hash[Symbol, T.untyped]) }
658
+ def deep_symbolize_keys!; end
659
+
660
+ # in an ideal world, `arg` would be the type of all keys, the 1st `T.untyped` would be
661
+ # the type of keys your block returns, and the 2nd `T.untyped` would be the type of values
662
+ # that the hash had.
663
+ sig { params(block: T.proc.params(arg: T.untyped).void).returns(T::Hash[T.untyped, T.untyped]) }
664
+ def deep_transform_keys(&block); end
665
+
666
+ sig { params(block: T.proc.params(arg: T.untyped).void).returns(T::Hash[T.untyped, T.untyped]) }
667
+ def deep_transform_keys!(&block); end
668
+
669
+ sig { returns(T::Hash[Symbol, T.untyped]) }
670
+ def to_options; end
671
+ end
672
+
673
+ class Integer
674
+ # Returns a Duration instance matching the number of months provided.
675
+ #
676
+ # ```ruby
677
+ # 2.months # => 2 months
678
+ # ```
679
+ sig { returns(ActiveSupport::Duration) }
680
+ def months; end
681
+
682
+ sig { returns(ActiveSupport::Duration) }
683
+ def month; end
684
+
685
+ # Returns a Duration instance matching the number of years provided.
686
+ #
687
+ # ```ruby
688
+ # 2.years # => 2 years
689
+ # ```
690
+ sig { returns(ActiveSupport::Duration) }
691
+ def years; end
692
+
693
+ sig { returns(ActiveSupport::Duration) }
694
+ def year; end
695
+ end
696
+
697
+ class Numeric
698
+ sig { returns(ActiveSupport::Duration) }
699
+ def second; end
700
+
701
+ sig { returns(ActiveSupport::Duration) }
702
+ def seconds; end
703
+
704
+ sig { returns(ActiveSupport::Duration) }
705
+ def minute; end
706
+
707
+ sig { returns(ActiveSupport::Duration) }
708
+ def minutes; end
709
+
710
+ sig { returns(ActiveSupport::Duration) }
711
+ def hour; end
712
+
713
+ sig { returns(ActiveSupport::Duration) }
714
+ def hours; end
715
+
716
+ sig { returns(ActiveSupport::Duration) }
717
+ def day; end
718
+
719
+ sig { returns(ActiveSupport::Duration) }
720
+ def days; end
721
+
722
+ sig { returns(ActiveSupport::Duration) }
723
+ def week; end
724
+
725
+ sig { returns(ActiveSupport::Duration) }
726
+ def weeks; end
727
+
728
+ sig { returns(ActiveSupport::Duration) }
729
+ def fortnight; end
730
+
731
+ sig { returns(ActiveSupport::Duration) }
732
+ def fortnights; end
733
+
734
+ sig { returns(T.self_type) }
735
+ def in_milliseconds; end
736
+ end
737
+
738
+ module Enumerable
739
+ # https://github.com/rails/rails/blob/v5.2.3/activesupport/lib/active_support/core_ext/enumerable.rb#L64..L72
740
+ # the case where a block isn't given isn't handled - that seems like an unlikely case
741
+ sig do
742
+ type_parameters(:key).params(
743
+ block: T.proc.params(o: Enumerable::Elem).returns(T.type_parameter(:key))
744
+ ).returns(
745
+ T::Hash[T.type_parameter(:key), Enumerable::Elem]
746
+ )
747
+ end
748
+ def index_by(&block); end
749
+ end
750
+
751
+ class ActiveSupport::Duration
752
+ # Returns the number of seconds that this Duration represents.
753
+ #
754
+ # ```ruby
755
+ # 1.minute.to_i # => 60
756
+ # 1.hour.to_i # => 3600
757
+ # 1.day.to_i # => 86400
758
+ # ```
759
+ #
760
+ # Note that this conversion makes some assumptions about the
761
+ # duration of some periods, e.g. months are always 1/12 of year
762
+ # and years are 365.2425 days:
763
+ #
764
+ # ```ruby
765
+ # # equivalent to (1.year / 12).to_i
766
+ # 1.month.to_i # => 2629746
767
+ #
768
+ # # equivalent to 365.2425.days.to_i
769
+ # 1.year.to_i # => 31556952
770
+ # ```
771
+ #
772
+ # In such cases, Ruby's core
773
+ # [Date](https://ruby-doc.org/stdlib/libdoc/date/rdoc/Date.html) and
774
+ # [Time](https://ruby-doc.org/stdlib/libdoc/time/rdoc/Time.html) should be used for precision
775
+ # date and time arithmetic.
776
+ sig { returns(Integer) }
777
+ def to_i; end
778
+
779
+ sig { returns(Float) }
780
+ def to_f; end
781
+
782
+ # Returns the amount of seconds a duration covers as a string.
783
+ # For more information check to_i method.
784
+ #
785
+ # ```ruby
786
+ # 1.day.to_s # => "86400"
787
+ # ```
788
+ sig { returns(String) }
789
+ def to_s; end
790
+
791
+ # Creates a new Duration from string formatted according to ISO 8601 Duration.
792
+ #
793
+ # See [ISO 8601](https://en.wikipedia.org/wiki/ISO_8601#Durations) for more information.
794
+ # This method allows negative parts to be present in pattern.
795
+ # If invalid string is provided, it will raise `ActiveSupport::Duration::ISO8601Parser::ParsingError`.
796
+ sig { params(iso8601duration: String).returns(ActiveSupport::Duration) }
797
+ def self.parse(iso8601duration); end
798
+
799
+ # Creates a new Duration from a seconds value that is converted
800
+ # to the individual parts:
801
+ #
802
+ # ```ruby
803
+ # ActiveSupport::Duration.build(31556952).parts # => {:years=>1}
804
+ # ActiveSupport::Duration.build(2716146).parts # => {:months=>1, :days=>1}
805
+ # ```
806
+ sig { params(value: Numeric).returns(ActiveSupport::Duration) }
807
+ def self.build(value); end
808
+
809
+ # Returns `true` if `other` is also a Duration instance, which has the
810
+ # same parts as this one.
811
+ sig { params(other: T.untyped).returns(T::Boolean) }
812
+ def eql?(other); end
813
+
814
+ # Compares one Duration with another or a Numeric to this Duration.
815
+ # Numeric values are treated as seconds.
816
+ sig { params(other: T.any(ActiveSupport::Duration, Numeric)).returns(Integer) }
817
+ def <=>(other); end
818
+
819
+ # Adds another Duration or a Numeric to this Duration. Numeric values
820
+ # are treated as seconds.
821
+ sig { params(other: T.any(ActiveSupport::Duration, Numeric)).returns(ActiveSupport::Duration) }
822
+ def +(other); end
823
+
824
+ # Subtracts another Duration or a Numeric from this Duration. Numeric
825
+ # values are treated as seconds.
826
+ sig { params(other: T.any(ActiveSupport::Duration, Numeric)).returns(ActiveSupport::Duration) }
827
+ def -(other); end
828
+
829
+ # Multiplies this Duration by a Numeric and returns a new Duration.
830
+ sig { params(other: Numeric).returns(ActiveSupport::Duration) }
831
+ def *(other); end
832
+
833
+ # Divides this Duration by a Numeric and returns a new Duration.
834
+ sig { params(other: Numeric).returns(ActiveSupport::Duration) }
835
+ def /(other); end
836
+
837
+ # Returns the modulo of this Duration by another Duration or Numeric.
838
+ # Numeric values are treated as seconds.
839
+ sig { params(other: T.any(ActiveSupport::Duration, Numeric)).returns(ActiveSupport::Duration) }
840
+ def %(other); end
841
+
842
+ # Returns `true` if `other` is also a Duration instance with the
843
+ # same `value`, or if `other == value`.
844
+ sig { params(other: T.untyped).returns(T::Boolean) }
845
+ def ==(other); end
846
+
847
+ # Build ISO 8601 Duration string for this duration.
848
+ # The `precision` parameter can be used to limit seconds' precision of duration.
849
+ sig { params(precision: T.nilable(Integer)).returns(String) }
850
+ def iso8601(precision: nil); end
851
+ end
852
+
853
+ module Benchmark
854
+ extend T::Sig
855
+
856
+ sig { params(block: T.proc.void).returns(Float) }
857
+ def self.ms(&block); end
858
+ end