sorbet-runtime 0.5.5337 → 0.5.5351

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 (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/types/enum.rb +18 -3
  3. metadata +30 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 0e42ba5c330c96f3e4cdc1c7c39ec2fa65dac48908d67dbf3a05636556eca514
4
- data.tar.gz: f5d3718465e67e20290983c53ab2cd8be11cdc033ec6906ba511bbddc555fac9
3
+ metadata.gz: 7c936c7c56f3d2744cc9eadef4a09fda763da10f7aade1bc9ea14f79d6fc06ee
4
+ data.tar.gz: 895909d805985f223b55e51c7eb747c72a8b22e3edd1368bb1c499e7bdd1762c
5
5
  SHA512:
6
- metadata.gz: 999b57390a8c92cd849b1fcd40fd3aeb39836d18fef2fc8a589b811d7cf87b9137f4e6c8de26db828c0e62e870c936d517d295161ab4b51c3d2ca7fe5970940f
7
- data.tar.gz: 32e9a0c847a96d6ceb942e093fa25d449e1eae9cbada8175bb89091fd1c350ed9f6c21a5d0f8b6dfa9b9159ede4f9f178dfc331c6433c5b3353db32ef16bea2d
6
+ metadata.gz: 5190c974d7f15eae95dd0b334d7cf9ef829d341d76e5594467afa3d0a1da3016782425a205ab11292631dfba47e8c11fff3141799668008f2b9d27238740260d
7
+ data.tar.gz: 401e1dfbf1daa4d71785377ef574343b367a2f84939c6944fa07c7f265935864fae5af3569c51e364efb07209d15d91a9d49162a0385b0b4b2f472a0ec5bc4a6
data/lib/types/enum.rb CHANGED
@@ -261,6 +261,7 @@ class T::Enum
261
261
  serialized_val = serialized_val.frozen? ? serialized_val : serialized_val.dup.freeze
262
262
  @serialized_val = T.let(serialized_val, T.nilable(SerializedVal))
263
263
  @const_name = T.let(nil, T.nilable(Symbol))
264
+ self.class._register_instance(self)
264
265
  end
265
266
 
266
267
  sig {returns(NilClass).checked(:never)}
@@ -298,6 +299,13 @@ class T::Enum
298
299
  @fully_initialized ||= false
299
300
  end
300
301
 
302
+ # Maintains the order in which values are defined
303
+ sig {params(instance: T.untyped).void}
304
+ def self._register_instance(instance)
305
+ @values ||= []
306
+ @values << T.cast(instance, T.attached_class)
307
+ end
308
+
301
309
  # Entrypoint for allowing people to register new enum values.
302
310
  # All enum values must be defined within this block.
303
311
  sig {params(blk: T.proc.void).void}
@@ -308,13 +316,14 @@ class T::Enum
308
316
 
309
317
  @started_initializing = true
310
318
 
319
+ @values = T.let(nil, T.nilable(T::Array[T.attached_class]))
320
+
311
321
  yield
312
322
 
313
- @values = T.let(nil, T.nilable(T::Array[T.attached_class]))
314
323
  @mapping = T.let(nil, T.nilable(T::Hash[SerializedVal, T.attached_class]))
324
+ @mapping = {}
315
325
 
316
326
  # Freeze the Enum class and bind the constant names into each of the instances.
317
- @mapping = {}
318
327
  self.constants(false).each do |const_name|
319
328
  instance = self.const_get(const_name, false)
320
329
  if !instance.is_a?(self)
@@ -329,8 +338,14 @@ class T::Enum
329
338
  end
330
339
  @mapping[serialized] = instance
331
340
  end
332
- @values = @mapping.values.sort.freeze
341
+ @values.freeze
333
342
  @mapping.freeze
343
+
344
+ orphaned_instances = T.must(@values) - @mapping.values
345
+ if !orphaned_instances.empty?
346
+ raise "Enum values must be assigned to constants: #{orphaned_instances.map {|v| v.instance_variable_get('@serialized_val')}}"
347
+ end
348
+
334
349
  @fully_initialized = true
335
350
  end
336
351
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sorbet-runtime
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.5337
4
+ version: 0.5.5351
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stripe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-02-05 00:00:00.000000000 Z
11
+ date: 2020-02-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -66,6 +66,34 @@ dependencies:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.1.5
69
+ - !ruby/object:Gem::Dependency
70
+ name: pry
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - ">="
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - ">="
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: pry-byebug
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
69
97
  description: Sorbet's runtime type checking component
70
98
  email:
71
99
  executables: []