sorbet-runtime 0.5.5345 → 0.5.5351

Sign up to get free protection for your applications and to get access to all the features.
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: d8b04ee617b98feffa4673dbeec57d444637f935af381c55c90ef6cc149ed2e3
4
- data.tar.gz: 5e1615453883ed7ad2cee1c025969fc9d2b82009146b8355374853b356e58fa6
3
+ metadata.gz: 7c936c7c56f3d2744cc9eadef4a09fda763da10f7aade1bc9ea14f79d6fc06ee
4
+ data.tar.gz: 895909d805985f223b55e51c7eb747c72a8b22e3edd1368bb1c499e7bdd1762c
5
5
  SHA512:
6
- metadata.gz: e2804ccf5b8574b54ae855133c2c0f81f91dc2fc9de48fc4c2e59d4481bb8fd1986e225e00b7bf52db96cbd91e9b944cebcd2c12e8ef85170967f0bf7f963ef4
7
- data.tar.gz: 8a5845fac2082969d1b5ebc0720d5d0a95273bf988ce3bfc8d49fbca61eb068efe76da4a2d01a576b7e0b4898c8b1b01be85c26920c39723ba9539cd19507652
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.5345
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-06 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: []