polyfill-data 1.0.0 → 1.0.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 +4 -4
- checksums.yaml.gz.sig +0 -0
- data/CHANGELOG.md +34 -0
- data/README.md +2 -2
- data/lib/data.rb +25 -22
- data/lib/polyfill/data/version.rb +1 -1
- data/test/test_data.rb +25 -0
- data.tar.gz.sig +0 -0
- metadata +4 -3
- metadata.gz.sig +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 156f764bced601a2ebf8cc7a6ee095d63a4d3f813ee3e9fe7c3b273ce68f007f
|
4
|
+
data.tar.gz: d7425307509c331ac61c33541da58effcbbb1f5b6ce675ede734b27c2acf0ed3
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 76a56991f1759077af526ef30236fcde606cd7fdc4dd9b5264e6d3012ad02e5a27feafa2dcf6900a54cd47e25525ee221702e07f41b6178f5cbb3cb7c4c2abfc
|
7
|
+
data.tar.gz: 995d6359685044724e2fda6a31e8dab8c73cbdee97dc49034ef7c45ee39a04a3a05ab7ec3046f78705e931316e2957a0992cbe3b3a36c1fd7d43794e89ee22ca
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,34 @@
|
|
1
|
+
# Changelog
|
2
|
+
|
3
|
+
All notable changes to this project will be documented in this file.
|
4
|
+
|
5
|
+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
|
6
|
+
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
7
|
+
|
8
|
+
## 1.0.2
|
9
|
+
|
10
|
+
### Fixed
|
11
|
+
|
12
|
+
- freeze after initializing
|
13
|
+
- `to_a` removed
|
14
|
+
- `deconstruct` fixed to return array in order of members as defined
|
15
|
+
|
16
|
+
## 1.0.1
|
17
|
+
|
18
|
+
### Added
|
19
|
+
|
20
|
+
- `define` uses the first argument as a constant name if it is a string
|
21
|
+
- `[]` class method as an alias to `new`
|
22
|
+
- `to_s` method as an alias to `inspect`
|
23
|
+
- `deconstruct` method
|
24
|
+
|
25
|
+
### Fixed
|
26
|
+
|
27
|
+
- `initialize` only receives keyword arguments
|
28
|
+
- `inspect` includes comma separated list of members and values
|
29
|
+
|
30
|
+
## 1.0.0
|
31
|
+
|
32
|
+
### Added
|
33
|
+
|
34
|
+
- Initial implementation
|
data/README.md
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
# Polyfill - Data
|
2
2
|
|
3
|
-
Add the Ruby 3.2 Data class to earlier Rubies.
|
3
|
+
Add the Ruby 3.2 [Data](https://docs.ruby-lang.org/en/3.2/Data.html) class to earlier Rubies.
|
4
4
|
|
5
5
|
## Installation
|
6
6
|
|
@@ -14,7 +14,7 @@ If bundler is not being used to manage dependencies, install the gem by executin
|
|
14
14
|
|
15
15
|
Polyfill-Data is cryptographically signed. To be sure the gem you install hasn’t been tampered with:
|
16
16
|
|
17
|
-
Add
|
17
|
+
Add the public key (if you haven’t already) as a trusted certificate
|
18
18
|
|
19
19
|
gem cert --add <(curl -Ls https://raw.github.com/saturnflyer/polyfill-data/main/certs/saturnflyer.pem)
|
20
20
|
|
data/lib/data.rb
CHANGED
@@ -15,21 +15,27 @@ else
|
|
15
15
|
raise ArgumentError if args.any?(/=/)
|
16
16
|
klass = ::Class.new(self, &block)
|
17
17
|
|
18
|
+
if args.first.is_a?(String)
|
19
|
+
name = args.shift
|
20
|
+
Data.const_set(name, klass)
|
21
|
+
end
|
22
|
+
|
18
23
|
klass.define_singleton_method(:members) { args.map{ _1.intern } }
|
19
24
|
|
20
25
|
klass.define_singleton_method(:new) do |*new_args, **new_kwargs, &block|
|
21
|
-
|
22
|
-
|
23
|
-
|
26
|
+
|
27
|
+
init_kwargs = if new_args.any?
|
28
|
+
Hash[members.take(new_args.size).zip(new_args)]
|
29
|
+
else
|
30
|
+
new_kwargs
|
24
31
|
end
|
32
|
+
|
25
33
|
self.allocate.tap do |instance|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
instance.send(:initialize, **args_to_hash, &block)
|
32
|
-
end
|
34
|
+
instance.send(:initialize, **init_kwargs, &block)
|
35
|
+
end.freeze
|
36
|
+
end
|
37
|
+
class << klass
|
38
|
+
alias_method :[], :new
|
33
39
|
end
|
34
40
|
|
35
41
|
args.map do |arg|
|
@@ -48,16 +54,12 @@ else
|
|
48
54
|
self.class.members
|
49
55
|
end
|
50
56
|
|
51
|
-
def initialize(
|
52
|
-
@attributes =
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
else
|
58
|
-
raise ArgumentError unless args.length == members.length
|
59
|
-
Hash[members.zip(args)]
|
60
|
-
end
|
57
|
+
def initialize(**kwargs)
|
58
|
+
@attributes = Hash[members.map {|m| [m,kwargs[m]] }]
|
59
|
+
end
|
60
|
+
|
61
|
+
def deconstruct
|
62
|
+
@attributes.values
|
61
63
|
end
|
62
64
|
|
63
65
|
def deconstruct_keys(array)
|
@@ -89,11 +91,12 @@ else
|
|
89
91
|
insect_key = key.to_s.start_with?("@") ? ":#{key}" : key
|
90
92
|
"#{insect_key}=#{value}"
|
91
93
|
end
|
92
|
-
%(#<#{name} #{attribute_markers.join(" ")}>)
|
94
|
+
%(#<#{name} #{attribute_markers.join(", ")}>)
|
93
95
|
end
|
96
|
+
alias_method :to_s, :inspect
|
94
97
|
|
95
98
|
def with(**kwargs)
|
96
|
-
self.class.new(
|
99
|
+
self.class.new(**@attributes.merge(kwargs))
|
97
100
|
end
|
98
101
|
end
|
99
102
|
end
|
data/test/test_data.rb
CHANGED
@@ -118,6 +118,11 @@ 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)
|
122
|
+
assert_equal([1, 2], test.deconstruct)
|
123
|
+
|
124
|
+
assert_predicate(test, :frozen?)
|
125
|
+
|
121
126
|
assert_kind_of(Integer, test.hash)
|
122
127
|
end
|
123
128
|
|
@@ -133,6 +138,11 @@ class TestData < Minitest::Test
|
|
133
138
|
klass = Data.define(:@a)
|
134
139
|
o = klass.new(1)
|
135
140
|
assert_equal("#<data :@a=1>", o.inspect)
|
141
|
+
|
142
|
+
klass = Data.define(:one, :two)
|
143
|
+
o = klass.new(1,2)
|
144
|
+
assert_equal("#<data one=1, two=2>", o.inspect)
|
145
|
+
assert_equal("#<data one=1, two=2>", o.to_s)
|
136
146
|
end
|
137
147
|
|
138
148
|
def test_equal
|
@@ -167,4 +177,19 @@ class TestData < Minitest::Test
|
|
167
177
|
assert_equal([], test.members)
|
168
178
|
assert_equal({}, test.to_h)
|
169
179
|
end
|
180
|
+
|
181
|
+
def test_square_braces
|
182
|
+
klass = Data.define(:amount, :unit)
|
183
|
+
|
184
|
+
distance = klass[10, 'km']
|
185
|
+
|
186
|
+
assert_equal(10, distance.amount)
|
187
|
+
assert_equal('km', distance.unit)
|
188
|
+
end
|
189
|
+
|
190
|
+
def test_namespaced_constant
|
191
|
+
klass = Data.define("Measure", :amount, :unit)
|
192
|
+
|
193
|
+
assert_equal(Data::Measure, klass)
|
194
|
+
end
|
170
195
|
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.
|
4
|
+
version: 1.0.2
|
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-
|
37
|
+
date: 2023-01-21 00:00:00.000000000 Z
|
38
38
|
dependencies: []
|
39
39
|
description: Add the ruby 3.2 Data class to older rubies
|
40
40
|
email:
|
@@ -43,6 +43,7 @@ executables: []
|
|
43
43
|
extensions: []
|
44
44
|
extra_rdoc_files: []
|
45
45
|
files:
|
46
|
+
- CHANGELOG.md
|
46
47
|
- README.md
|
47
48
|
- Rakefile
|
48
49
|
- certs/saturnflyer.pem
|
@@ -75,7 +76,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
75
76
|
- !ruby/object:Gem::Version
|
76
77
|
version: '0'
|
77
78
|
requirements: []
|
78
|
-
rubygems_version: 3.
|
79
|
+
rubygems_version: 3.1.6
|
79
80
|
signing_key:
|
80
81
|
specification_version: 4
|
81
82
|
summary: Add the ruby 3.2 Data class to older rubies
|
metadata.gz.sig
CHANGED
Binary file
|