polyfill-data 1.0.0 → 1.0.1
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 +26 -0
- data/README.md +2 -2
- data/lib/data.rb +20 -11
- data/lib/polyfill/data/version.rb +1 -1
- data/test/test_data.rb +23 -0
- data.tar.gz.sig +0 -0
- metadata +3 -2
- metadata.gz.sig +1 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 80e9e19a876c3cbc13a20fb597baa45c3a5a17938c20b6cee2853facfbba5381
|
4
|
+
data.tar.gz: 9e64aea3b7c8a184a5887645ed4755268344a417a05676b96d51a6f9e16314ca
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 25002a3731483f15d8a2ddb33ec15a3b023fe92188b29587b4c1155a364c759dd499cd60af701169440c1666852e72959c9403ef69505febb445db71c83feab9
|
7
|
+
data.tar.gz: 869b512afad6f1e9b8c0d45300ebf69a0bee3ac95cd9fa5763c171866cbde0a0f89664da53fc2a5b840beb9f15950bb686ac85d905a2b4562164c70537fbdaf5
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,26 @@
|
|
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.1
|
9
|
+
|
10
|
+
### Added
|
11
|
+
|
12
|
+
- `define` uses the first argument as a constant name if it is a string
|
13
|
+
- `[]` class method as an alias to `new`
|
14
|
+
- `to_s` method as an alias to `inspect`
|
15
|
+
- `deconstruct` method
|
16
|
+
|
17
|
+
### Fixed
|
18
|
+
|
19
|
+
- `initialize` only receives keyword arguments
|
20
|
+
- `inspect` includes comma separated list of members and values
|
21
|
+
|
22
|
+
## 1.0.0
|
23
|
+
|
24
|
+
### Added
|
25
|
+
|
26
|
+
- 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,6 +15,11 @@ 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|
|
@@ -31,6 +36,9 @@ else
|
|
31
36
|
instance.send(:initialize, **args_to_hash, &block)
|
32
37
|
end
|
33
38
|
end
|
39
|
+
class << klass
|
40
|
+
alias_method :[], :new
|
41
|
+
end
|
34
42
|
|
35
43
|
args.map do |arg|
|
36
44
|
if klass.method_defined?(arg)
|
@@ -48,16 +56,12 @@ else
|
|
48
56
|
self.class.members
|
49
57
|
end
|
50
58
|
|
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
|
59
|
+
def initialize(**kwargs)
|
60
|
+
@attributes = kwargs
|
61
|
+
end
|
62
|
+
|
63
|
+
def deconstruct
|
64
|
+
to_a
|
61
65
|
end
|
62
66
|
|
63
67
|
def deconstruct_keys(array)
|
@@ -67,6 +71,10 @@ else
|
|
67
71
|
@attributes.slice(*array)
|
68
72
|
end
|
69
73
|
|
74
|
+
def to_a
|
75
|
+
@attributes.values
|
76
|
+
end
|
77
|
+
|
70
78
|
def to_h(&block)
|
71
79
|
@attributes.to_h(&block)
|
72
80
|
end
|
@@ -89,8 +97,9 @@ else
|
|
89
97
|
insect_key = key.to_s.start_with?("@") ? ":#{key}" : key
|
90
98
|
"#{insect_key}=#{value}"
|
91
99
|
end
|
92
|
-
%(#<#{name} #{attribute_markers.join(" ")}>)
|
100
|
+
%(#<#{name} #{attribute_markers.join(", ")}>)
|
93
101
|
end
|
102
|
+
alias_method :to_s, :inspect
|
94
103
|
|
95
104
|
def with(**kwargs)
|
96
105
|
self.class.new(*@attributes.merge(kwargs).values)
|
data/test/test_data.rb
CHANGED
@@ -118,6 +118,9 @@ 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
|
+
assert_equal([1, 2], test.deconstruct)
|
122
|
+
assert_equal([1, 2], test.to_a)
|
123
|
+
|
121
124
|
assert_kind_of(Integer, test.hash)
|
122
125
|
end
|
123
126
|
|
@@ -133,6 +136,11 @@ class TestData < Minitest::Test
|
|
133
136
|
klass = Data.define(:@a)
|
134
137
|
o = klass.new(1)
|
135
138
|
assert_equal("#<data :@a=1>", o.inspect)
|
139
|
+
|
140
|
+
klass = Data.define(:one, :two)
|
141
|
+
o = klass.new(1,2)
|
142
|
+
assert_equal("#<data one=1, two=2>", o.inspect)
|
143
|
+
assert_equal("#<data one=1, two=2>", o.to_s)
|
136
144
|
end
|
137
145
|
|
138
146
|
def test_equal
|
@@ -167,4 +175,19 @@ class TestData < Minitest::Test
|
|
167
175
|
assert_equal([], test.members)
|
168
176
|
assert_equal({}, test.to_h)
|
169
177
|
end
|
178
|
+
|
179
|
+
def test_square_braces
|
180
|
+
klass = Data.define(:amount, :unit)
|
181
|
+
|
182
|
+
distance = klass[10, 'km']
|
183
|
+
|
184
|
+
assert_equal(10, distance.amount)
|
185
|
+
assert_equal('km', distance.unit)
|
186
|
+
end
|
187
|
+
|
188
|
+
def test_namespaced_constant
|
189
|
+
klass = Data.define("Measure", :amount, :unit)
|
190
|
+
|
191
|
+
assert_equal(Data::Measure, klass)
|
192
|
+
end
|
170
193
|
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.1
|
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-20 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
|
metadata.gz.sig
CHANGED
@@ -1,3 +1 @@
|
|
1
|
-
|
2
|
-
}d94@T'��ε\�,���Ӧ�;e����8F�x�K��*�����,��++'qաt�ԝ�k�*,�㑩�Ci{&��H���8���ֱ7!#��R����ڎ˟M�A������.�p��뽏��c֭5�����D{C��[�l��D\��e��1>&�Z���^�:�!n�5�끼�V��8"�o�e��8mK�G*��F�l��� N�s��88:��c�'+"�ۊ�����Pt�,����<&��aV��A舀
|
3
|
-
[:�I{y%[���Vi@���v���8�e���������sw���^���
|
1
|
+
�B��s���,3QWo���]�DU���5�R��Dr�O*�S0Ҏ�6���X@XK�skQ��1`s����ܜ�B@�b�T�F{�C@��,��Th,�7�:�"B@UT���T��Y�x8X]��)8}���_q�����B`Kt{6bD�d�sN9���)X����]$ 2ԧ&[8v�/Ί�]�x�MZ��He����~b+�� �'*���$�4 M�D=�C�E܃��)��b!J��WD�8Sa���`��~�:��g5�\}� �P��8����G�7�]j��b�W����g%) X]5�<b��.���T���t|@�T~�kWG�P���㳓J�Ω��`��w�=���O��榐H�G)Es�iL\�C��III+:�F
|