polyfill-data 1.0.1 → 1.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 80e9e19a876c3cbc13a20fb597baa45c3a5a17938c20b6cee2853facfbba5381
4
- data.tar.gz: 9e64aea3b7c8a184a5887645ed4755268344a417a05676b96d51a6f9e16314ca
3
+ metadata.gz: 20b2218a1dd7298ead1e7bd8f08502558a2828f7aef9a5be33424084bd2d1c9b
4
+ data.tar.gz: fc1c0a53cab242883ffcae75f523a959e5a9b273c14f9e8fd334f5db78875802
5
5
  SHA512:
6
- metadata.gz: 25002a3731483f15d8a2ddb33ec15a3b023fe92188b29587b4c1155a364c759dd499cd60af701169440c1666852e72959c9403ef69505febb445db71c83feab9
7
- data.tar.gz: 869b512afad6f1e9b8c0d45300ebf69a0bee3ac95cd9fa5763c171866cbde0a0f89664da53fc2a5b840beb9f15950bb686ac85d905a2b4562164c70537fbdaf5
6
+ metadata.gz: 9291cd87f95c34b47e5a32f87bffa79f5eca7d0419c1fc741ee88ca3e3518a7435b63c827db569a2960b7fb3d516a408058db3a7fbde49f2dc1328d8dcc5109d
7
+ data.tar.gz: df56331c22ecc1ce85aaf5f2e743230b944f07298b1fdc248a337c3731628152f5fffc699d4eaa6ca3490767ff71ab23ea5cb98bbe9dd3f778fbe525c46e9807
checksums.yaml.gz.sig CHANGED
Binary file
data/CHANGELOG.md CHANGED
@@ -5,6 +5,20 @@ All notable changes to this project will be documented in this file.
5
5
  The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
6
6
  and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
7
7
 
8
+ ## 1.0.3
9
+
10
+ ### Fixed
11
+
12
+ - `new` correctly raises ArugmentErrors with incorrect arguments on Data subclasses
13
+
14
+ ## 1.0.2
15
+
16
+ ### Fixed
17
+
18
+ - freeze after initializing
19
+ - `to_a` removed
20
+ - `deconstruct` fixed to return array in order of members as defined
21
+
8
22
  ## 1.0.1
9
23
 
10
24
  ### Added
data/lib/data.rb CHANGED
@@ -23,18 +23,16 @@ else
23
23
  klass.define_singleton_method(:members) { args.map{ _1.intern } }
24
24
 
25
25
  klass.define_singleton_method(:new) do |*new_args, **new_kwargs, &block|
26
- arg_comparison = new_kwargs.any? ? new_kwargs.keys : new_args
27
- if arg_comparison.size != args.size
28
- raise ArgumentError
26
+ init_kwargs = if new_args.any?
27
+ raise ArgumentError, "unknown arguments #{new_args[members.size..].join(', ')}" if new_args.size > members.size
28
+ Hash[members.take(new_args.size).zip(new_args)]
29
+ else
30
+ new_kwargs
29
31
  end
32
+
30
33
  self.allocate.tap do |instance|
31
- args_to_hash = if !new_kwargs.any?
32
- Hash[members.take(new_args.size).zip(new_args)]
33
- else
34
- new_kwargs
35
- end
36
- instance.send(:initialize, **args_to_hash, &block)
37
- end
34
+ instance.send(:initialize, **init_kwargs, &block)
35
+ end.freeze
38
36
  end
39
37
  class << klass
40
38
  alias_method :[], :new
@@ -57,11 +55,22 @@ else
57
55
  end
58
56
 
59
57
  def initialize(**kwargs)
60
- @attributes = kwargs
58
+ kwargs_size = kwargs.size
59
+ members_size = members.size
60
+
61
+ if kwargs_size > members_size
62
+ extras = kwargs.reject{|k, _v| members.include?(k) }.keys
63
+ raise ArgumentError, "unknown arguments #{extras.join(', ')}"
64
+ elsif kwargs_size < members_size
65
+ missing = members.select {|k, _v| !kwargs.include?(k) }
66
+ raise ArgumentError, "missing arguments #{missing.map{ ":#{_1}" }.join(', ')}"
67
+ end
68
+
69
+ @attributes = Hash[members.map {|m| [m,kwargs[m]] }]
61
70
  end
62
71
 
63
72
  def deconstruct
64
- to_a
73
+ @attributes.values
65
74
  end
66
75
 
67
76
  def deconstruct_keys(array)
@@ -71,10 +80,6 @@ else
71
80
  @attributes.slice(*array)
72
81
  end
73
82
 
74
- def to_a
75
- @attributes.values
76
- end
77
-
78
83
  def to_h(&block)
79
84
  @attributes.to_h(&block)
80
85
  end
@@ -102,7 +107,7 @@ else
102
107
  alias_method :to_s, :inspect
103
108
 
104
109
  def with(**kwargs)
105
- self.class.new(*@attributes.merge(kwargs).values)
110
+ self.class.new(**@attributes.merge(kwargs))
106
111
  end
107
112
  end
108
113
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Polyfill
4
4
  module Data
5
- VERSION = "1.0.1"
5
+ VERSION = "1.0.3"
6
6
  end
7
7
  end
data/test/test_data.rb CHANGED
@@ -86,7 +86,7 @@ class TestData < Minitest::Test
86
86
  super(foo: 1, bar: 2) # so we can experiment with passing wrong numbers of args
87
87
  end
88
88
  end
89
- # require 'debug'; debugger
89
+
90
90
  assert_equal([[], {foo: 1, bar: 2}], klass.new(foo: 1, bar: 2).passed)
91
91
 
92
92
  # Positional arguments are converted to keyword ones
@@ -118,8 +118,10 @@ class TestData < Minitest::Test
118
118
  assert_equal({foo: 1}, test.deconstruct_keys(%i[foo baz]))
119
119
  assert_raises(TypeError) { test.deconstruct_keys(0) }
120
120
 
121
+ test = klass.new(bar: 2, foo: 1)
121
122
  assert_equal([1, 2], test.deconstruct)
122
- assert_equal([1, 2], test.to_a)
123
+
124
+ assert_predicate(test, :frozen?)
123
125
 
124
126
  assert_kind_of(Integer, test.hash)
125
127
  end
data.tar.gz.sig CHANGED
Binary file
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: polyfill-data
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jim Gay
@@ -34,7 +34,7 @@ cert_chain:
34
34
  dxkiKqcX+yzo9RJLD9l/E1AWX125r1Fhiif4l6ehdl7Vllc3NQUOm1abdmHtCYjw
35
35
  dG3yPWBWzzN4ovoBRqsuTJbF1wjkCjl5ex5KhfYbeDc=
36
36
  -----END CERTIFICATE-----
37
- date: 2023-01-20 00:00:00.000000000 Z
37
+ date: 2023-01-22 00:00:00.000000000 Z
38
38
  dependencies: []
39
39
  description: Add the ruby 3.2 Data class to older rubies
40
40
  email:
@@ -76,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
76
76
  - !ruby/object:Gem::Version
77
77
  version: '0'
78
78
  requirements: []
79
- rubygems_version: 3.2.27
79
+ rubygems_version: 3.1.6
80
80
  signing_key:
81
81
  specification_version: 4
82
82
  summary: Add the ruby 3.2 Data class to older rubies
metadata.gz.sig CHANGED
Binary file