konstruo 1.0.0

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 (126) hide show
  1. checksums.yaml +7 -0
  2. data/.rspec +3 -0
  3. data/.rubocop.yml +22 -0
  4. data/.tool-versions +1 -0
  5. data/CHANGELOG.md +21 -0
  6. data/LICENSE.txt +21 -0
  7. data/README.md +35 -0
  8. data/Rakefile +10 -0
  9. data/lib/konstruo/mapper.rb +120 -0
  10. data/lib/konstruo/version.rb +6 -0
  11. data/lib/konstruo.rb +18 -0
  12. data/sorbet/config +4 -0
  13. data/sorbet/rbi/annotations/.gitattributes +1 -0
  14. data/sorbet/rbi/annotations/actionmailer.rbi +10 -0
  15. data/sorbet/rbi/annotations/actionpack.rbi +430 -0
  16. data/sorbet/rbi/annotations/actionview.rbi +75 -0
  17. data/sorbet/rbi/annotations/activejob.rbi +44 -0
  18. data/sorbet/rbi/annotations/activemodel.rbi +89 -0
  19. data/sorbet/rbi/annotations/activerecord.rbi +92 -0
  20. data/sorbet/rbi/annotations/activesupport.rbi +454 -0
  21. data/sorbet/rbi/annotations/globalid.rbi +30 -0
  22. data/sorbet/rbi/annotations/minitest.rbi +119 -0
  23. data/sorbet/rbi/annotations/railties.rbi +61 -0
  24. data/sorbet/rbi/annotations/rainbow.rbi +269 -0
  25. data/sorbet/rbi/dsl/.gitattributes +1 -0
  26. data/sorbet/rbi/dsl/active_support/callbacks.rbi +23 -0
  27. data/sorbet/rbi/gems/.gitattributes +1 -0
  28. data/sorbet/rbi/gems/actioncable@7.2.1.rbi +3096 -0
  29. data/sorbet/rbi/gems/actionmailbox@7.2.1.rbi +1832 -0
  30. data/sorbet/rbi/gems/actionmailer@7.2.1.rbi +2664 -0
  31. data/sorbet/rbi/gems/actionpack@7.2.1.rbi +20536 -0
  32. data/sorbet/rbi/gems/actiontext@7.2.1.rbi +1697 -0
  33. data/sorbet/rbi/gems/actionview@7.2.1.rbi +15752 -0
  34. data/sorbet/rbi/gems/activejob@7.2.1.rbi +2828 -0
  35. data/sorbet/rbi/gems/activemodel@7.2.1.rbi +6762 -0
  36. data/sorbet/rbi/gems/activerecord@7.2.1.rbi +41433 -0
  37. data/sorbet/rbi/gems/activestorage@7.2.1.rbi +3247 -0
  38. data/sorbet/rbi/gems/activesupport@7.2.1.rbi +21142 -0
  39. data/sorbet/rbi/gems/ast@2.4.2.rbi +585 -0
  40. data/sorbet/rbi/gems/base64@0.2.0.rbi +509 -0
  41. data/sorbet/rbi/gems/bigdecimal@3.1.8.rbi +78 -0
  42. data/sorbet/rbi/gems/builder@3.3.0.rbi +9 -0
  43. data/sorbet/rbi/gems/concurrent-ruby@1.3.4.rbi +11645 -0
  44. data/sorbet/rbi/gems/connection_pool@2.4.1.rbi +9 -0
  45. data/sorbet/rbi/gems/crass@1.0.6.rbi +623 -0
  46. data/sorbet/rbi/gems/dashbrains-rubocop-config@1.0.4.rbi +9 -0
  47. data/sorbet/rbi/gems/date@3.3.4.rbi +75 -0
  48. data/sorbet/rbi/gems/diff-lcs@1.5.1.rbi +1131 -0
  49. data/sorbet/rbi/gems/drb@2.2.1.rbi +1347 -0
  50. data/sorbet/rbi/gems/erubi@1.13.0.rbi +150 -0
  51. data/sorbet/rbi/gems/globalid@1.2.1.rbi +749 -0
  52. data/sorbet/rbi/gems/i18n@1.14.5.rbi +2359 -0
  53. data/sorbet/rbi/gems/io-console@0.7.2.rbi +9 -0
  54. data/sorbet/rbi/gems/json@2.7.2.rbi +1562 -0
  55. data/sorbet/rbi/gems/language_server-protocol@3.17.0.3.rbi +14238 -0
  56. data/sorbet/rbi/gems/logger@1.6.1.rbi +920 -0
  57. data/sorbet/rbi/gems/loofah@2.22.0.rbi +1081 -0
  58. data/sorbet/rbi/gems/mail@2.8.1.rbi +8658 -0
  59. data/sorbet/rbi/gems/marcel@1.0.4.rbi +239 -0
  60. data/sorbet/rbi/gems/mini_mime@1.1.5.rbi +173 -0
  61. data/sorbet/rbi/gems/minitest@5.25.1.rbi +1546 -0
  62. data/sorbet/rbi/gems/net-imap@0.4.16.rbi +10845 -0
  63. data/sorbet/rbi/gems/net-pop@0.1.2.rbi +927 -0
  64. data/sorbet/rbi/gems/net-protocol@0.2.2.rbi +292 -0
  65. data/sorbet/rbi/gems/net-smtp@0.5.0.rbi +1228 -0
  66. data/sorbet/rbi/gems/netrc@0.11.0.rbi +159 -0
  67. data/sorbet/rbi/gems/nio4r@2.7.3.rbi +293 -0
  68. data/sorbet/rbi/gems/nokogiri@1.16.7.rbi +7311 -0
  69. data/sorbet/rbi/gems/parallel@1.26.3.rbi +291 -0
  70. data/sorbet/rbi/gems/parser@3.3.5.0.rbi +5519 -0
  71. data/sorbet/rbi/gems/prism@1.0.0.rbi +35493 -0
  72. data/sorbet/rbi/gems/psych@5.1.2.rbi +1769 -0
  73. data/sorbet/rbi/gems/racc@1.8.1.rbi +162 -0
  74. data/sorbet/rbi/gems/rack-session@2.0.0.rbi +727 -0
  75. data/sorbet/rbi/gems/rack-test@2.1.0.rbi +747 -0
  76. data/sorbet/rbi/gems/rack@3.1.7.rbi +4902 -0
  77. data/sorbet/rbi/gems/rackup@2.1.0.rbi +390 -0
  78. data/sorbet/rbi/gems/rails-dom-testing@2.2.0.rbi +758 -0
  79. data/sorbet/rbi/gems/rails-html-sanitizer@1.6.0.rbi +785 -0
  80. data/sorbet/rbi/gems/rails@7.2.1.rbi +9 -0
  81. data/sorbet/rbi/gems/railties@7.2.1.rbi +3824 -0
  82. data/sorbet/rbi/gems/rainbow@3.1.1.rbi +403 -0
  83. data/sorbet/rbi/gems/rake@13.2.1.rbi +3046 -0
  84. data/sorbet/rbi/gems/rbi@0.2.0.rbi +4105 -0
  85. data/sorbet/rbi/gems/rdoc@6.7.0.rbi +12721 -0
  86. data/sorbet/rbi/gems/regexp_parser@2.9.2.rbi +3772 -0
  87. data/sorbet/rbi/gems/reline@0.5.10.rbi +9 -0
  88. data/sorbet/rbi/gems/rspec-core@3.13.1.rbi +11012 -0
  89. data/sorbet/rbi/gems/rspec-expectations@3.13.3.rbi +8183 -0
  90. data/sorbet/rbi/gems/rspec-mocks@3.13.1.rbi +5341 -0
  91. data/sorbet/rbi/gems/rspec-support@3.13.1.rbi +1630 -0
  92. data/sorbet/rbi/gems/rspec@3.13.0.rbi +83 -0
  93. data/sorbet/rbi/gems/rubocop-ast@1.32.3.rbi +7446 -0
  94. data/sorbet/rbi/gems/rubocop-capybara@2.21.0.rbi +9 -0
  95. data/sorbet/rbi/gems/rubocop-factory_bot@2.26.1.rbi +9 -0
  96. data/sorbet/rbi/gems/rubocop-graphql@1.5.4.rbi +9 -0
  97. data/sorbet/rbi/gems/rubocop-minitest@0.36.0.rbi +9 -0
  98. data/sorbet/rbi/gems/rubocop-performance@1.21.1.rbi +9 -0
  99. data/sorbet/rbi/gems/rubocop-rails@2.26.1.rbi +9 -0
  100. data/sorbet/rbi/gems/rubocop-rake@0.6.0.rbi +329 -0
  101. data/sorbet/rbi/gems/rubocop-rspec@3.0.5.rbi +9 -0
  102. data/sorbet/rbi/gems/rubocop-rspec_rails@2.30.0.rbi +9 -0
  103. data/sorbet/rbi/gems/rubocop-sorbet@0.8.5.rbi +9 -0
  104. data/sorbet/rbi/gems/rubocop@1.66.1.rbi +58268 -0
  105. data/sorbet/rbi/gems/ruby-progressbar@1.13.0.rbi +1318 -0
  106. data/sorbet/rbi/gems/securerandom@0.3.1.rbi +396 -0
  107. data/sorbet/rbi/gems/spoom@1.4.2.rbi +4932 -0
  108. data/sorbet/rbi/gems/stringio@3.1.1.rbi +9 -0
  109. data/sorbet/rbi/gems/tapioca@0.16.2.rbi +3581 -0
  110. data/sorbet/rbi/gems/thor@1.3.2.rbi +4378 -0
  111. data/sorbet/rbi/gems/timeout@0.4.1.rbi +149 -0
  112. data/sorbet/rbi/gems/tzinfo@2.0.6.rbi +5918 -0
  113. data/sorbet/rbi/gems/unicode-display_width@2.5.0.rbi +66 -0
  114. data/sorbet/rbi/gems/useragent@0.16.10.rbi +9 -0
  115. data/sorbet/rbi/gems/webrick@1.8.1.rbi +2607 -0
  116. data/sorbet/rbi/gems/websocket-driver@0.7.6.rbi +993 -0
  117. data/sorbet/rbi/gems/websocket-extensions@0.1.5.rbi +121 -0
  118. data/sorbet/rbi/gems/yard-sorbet@0.9.0.rbi +435 -0
  119. data/sorbet/rbi/gems/yard@0.9.37.rbi +18570 -0
  120. data/sorbet/rbi/gems/zeitwerk@2.6.18.rbi +1051 -0
  121. data/sorbet/rbi/todo.rbi +6 -0
  122. data/sorbet/tapioca/config.yml +13 -0
  123. data/sorbet/tapioca/require.rb +9 -0
  124. data/tasks/bundle_update.rake +14 -0
  125. data/tasks/sorbet.rake +26 -0
  126. metadata +216 -0
@@ -0,0 +1,749 @@
1
+ # typed: true
2
+
3
+ # DO NOT EDIT MANUALLY
4
+ # This is an autogenerated file for types exported from the `globalid` gem.
5
+ # Please instead update this file by running `bin/tapioca gem globalid`.
6
+
7
+
8
+ # source://globalid//lib/global_id/global_id.rb#7
9
+ class GlobalID
10
+ extend ::ActiveSupport::Autoload
11
+
12
+ # @return [GlobalID] a new instance of GlobalID
13
+ #
14
+ # source://globalid//lib/global_id/global_id.rb#44
15
+ def initialize(gid, options = T.unsafe(nil)); end
16
+
17
+ # source://globalid//lib/global_id/global_id.rb#63
18
+ def ==(other); end
19
+
20
+ # source://globalid//lib/global_id/global_id.rb#42
21
+ def app(*_arg0, **_arg1, &_arg2); end
22
+
23
+ # source://globalid//lib/global_id/global_id.rb#76
24
+ def as_json(*_arg0); end
25
+
26
+ # source://globalid//lib/global_id/global_id.rb#42
27
+ def deconstruct_keys(*_arg0, **_arg1, &_arg2); end
28
+
29
+ # source://globalid//lib/global_id/global_id.rb#63
30
+ def eql?(other); end
31
+
32
+ # source://globalid//lib/global_id/global_id.rb#48
33
+ def find(options = T.unsafe(nil)); end
34
+
35
+ # source://globalid//lib/global_id/global_id.rb#68
36
+ def hash; end
37
+
38
+ # source://globalid//lib/global_id/global_id.rb#52
39
+ def model_class; end
40
+
41
+ # source://globalid//lib/global_id/global_id.rb#42
42
+ def model_id(*_arg0, **_arg1, &_arg2); end
43
+
44
+ # source://globalid//lib/global_id/global_id.rb#42
45
+ def model_name(*_arg0, **_arg1, &_arg2); end
46
+
47
+ # source://globalid//lib/global_id/global_id.rb#42
48
+ def params(*_arg0, **_arg1, &_arg2); end
49
+
50
+ # source://globalid//lib/global_id/global_id.rb#72
51
+ def to_param; end
52
+
53
+ # source://globalid//lib/global_id/global_id.rb#42
54
+ def to_s(*_arg0, **_arg1, &_arg2); end
55
+
56
+ # Returns the value of attribute uri.
57
+ #
58
+ # source://globalid//lib/global_id/global_id.rb#41
59
+ def uri; end
60
+
61
+ class << self
62
+ # Returns the value of attribute app.
63
+ #
64
+ # source://globalid//lib/global_id/global_id.rb#9
65
+ def app; end
66
+
67
+ # source://globalid//lib/global_id/global_id.rb#31
68
+ def app=(app); end
69
+
70
+ # source://globalid//lib/global_id/global_id.rb#11
71
+ def create(model, options = T.unsafe(nil)); end
72
+
73
+ # source://globalid//lib/global_id.rb#20
74
+ def deprecator; end
75
+
76
+ # source://globalid//lib/global_id.rb#15
77
+ def eager_load!; end
78
+
79
+ # source://globalid//lib/global_id/global_id.rb#21
80
+ def find(gid, options = T.unsafe(nil)); end
81
+
82
+ # source://globalid//lib/global_id/global_id.rb#25
83
+ def parse(gid, options = T.unsafe(nil)); end
84
+
85
+ private
86
+
87
+ # source://globalid//lib/global_id/global_id.rb#36
88
+ def parse_encoded_gid(gid, options); end
89
+ end
90
+ end
91
+
92
+ # Mix `GlobalID::Identification` into any model with a `#find(id)` class
93
+ # method. Support is automatically included in Active Record.
94
+ #
95
+ # class Person
96
+ # include ActiveModel::Model
97
+ # include GlobalID::Identification
98
+ #
99
+ # attr_accessor :id
100
+ #
101
+ # def self.find(id)
102
+ # new id: id
103
+ # end
104
+ #
105
+ # def ==(other)
106
+ # id == other.try(:id)
107
+ # end
108
+ # end
109
+ #
110
+ # person_gid = Person.find(1).to_global_id
111
+ # # => #<GlobalID ...
112
+ # person_gid.uri
113
+ # # => #<URI ...
114
+ # person_gid.to_s
115
+ # # => "gid://app/Person/1"
116
+ # GlobalID::Locator.locate person_gid
117
+ # # => #<Person:0x007fae94bf6298 @id="1">
118
+ #
119
+ # source://globalid//lib/global_id/identification.rb#28
120
+ module GlobalID::Identification
121
+ # Returns the Global ID of the model.
122
+ #
123
+ # model = Person.new id: 1
124
+ # global_id = model.to_global_id
125
+ # global_id.modal_class # => Person
126
+ # global_id.modal_id # => "1"
127
+ # global_id.to_param # => "Z2lkOi8vYm9yZGZvbGlvL1BlcnNvbi8x"
128
+ #
129
+ # source://globalid//lib/global_id/identification.rb#37
130
+ def to_gid(options = T.unsafe(nil)); end
131
+
132
+ # Returns the Global ID parameter of the model.
133
+ #
134
+ # model = Person.new id: 1
135
+ # model.to_gid_param # => ""Z2lkOi8vYm9yZGZvbGlvL1BlcnNvbi8x"
136
+ #
137
+ # source://globalid//lib/global_id/identification.rb#46
138
+ def to_gid_param(options = T.unsafe(nil)); end
139
+
140
+ # Returns the Global ID of the model.
141
+ #
142
+ # model = Person.new id: 1
143
+ # global_id = model.to_global_id
144
+ # global_id.modal_class # => Person
145
+ # global_id.modal_id # => "1"
146
+ # global_id.to_param # => "Z2lkOi8vYm9yZGZvbGlvL1BlcnNvbi8x"
147
+ #
148
+ # source://globalid//lib/global_id/identification.rb#37
149
+ def to_global_id(options = T.unsafe(nil)); end
150
+
151
+ # Returns the Signed Global ID of the model.
152
+ # Signed Global IDs ensure that the data hasn't been tampered with.
153
+ #
154
+ # model = Person.new id: 1
155
+ # signed_global_id = model.to_signed_global_id
156
+ # signed_global_id.modal_class # => Person
157
+ # signed_global_id.modal_id # => "1"
158
+ # signed_global_id.to_param # => "BAh7CEkiCGdpZAY6BkVUSSIiZ2..."
159
+ #
160
+ # ==== Expiration
161
+ #
162
+ # Signed Global IDs can expire some time in the future. This is useful if
163
+ # there's a resource people shouldn't have indefinite access to, like a
164
+ # share link.
165
+ #
166
+ # expiring_sgid = Document.find(5).to_sgid(expires_in: 2.hours, for: 'sharing')
167
+ # # => #<SignedGlobalID:0x008fde45df8937 ...>
168
+ # # Within 2 hours...
169
+ # GlobalID::Locator.locate_signed(expiring_sgid.to_s, for: 'sharing')
170
+ # # => #<Document:0x007fae94bf6298 @id="5">
171
+ # # More than 2 hours later...
172
+ # GlobalID::Locator.locate_signed(expiring_sgid.to_s, for: 'sharing')
173
+ # # => nil
174
+ #
175
+ # In Rails, an auto-expiry of 1 month is set by default.
176
+ #
177
+ # You need to explicitly pass `expires_in: nil` to generate a permanent
178
+ # SGID that will not expire,
179
+ #
180
+ # never_expiring_sgid = Document.find(5).to_sgid(expires_in: nil)
181
+ # # => #<SignedGlobalID:0x008fde45df8937 ...>
182
+ #
183
+ # # Any time later...
184
+ # GlobalID::Locator.locate_signed never_expiring_sgid
185
+ # # => #<Document:0x007fae94bf6298 @id="5">
186
+ #
187
+ # It's also possible to pass a specific expiry time
188
+ #
189
+ # explicit_expiring_sgid = SecretAgentMessage.find(5).to_sgid(expires_at: Time.now.advance(hours: 1))
190
+ # # => #<SignedGlobalID:0x008fde45df8937 ...>
191
+ #
192
+ # # 1 hour later...
193
+ # GlobalID::Locator.locate_signed explicit_expiring_sgid.to_s
194
+ # # => nil
195
+ #
196
+ # Note that an explicit `:expires_at` takes precedence over a relative `:expires_in`.
197
+ #
198
+ # ==== Purpose
199
+ #
200
+ # You can even bump the security up some more by explaining what purpose a
201
+ # Signed Global ID is for. In this way evildoers can't reuse a sign-up
202
+ # form's SGID on the login page. For example.
203
+ #
204
+ # signup_person_sgid = Person.find(1).to_sgid(for: 'signup_form')
205
+ # # => #<SignedGlobalID:0x007fea1984b520
206
+ # GlobalID::Locator.locate_signed(signup_person_sgid.to_s, for: 'signup_form')
207
+ # => #<Person:0x007fae94bf6298 @id="1">
208
+ #
209
+ # source://globalid//lib/global_id/identification.rb#107
210
+ def to_sgid(options = T.unsafe(nil)); end
211
+
212
+ # Returns the Signed Global ID parameter.
213
+ #
214
+ # model = Person.new id: 1
215
+ # model.to_sgid_param # => "BAh7CEkiCGdpZAY6BkVUSSIiZ2..."
216
+ #
217
+ # source://globalid//lib/global_id/identification.rb#116
218
+ def to_sgid_param(options = T.unsafe(nil)); end
219
+
220
+ # Returns the Signed Global ID of the model.
221
+ # Signed Global IDs ensure that the data hasn't been tampered with.
222
+ #
223
+ # model = Person.new id: 1
224
+ # signed_global_id = model.to_signed_global_id
225
+ # signed_global_id.modal_class # => Person
226
+ # signed_global_id.modal_id # => "1"
227
+ # signed_global_id.to_param # => "BAh7CEkiCGdpZAY6BkVUSSIiZ2..."
228
+ #
229
+ # ==== Expiration
230
+ #
231
+ # Signed Global IDs can expire some time in the future. This is useful if
232
+ # there's a resource people shouldn't have indefinite access to, like a
233
+ # share link.
234
+ #
235
+ # expiring_sgid = Document.find(5).to_sgid(expires_in: 2.hours, for: 'sharing')
236
+ # # => #<SignedGlobalID:0x008fde45df8937 ...>
237
+ # # Within 2 hours...
238
+ # GlobalID::Locator.locate_signed(expiring_sgid.to_s, for: 'sharing')
239
+ # # => #<Document:0x007fae94bf6298 @id="5">
240
+ # # More than 2 hours later...
241
+ # GlobalID::Locator.locate_signed(expiring_sgid.to_s, for: 'sharing')
242
+ # # => nil
243
+ #
244
+ # In Rails, an auto-expiry of 1 month is set by default.
245
+ #
246
+ # You need to explicitly pass `expires_in: nil` to generate a permanent
247
+ # SGID that will not expire,
248
+ #
249
+ # never_expiring_sgid = Document.find(5).to_sgid(expires_in: nil)
250
+ # # => #<SignedGlobalID:0x008fde45df8937 ...>
251
+ #
252
+ # # Any time later...
253
+ # GlobalID::Locator.locate_signed never_expiring_sgid
254
+ # # => #<Document:0x007fae94bf6298 @id="5">
255
+ #
256
+ # It's also possible to pass a specific expiry time
257
+ #
258
+ # explicit_expiring_sgid = SecretAgentMessage.find(5).to_sgid(expires_at: Time.now.advance(hours: 1))
259
+ # # => #<SignedGlobalID:0x008fde45df8937 ...>
260
+ #
261
+ # # 1 hour later...
262
+ # GlobalID::Locator.locate_signed explicit_expiring_sgid.to_s
263
+ # # => nil
264
+ #
265
+ # Note that an explicit `:expires_at` takes precedence over a relative `:expires_in`.
266
+ #
267
+ # ==== Purpose
268
+ #
269
+ # You can even bump the security up some more by explaining what purpose a
270
+ # Signed Global ID is for. In this way evildoers can't reuse a sign-up
271
+ # form's SGID on the login page. For example.
272
+ #
273
+ # signup_person_sgid = Person.find(1).to_sgid(for: 'signup_form')
274
+ # # => #<SignedGlobalID:0x007fea1984b520
275
+ # GlobalID::Locator.locate_signed(signup_person_sgid.to_s, for: 'signup_form')
276
+ # => #<Person:0x007fae94bf6298 @id="1">
277
+ #
278
+ # source://globalid//lib/global_id/identification.rb#107
279
+ def to_signed_global_id(options = T.unsafe(nil)); end
280
+ end
281
+
282
+ # source://globalid//lib/global_id/locator.rb#4
283
+ module GlobalID::Locator
284
+ class << self
285
+ # Takes either a GlobalID or a string that can be turned into a GlobalID
286
+ #
287
+ # Options:
288
+ # * <tt>:includes</tt> - A Symbol, Array, Hash or combination of them.
289
+ # The same structure you would pass into a +includes+ method of Active Record.
290
+ # If present, locate will load all the relationships specified here.
291
+ # See https://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations.
292
+ # * <tt>:only</tt> - A class, module or Array of classes and/or modules that are
293
+ # allowed to be located. Passing one or more classes limits instances of returned
294
+ # classes to those classes or their subclasses. Passing one or more modules in limits
295
+ # instances of returned classes to those including that module. If no classes or
296
+ # modules match, +nil+ is returned.
297
+ #
298
+ # source://globalid//lib/global_id/locator.rb#20
299
+ def locate(gid, options = T.unsafe(nil)); end
300
+
301
+ # Takes an array of GlobalIDs or strings that can be turned into a GlobalIDs.
302
+ # All GlobalIDs must belong to the same app, as they will be located using
303
+ # the same locator using its locate_many method.
304
+ #
305
+ # By default the GlobalIDs will be located using Model.find(array_of_ids), so the
306
+ # models must respond to that finder signature.
307
+ #
308
+ # This approach will efficiently call only one #find (or #where(id: id), when using ignore_missing)
309
+ # per model class, but still interpolate the results to match the order in which the gids were passed.
310
+ #
311
+ # Options:
312
+ # * <tt>:includes</tt> - A Symbol, Array, Hash or combination of them
313
+ # The same structure you would pass into a includes method of Active Record.
314
+ # @see https://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations
315
+ # If present, locate_many will load all the relationships specified here.
316
+ # Note: It only works if all the gids models have that relationships.
317
+ # * <tt>:only</tt> - A class, module or Array of classes and/or modules that are
318
+ # allowed to be located. Passing one or more classes limits instances of returned
319
+ # classes to those classes or their subclasses. Passing one or more modules in limits
320
+ # instances of returned classes to those including that module. If no classes or
321
+ # modules match, +nil+ is returned.
322
+ # * <tt>:ignore_missing</tt> - By default, locate_many will call #find on the model to locate the
323
+ # ids extracted from the GIDs. In Active Record (and other data stores following the same pattern),
324
+ # #find will raise an exception if a named ID can't be found. When you set this option to true,
325
+ # we will use #where(id: ids) instead, which does not raise on missing records.
326
+ #
327
+ # source://globalid//lib/global_id/locator.rb#60
328
+ def locate_many(gids, options = T.unsafe(nil)); end
329
+
330
+ # Takes an array of SignedGlobalIDs or strings that can be turned into a SignedGlobalIDs.
331
+ # The SignedGlobalIDs are located using Model.find(array_of_ids), so the models must respond to
332
+ # that finder signature.
333
+ #
334
+ # This approach will efficiently call only one #find per model class, but still interpolate
335
+ # the results to match the order in which the gids were passed.
336
+ #
337
+ # Options:
338
+ # * <tt>:includes</tt> - A Symbol, Array, Hash or combination of them
339
+ # The same structure you would pass into a includes method of Active Record.
340
+ # @see https://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations
341
+ # If present, locate_many_signed will load all the relationships specified here.
342
+ # Note: It only works if all the gids models have that relationships.
343
+ # * <tt>:only</tt> - A class, module or Array of classes and/or modules that are
344
+ # allowed to be located. Passing one or more classes limits instances of returned
345
+ # classes to those classes or their subclasses. Passing one or more modules in limits
346
+ # instances of returned classes to those including that module. If no classes or
347
+ # modules match, +nil+ is returned.
348
+ #
349
+ # source://globalid//lib/global_id/locator.rb#103
350
+ def locate_many_signed(sgids, options = T.unsafe(nil)); end
351
+
352
+ # Takes either a SignedGlobalID or a string that can be turned into a SignedGlobalID
353
+ #
354
+ # Options:
355
+ # * <tt>:includes</tt> - A Symbol, Array, Hash or combination of them
356
+ # The same structure you would pass into a includes method of Active Record.
357
+ # @see https://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations
358
+ # If present, locate_signed will load all the relationships specified here.
359
+ # * <tt>:only</tt> - A class, module or Array of classes and/or modules that are
360
+ # allowed to be located. Passing one or more classes limits instances of returned
361
+ # classes to those classes or their subclasses. Passing one or more modules in limits
362
+ # instances of returned classes to those including that module. If no classes or
363
+ # modules match, +nil+ is returned.
364
+ #
365
+ # source://globalid//lib/global_id/locator.rb#81
366
+ def locate_signed(sgid, options = T.unsafe(nil)); end
367
+
368
+ # Tie a locator to an app.
369
+ # Useful when different apps collaborate and reference each others' Global IDs.
370
+ #
371
+ # The locator can be either a block or a class.
372
+ #
373
+ # Using a block:
374
+ #
375
+ # GlobalID::Locator.use :foo do |gid, options|
376
+ # FooRemote.const_get(gid.model_name).find(gid.model_id)
377
+ # end
378
+ #
379
+ # Using a class:
380
+ #
381
+ # GlobalID::Locator.use :bar, BarLocator.new
382
+ #
383
+ # class BarLocator
384
+ # def locate(gid, options = {})
385
+ # @search_client.search name: gid.model_name, id: gid.model_id
386
+ # end
387
+ # end
388
+ #
389
+ # @raise [ArgumentError]
390
+ #
391
+ # source://globalid//lib/global_id/locator.rb#127
392
+ def use(app, locator = T.unsafe(nil), &locator_block); end
393
+
394
+ private
395
+
396
+ # @return [Boolean]
397
+ #
398
+ # source://globalid//lib/global_id/locator.rb#140
399
+ def find_allowed?(model_class, only = T.unsafe(nil)); end
400
+
401
+ # source://globalid//lib/global_id/locator.rb#136
402
+ def locator_for(gid); end
403
+
404
+ # source://globalid//lib/global_id/locator.rb#148
405
+ def normalize_app(app); end
406
+
407
+ # source://globalid//lib/global_id/locator.rb#144
408
+ def parse_allowed(gids, only = T.unsafe(nil)); end
409
+ end
410
+ end
411
+
412
+ # source://globalid//lib/global_id/locator.rb#156
413
+ class GlobalID::Locator::BaseLocator
414
+ # source://globalid//lib/global_id/locator.rb#157
415
+ def locate(gid, options = T.unsafe(nil)); end
416
+
417
+ # source://globalid//lib/global_id/locator.rb#165
418
+ def locate_many(gids, options = T.unsafe(nil)); end
419
+
420
+ private
421
+
422
+ # source://globalid//lib/global_id/locator.rb#189
423
+ def find_records(model_class, ids, options); end
424
+
425
+ # @return [Boolean]
426
+ #
427
+ # source://globalid//lib/global_id/locator.rb#199
428
+ def model_id_is_valid?(gid); end
429
+
430
+ # source://globalid//lib/global_id/locator.rb#203
431
+ def primary_key(model_class); end
432
+ end
433
+
434
+ # source://globalid//lib/global_id/locator.rb#228
435
+ class GlobalID::Locator::BlockLocator
436
+ # @return [BlockLocator] a new instance of BlockLocator
437
+ #
438
+ # source://globalid//lib/global_id/locator.rb#229
439
+ def initialize(block); end
440
+
441
+ # source://globalid//lib/global_id/locator.rb#233
442
+ def locate(gid, options = T.unsafe(nil)); end
443
+
444
+ # source://globalid//lib/global_id/locator.rb#237
445
+ def locate_many(gids, options = T.unsafe(nil)); end
446
+ end
447
+
448
+ # source://globalid//lib/global_id/locator.rb#226
449
+ GlobalID::Locator::DEFAULT_LOCATOR = T.let(T.unsafe(nil), GlobalID::Locator::UnscopedLocator)
450
+
451
+ # source://globalid//lib/global_id/locator.rb#5
452
+ class GlobalID::Locator::InvalidModelIdError < ::StandardError; end
453
+
454
+ # source://globalid//lib/global_id/locator.rb#208
455
+ class GlobalID::Locator::UnscopedLocator < ::GlobalID::Locator::BaseLocator
456
+ # source://globalid//lib/global_id/locator.rb#209
457
+ def locate(gid, options = T.unsafe(nil)); end
458
+
459
+ private
460
+
461
+ # source://globalid//lib/global_id/locator.rb#214
462
+ def find_records(model_class, ids, options); end
463
+
464
+ # source://globalid//lib/global_id/locator.rb#218
465
+ def unscoped(model_class); end
466
+ end
467
+
468
+ # source://globalid//lib/global_id/railtie.rb#12
469
+ class GlobalID::Railtie < ::Rails::Railtie; end
470
+
471
+ # source://globalid//lib/global_id/verifier.rb#4
472
+ class GlobalID::Verifier < ::ActiveSupport::MessageVerifier
473
+ private
474
+
475
+ # source://globalid//lib/global_id/verifier.rb#10
476
+ def decode(data, **_arg1); end
477
+
478
+ # source://globalid//lib/global_id/verifier.rb#6
479
+ def encode(data, **_arg1); end
480
+ end
481
+
482
+ # source://globalid//lib/global_id/signed_global_id.rb#4
483
+ class SignedGlobalID < ::GlobalID
484
+ # @return [SignedGlobalID] a new instance of SignedGlobalID
485
+ #
486
+ # source://globalid//lib/global_id/signed_global_id.rb#59
487
+ def initialize(gid, options = T.unsafe(nil)); end
488
+
489
+ # source://globalid//lib/global_id/signed_global_id.rb#71
490
+ def ==(other); end
491
+
492
+ # Returns the value of attribute expires_at.
493
+ #
494
+ # source://globalid//lib/global_id/signed_global_id.rb#57
495
+ def expires_at; end
496
+
497
+ # source://globalid//lib/global_id/signed_global_id.rb#75
498
+ def inspect; end
499
+
500
+ # Returns the value of attribute purpose.
501
+ #
502
+ # source://globalid//lib/global_id/signed_global_id.rb#57
503
+ def purpose; end
504
+
505
+ # source://globalid//lib/global_id/signed_global_id.rb#66
506
+ def to_param; end
507
+
508
+ # source://globalid//lib/global_id/signed_global_id.rb#66
509
+ def to_s; end
510
+
511
+ # Returns the value of attribute verifier.
512
+ #
513
+ # source://globalid//lib/global_id/signed_global_id.rb#57
514
+ def verifier; end
515
+
516
+ private
517
+
518
+ # source://globalid//lib/global_id/signed_global_id.rb#80
519
+ def pick_expiration(options); end
520
+
521
+ class << self
522
+ # Returns the value of attribute expires_in.
523
+ #
524
+ # source://globalid//lib/global_id/signed_global_id.rb#8
525
+ def expires_in; end
526
+
527
+ # Sets the attribute expires_in
528
+ #
529
+ # @param value the value to set the attribute expires_in to.
530
+ #
531
+ # source://globalid//lib/global_id/signed_global_id.rb#8
532
+ def expires_in=(_arg0); end
533
+
534
+ # source://globalid//lib/global_id/signed_global_id.rb#10
535
+ def parse(sgid, options = T.unsafe(nil)); end
536
+
537
+ # source://globalid//lib/global_id/signed_global_id.rb#24
538
+ def pick_purpose(options); end
539
+
540
+ # Grab the verifier from options and fall back to SignedGlobalID.verifier.
541
+ # Raise ArgumentError if neither is available.
542
+ #
543
+ # source://globalid//lib/global_id/signed_global_id.rb#16
544
+ def pick_verifier(options); end
545
+
546
+ # Returns the value of attribute verifier.
547
+ #
548
+ # source://globalid//lib/global_id/signed_global_id.rb#8
549
+ def verifier; end
550
+
551
+ # Sets the attribute verifier
552
+ #
553
+ # @param value the value to set the attribute verifier to.
554
+ #
555
+ # source://globalid//lib/global_id/signed_global_id.rb#8
556
+ def verifier=(_arg0); end
557
+
558
+ private
559
+
560
+ # source://globalid//lib/global_id/signed_global_id.rb#50
561
+ def raise_if_expired(expires_at); end
562
+
563
+ # source://globalid//lib/global_id/signed_global_id.rb#29
564
+ def verify(sgid, options); end
565
+
566
+ # source://globalid//lib/global_id/signed_global_id.rb#40
567
+ def verify_with_legacy_self_validated_metadata(sgid, options); end
568
+
569
+ # source://globalid//lib/global_id/signed_global_id.rb#34
570
+ def verify_with_verifier_validated_metadata(sgid, options); end
571
+ end
572
+ end
573
+
574
+ # source://globalid//lib/global_id/signed_global_id.rb#5
575
+ class SignedGlobalID::ExpiredMessage < ::StandardError; end
576
+
577
+ # source://globalid//lib/global_id/uri/gid.rb#6
578
+ module URI
579
+ include ::URI::RFC2396_REGEXP
580
+ end
581
+
582
+ # source://globalid//lib/global_id/uri/gid.rb#7
583
+ class URI::GID < ::URI::Generic
584
+ # URI::GID encodes an app unique reference to a specific model as an URI.
585
+ # It has the components: app name, model class name, model id and params.
586
+ # All components except params are required.
587
+ #
588
+ # The URI format looks like "gid://app/model_name/model_id".
589
+ #
590
+ # Simple metadata can be stored in params. Useful if your app has multiple databases,
591
+ # for instance, and you need to find out which one to look up the model in.
592
+ #
593
+ # Params will be encoded as query parameters like so
594
+ # "gid://app/model_name/model_id?key=value&another_key=another_value".
595
+ #
596
+ # Params won't be typecast, they're always strings.
597
+ # For convenience params can be accessed using both strings and symbol keys.
598
+ #
599
+ # Multi value params aren't supported. Any params encoding multiple values under
600
+ # the same key will return only the last value. For example, when decoding
601
+ # params like "key=first_value&key=last_value" key will only be last_value.
602
+ #
603
+ # Read the documentation for +parse+, +create+ and +build+ for more.
604
+ #
605
+ # source://uri/0.12.1/uri/generic.rb#243
606
+ def app; end
607
+
608
+ # source://globalid//lib/global_id/uri/gid.rb#107
609
+ def deconstruct_keys(_keys); end
610
+
611
+ # Returns the value of attribute model_id.
612
+ #
613
+ # source://globalid//lib/global_id/uri/gid.rb#29
614
+ def model_id; end
615
+
616
+ # Returns the value of attribute model_name.
617
+ #
618
+ # source://globalid//lib/global_id/uri/gid.rb#29
619
+ def model_name; end
620
+
621
+ # Returns the value of attribute params.
622
+ #
623
+ # source://globalid//lib/global_id/uri/gid.rb#29
624
+ def params; end
625
+
626
+ # source://globalid//lib/global_id/uri/gid.rb#102
627
+ def to_s; end
628
+
629
+ protected
630
+
631
+ # Ruby 2.2 uses #query= instead of #set_query
632
+ #
633
+ # source://globalid//lib/global_id/uri/gid.rb#118
634
+ def query=(query); end
635
+
636
+ # source://globalid//lib/global_id/uri/gid.rb#129
637
+ def set_params(params); end
638
+
639
+ # source://globalid//lib/global_id/uri/gid.rb#112
640
+ def set_path(path); end
641
+
642
+ # Ruby 2.1 or less uses #set_query to assign the query
643
+ #
644
+ # source://globalid//lib/global_id/uri/gid.rb#124
645
+ def set_query(query); end
646
+
647
+ private
648
+
649
+ # source://globalid//lib/global_id/uri/gid.rb#136
650
+ def check_host(host); end
651
+
652
+ # source://globalid//lib/global_id/uri/gid.rb#141
653
+ def check_path(path); end
654
+
655
+ # source://globalid//lib/global_id/uri/gid.rb#146
656
+ def check_scheme(scheme); end
657
+
658
+ # source://globalid//lib/global_id/uri/gid.rb#195
659
+ def parse_query_params(query); end
660
+
661
+ # source://globalid//lib/global_id/uri/gid.rb#154
662
+ def set_model_components(path, validate = T.unsafe(nil)); end
663
+
664
+ # @raise [URI::InvalidComponentError]
665
+ #
666
+ # source://globalid//lib/global_id/uri/gid.rb#174
667
+ def validate_component(component); end
668
+
669
+ # @raise [InvalidModelIdError]
670
+ #
671
+ # source://globalid//lib/global_id/uri/gid.rb#188
672
+ def validate_model_id(model_id_part); end
673
+
674
+ # @raise [MissingModelIdError]
675
+ #
676
+ # source://globalid//lib/global_id/uri/gid.rb#181
677
+ def validate_model_id_section(model_id, model_name); end
678
+
679
+ class << self
680
+ # Create a new URI::GID from components with argument check.
681
+ #
682
+ # The allowed components are app, model_name, model_id and params, which can be
683
+ # either a hash or an array.
684
+ #
685
+ # Using a hash:
686
+ #
687
+ # URI::GID.build(app: 'bcx', model_name: 'Person', model_id: '1', params: { key: 'value' })
688
+ #
689
+ # Using an array, the arguments must be in order [app, model_name, model_id, params]:
690
+ #
691
+ # URI::GID.build(['bcx', 'Person', '1', key: 'value'])
692
+ #
693
+ # source://globalid//lib/global_id/uri/gid.rb#88
694
+ def build(args); end
695
+
696
+ # Shorthand to build a URI::GID from an app, a model and optional params.
697
+ #
698
+ # URI::GID.create('bcx', Person.find(5), database: 'superhumans')
699
+ #
700
+ # source://globalid//lib/global_id/uri/gid.rb#72
701
+ def create(app, model, params = T.unsafe(nil)); end
702
+
703
+ # Create a new URI::GID by parsing a gid string with argument check.
704
+ #
705
+ # URI::GID.parse 'gid://bcx/Person/1?key=value'
706
+ #
707
+ # This differs from URI() and URI.parse which do not check arguments.
708
+ #
709
+ # URI('gid://bcx') # => URI::GID instance
710
+ # URI.parse('gid://bcx') # => URI::GID instance
711
+ # URI::GID.parse('gid://bcx/') # => raises URI::InvalidComponentError
712
+ #
713
+ # source://globalid//lib/global_id/uri/gid.rb#64
714
+ def parse(uri); end
715
+
716
+ # Validates +app+'s as URI hostnames containing only alphanumeric characters
717
+ # and hyphens. An ArgumentError is raised if +app+ is invalid.
718
+ #
719
+ # URI::GID.validate_app('bcx') # => 'bcx'
720
+ # URI::GID.validate_app('foo-bar') # => 'foo-bar'
721
+ #
722
+ # URI::GID.validate_app(nil) # => ArgumentError
723
+ # URI::GID.validate_app('foo/bar') # => ArgumentError
724
+ #
725
+ # source://globalid//lib/global_id/uri/gid.rb#48
726
+ def validate_app(app); end
727
+ end
728
+ end
729
+
730
+ # source://globalid//lib/global_id/uri/gid.rb#134
731
+ URI::GID::COMPONENT = T.let(T.unsafe(nil), Array)
732
+
733
+ # source://globalid//lib/global_id/uri/gid.rb#37
734
+ URI::GID::COMPOSITE_MODEL_ID_DELIMITER = T.let(T.unsafe(nil), String)
735
+
736
+ # Maximum size of a model id segment
737
+ #
738
+ # source://globalid//lib/global_id/uri/gid.rb#36
739
+ URI::GID::COMPOSITE_MODEL_ID_MAX_SIZE = T.let(T.unsafe(nil), Integer)
740
+
741
+ # source://globalid//lib/global_id/uri/gid.rb#33
742
+ class URI::GID::InvalidModelIdError < ::URI::InvalidComponentError; end
743
+
744
+ # Raised when creating a Global ID for a model without an id
745
+ #
746
+ # source://globalid//lib/global_id/uri/gid.rb#32
747
+ class URI::GID::MissingModelIdError < ::URI::InvalidComponentError; end
748
+
749
+ class URI::WSS < ::URI::WS; end