polyfill-data 1.0.1 → 1.0.3

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: 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