typed_struct 0.1.1 → 0.1.2

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c314d5e68394fa4ae9465f421cd0d0a36c1b1aa08c011113a6be80236779fddb
4
- data.tar.gz: 9f29964aaee3d86cc0ba773cf54977d95ced2df7c8bb98955099e5681cd6bfd3
3
+ metadata.gz: 8b464562db650de5a4d3026ca8806d85b993c8f6bfcf3e86d1988c859432a427
4
+ data.tar.gz: a6d38114357f8657b675074a36cbfba6129695eb80bc1b9333219f241cc44b79
5
5
  SHA512:
6
- metadata.gz: dfd2ce5fac539dd38780925f2771476acdd71ffd18bb2945f65377f6603556764a38633a311b531a3c5e808dc89f5e93b7ab3ac3a6f3d82f7aa2f769d38d3294
7
- data.tar.gz: 9a39c71af23167b16280c61f0ff1ee1adcb7f01e7dd8e35a80433def24bfb7f3086dd14022f0bc69f54fb6a22b208e833671f0bf92b5ea368e3eac801f5735e5
6
+ metadata.gz: b280075f73bf18618ea3ab207b9d3f632928d69a364902b3374ab4b4a728ba791874247a7d36502fd4c83e00f980e4e35e7b777d8e80a40223377a207a03432c
7
+ data.tar.gz: 9ba0515a1401a4be3d0feaa4bd79fe1dee3c7d20c1d84990485c0eb411df88df16d3bb86a5703f13fca71299e925c6b0e157932a1691efdb10987be536cd1d2d
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- typed_struct (0.1.1)
4
+ typed_struct (0.1.2)
5
5
  rbs (~> 1.0)
6
6
 
7
7
  GEM
@@ -9,7 +9,7 @@ GEM
9
9
  specs:
10
10
  diff-lcs (1.4.4)
11
11
  rake (13.0.3)
12
- rbs (1.1.1)
12
+ rbs (1.5.1)
13
13
  rspec (3.10.0)
14
14
  rspec-core (~> 3.10.0)
15
15
  rspec-expectations (~> 3.10.0)
data/README.md CHANGED
@@ -9,6 +9,8 @@ require 'typed_struct' # unless using rails
9
9
 
10
10
  User = TypedStruct.new name: String, # an instance of String
11
11
  age: Integer, # an instance of Integer
12
+ username: /\w{4,}/, # must match given Regexp
13
+ rating: (0..5), # must be value from 0 to 5
12
14
  type: "User", # must by a string with value "User"
13
15
  interests: Rbs("Array[String]"), # an RBS generic type (an Array of Strings)
14
16
  preferences: Rbs("{ opt_out_of_emails: bool, additional: untyped }") # RBS record type
@@ -17,7 +19,9 @@ clive = User.new name: "Clive",
17
19
  age: 22,
18
20
  interests: %w[surfing skiing],
19
21
  preferences: { opt_out_of_emails: true, additional: { preferred_theme: :dark } },
20
- type: "User"
22
+ type: "User",
23
+ rating: 4,
24
+ username: "cliveabc"
21
25
 
22
26
  clive.age # 22
23
27
  clive.age = '22' # => Error
@@ -27,7 +31,7 @@ clive.freeze # no more changes can be made
27
31
 
28
32
  Note that a `TypedStruct` inherits from `Struct` directly, so anything from `Struct` is also available in `TypedStruct` - see [Struct docs](https://ruby-doc.org/core-3.0.1/Struct.html) for more info.
29
33
 
30
- **See [RBS reference](https://github.com/ruby/rbs/blob/3c046c77c3006211a1a14eedc35221ac4198f788/docs/syntax.md) for my info on writing RBS types**
34
+ **See [RBS reference](https://github.com/ruby/rbs/blob/3c046c77c3006211a1a14eedc35221ac4198f788/docs/syntax.md) for more info on writing RBS types**
31
35
 
32
36
  ## Installation
33
37
 
@@ -53,7 +57,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
53
57
 
54
58
  ## Contributing
55
59
 
56
- Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/typed_struct.
60
+ Bug reports and pull requests are welcome on GitHub at https://github.com/johansenja/typed_struct.
57
61
 
58
62
  ## License
59
63
 
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class TypedStruct < Struct
4
- VERSION = "0.1.1"
4
+ VERSION = "0.1.2"
5
5
  end
data/lib/typed_struct.rb CHANGED
@@ -7,8 +7,20 @@ require "rbs"
7
7
  class TypedStruct < Struct
8
8
  include TypeChecking
9
9
 
10
+ OVERRIDING_NATIVE_METHOD_MSG =
11
+ "*** WARNING *** property %s overrides a native method in #{name}. Consider using something else (called from %s)".freeze
12
+
13
+ # any methods which are able to be overridden
14
+ alias_method :__class__, :class
15
+
10
16
  class << self
11
17
  def new(**properties)
18
+ properties.each_key do |prop|
19
+ if method_defined?(prop)
20
+ $stdout.puts OVERRIDING_NATIVE_METHOD_MSG % [prop.inspect, caller(3).first]
21
+ end
22
+ end
23
+
12
24
  super(*properties.keys, keyword_init: true).tap do |klass|
13
25
  klass.class.instance_eval do
14
26
  include TypeChecking
@@ -38,7 +50,7 @@ class TypedStruct < Struct
38
50
  end
39
51
 
40
52
  def initialize(**attrs)
41
- opts = self.class.options
53
+ opts = self.__class__.options
42
54
  opts[:types].each do |prop, expected_type|
43
55
  passed_value = attrs[prop]
44
56
  next if val_is_type? passed_value, expected_type
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: typed_struct
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Joseph Johansen
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-06-21 00:00:00.000000000 Z
11
+ date: 2021-09-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rbs