sorbet-runtime 0.5.10152 → 0.5.10154

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/struct.rb +33 -0
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 45be788ace7c14dd772e993ae6111aa7aaa2a36ed378f817e2bd882a208bfb88
4
- data.tar.gz: 4098e4f276374b4819e22b7f507d8eb77f64fd52c6443fa6888b4c1e76f3bd4c
3
+ metadata.gz: d7a443545675cd9f8069f7fc672324139a9a94f9854b0f9330cbf832bf1b153c
4
+ data.tar.gz: fa4123846ae5706f7aaf95cde98aa2dfa14c90d6906c0ee4366b3f4994c5567a
5
5
  SHA512:
6
- metadata.gz: bb02b5ff161949c15229f3a1977b5fd1b77966272d5c98a0678905f95917a8a863b45472a38f7e199e8efcf3cb7f5ea84479170ee23cd37a881e85c5006a52cf
7
- data.tar.gz: 0a2efb385448828d53d54d4c1594d115023406350ef163685e853a00e8c5720f2c7b9f74cd3caf5d989d090e26f1d4b5d11f20b271f1b7e837f5761b4a07e71a
6
+ metadata.gz: 4c1060562e6f4af2c20d0af9adc4f38d7818426e75fc3a5971bb0f8e4822820765250ff938253e832dd073445043d9ec069fbb24dd7d5e4eb49d79cbfacf7401
7
+ data.tar.gz: 5b835a51c09600e451dc79dae53c73a4c2a6a78c622375c9d92abc0843bc57960bdc36794f1819f16d36324825bcfe209843f7f7eccc6137c4d69ab761427b22
data/lib/types/struct.rb CHANGED
@@ -16,3 +16,36 @@ class T::Struct < T::InexactStruct
16
16
  end
17
17
  end
18
18
  end
19
+
20
+ class T::ImmutableStruct < T::InexactStruct
21
+ extend T::Sig
22
+
23
+ def self.inherited(subclass)
24
+ super(subclass)
25
+
26
+ T::Private::ClassUtils.replace_method(subclass.singleton_class, :inherited) do |s|
27
+ super(s)
28
+ raise "#{self.name} is a subclass of T::ImmutableStruct and cannot be subclassed"
29
+ end
30
+ end
31
+
32
+ # Matches the one in WeakConstructor, but freezes the object
33
+ sig {params(hash: T::Hash[Symbol, T.untyped]).void.checked(:never)}
34
+ def initialize(hash={})
35
+ super
36
+
37
+ freeze
38
+ end
39
+
40
+ # Matches the signature in Props, but raises since this is an immutable struct and only const is allowed
41
+ sig {params(name: Symbol, cls: T.untyped, rules: T.untyped).void}
42
+ def self.prop(name, cls, rules={})
43
+ return super if (cls.is_a?(Hash) && cls[:immutable]) || rules[:immutable]
44
+
45
+ raise "Cannot use `prop` in #{self.name} because it is an immutable struct. Use `const` instead"
46
+ end
47
+
48
+ def with(changed_props)
49
+ raise "Cannot use `with` in #{self.class.name} because it is an immutable struct"
50
+ end
51
+ end
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.10152
4
+ version: 0.5.10154
5
5
  platform: ruby
6
6
  authors:
7
7
  - Stripe
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-07-12 00:00:00.000000000 Z
11
+ date: 2022-07-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest