lab42_data_class 0.3.1 → 0.3.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: 8e4127a34f013386209c71666f9d77e1b5c8fd439324443580e00c7e9018fdb4
4
- data.tar.gz: c61d6f1648c9c73cd89883a0c0e6ebd6ea813f51dcdb26f141a99a962e4db5fa
3
+ metadata.gz: ca6b2bccf941edcb400b3e9230d394ef867a4a37b6865f5dd76e521fdb33070f
4
+ data.tar.gz: 431c61adef3873183ecba35f86c1f5397c4b8c3b9df140d09438e8e3a5d0b1da
5
5
  SHA512:
6
- metadata.gz: 74b643eb6d43c00aedede31195354412a0b7dcabc5f5da0d1c3f5dbfca4dc03abc1b13a68e10307813153b6e8fe0c502a075a9c4ef17c61f1163ec251e03b3f7
7
- data.tar.gz: '007384216191284048c0fcec62adedb04c8f41a549b92d7cdefcbaa3fa2f4536cce737d4a21a6c8d3648fe62a539fd9f201cd036566b9ff3251ac2929856a6a7'
6
+ metadata.gz: 3f63d89d02aa4a4e2ac551ce79c6f09787ab7d7f173ef459e10a689b0c24dd1682b6d27e756534108187a113784a632adfa384858d2e553e8ca37a72d4bb1b09
7
+ data.tar.gz: 8be0680e0cd43d98a9fe8bfdc8c1844ad076e65fdba2b7360f2471d2f74498dbe937fd74c456231b80066541739551e76cf58356b9fa45bdbf02a5fdab673573
data/README.md CHANGED
@@ -181,7 +181,7 @@ Then we can access the included method
181
181
 
182
182
  ### Context: Pattern Matching
183
183
 
184
- An `DataClass` object behaves like the result of it's `to_h` in pattern matching
184
+ A `DataClass` object behaves like the result of it's `to_h` in pattern matching
185
185
 
186
186
  Given
187
187
  ```ruby
@@ -211,6 +211,50 @@ And in `in` expressions
211
211
  expect(second).to eq(4)
212
212
  ```
213
213
 
214
+ #### Context: In Case Statements
215
+
216
+ Given a nice little dataclass `Box`
217
+ ```ruby
218
+ let(:box) { DataClass content: nil }
219
+ ```
220
+
221
+ Then we can also use it in a case statement
222
+ ```ruby
223
+ value = case box.new
224
+ when box
225
+ 42
226
+ else
227
+ 0
228
+ end
229
+ expect(value).to eq(42)
230
+ ```
231
+
232
+ And all the associated methods
233
+ ```ruby
234
+ expect(box.new).to be_a(box)
235
+ expect(box === box.new).to be_truthy
236
+ ```
237
+
238
+ ### Context: Behaving like a proc
239
+
240
+ It is useful to be able to filter heterogeneous lists of `DataClass` instances by means of `&to_proc`, therefore
241
+
242
+ Given two different `DataClass` objects
243
+ ```ruby
244
+ let(:class1) { DataClass :value }
245
+ let(:class2) { DataClass :value }
246
+ ```
247
+
248
+ And a list of instances
249
+ ```ruby
250
+ let(:list) {[class1.new(value: 1), class2.new(value: 2), class1.new(value: 3)]}
251
+ ```
252
+
253
+ Then we can filter
254
+ ```ruby
255
+ expect(list.filter(&class2)).to eq([class2.new(value: 2)])
256
+ ```
257
+
214
258
  # LICENSE
215
259
 
216
260
  Copyright 2022 Robert Dober robert.dober@gmail.com
@@ -81,6 +81,7 @@ module Lab42
81
81
 
82
82
  def _define_methods
83
83
  (class << klass; self end).module_eval(&_define_freezing_constructor)
84
+ (class << klass; self end).module_eval(&_define_to_proc)
84
85
  klass.module_eval(&_define_to_h)
85
86
  klass.module_eval(&_define_merge)
86
87
  end
@@ -94,6 +95,14 @@ module Lab42
94
95
  end
95
96
  end
96
97
 
98
+ def _define_to_proc
99
+ ->(*) do
100
+ define_method :to_proc do
101
+ ->(other) { self === other }
102
+ end
103
+ end
104
+ end
105
+
97
106
  def _init(data_class_instance, params)
98
107
  params.each do |key, value|
99
108
  data_class_instance.instance_variable_set("@#{key}", value)
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Lab42
4
4
  module DataClass
5
- VERSION = "0.3.1"
5
+ VERSION = "0.3.2"
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: Apache-2.0
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lab42_data_class
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-01-23 00:00:00.000000000 Z
11
+ date: 2022-01-30 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: |
14
14
  An Immutable DataClass for Ruby