lab42_data_class 0.9.0 → 0.9.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: dfa77ee34986d3c9863b3856145c2be5a15414b70fc81f6725b070c0fa2a89cf
4
- data.tar.gz: 3d8a08dd32ec2b95a39f8d75de76174f58de3c70d988ead0c2299f0d9a328822
3
+ metadata.gz: 65bfbb6f235225ce344f266873b25d6d8730f65cf0762a63cf2eaedac63eab82
4
+ data.tar.gz: 7ae5b495af9f563447cdbfc0f78fed08da1c57265abb17f99be25ff6ea37d7c7
5
5
  SHA512:
6
- metadata.gz: 5a37976e72f597c14549266732bfd64adbc799821bce5d823ae69262adf720299c2b8c3871a1d52b868df0755c3a24c01259eba06e58698017ac9c0a1559eae7
7
- data.tar.gz: fde164cdfb09efbc5b72465c87391a7ea5e8ae530e0858ed43532ba4e829521d35760d869fbe323e74d6c4cc4f639c26636fc15dbe26e101f8691271f94e5b02
6
+ metadata.gz: 6067686f706c0523e540515b4ba53f2869d59a0bed73964a192281cd3f87070134f228705b2e89601dc1ebfaeb149a86822a6a5f48f67d294f5c55dfa4b51146
7
+ data.tar.gz: db80d7b5e968aac1c1ae32cdc60b43370746519661b9f2c4985b446ae20fd3bbf0a8b6ac4f442293547bdadd2f8fd1bd2b3a4d3e448a4f141324b2c3e006e525
@@ -97,4 +97,4 @@ module Lab42
97
97
  end
98
98
  end
99
99
  end
100
- # SPDX-License-Identifier: Apache-2.0
100
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -12,8 +12,13 @@ module Lab42
12
12
  raise ValidationError, errors.join("\n") unless errors.empty?
13
13
  end
14
14
 
15
+ def define_validation(&blk)
16
+ validations << [nil, blk]
17
+ end
18
+
15
19
  private
16
20
 
21
+
17
22
  def _define_with_validations
18
23
  proxy = self
19
24
  ->(*) do
@@ -58,8 +58,8 @@ module Lab42
58
58
  klass.module_eval(&_define_derived_attribute(name, &blk))
59
59
  end
60
60
 
61
- def init(data_class, **params)
62
- _init(data_class, defaults.merge(params))
61
+ def init(data_class, **params, &block)
62
+ _init(data_class, defaults.merge(params), &block)
63
63
  end
64
64
 
65
65
  def set_actual_params(params)
@@ -135,10 +135,10 @@ module Lab42
135
135
  def _define_merging_constructor
136
136
  proxy = self
137
137
  ->(*) do
138
- define_method :_new_from_merge do |new_params, params|
138
+ define_method :_new_from_merge do |new_params, params, &b|
139
139
  allocate.tap do |o|
140
140
  proxy.check!(new_params, {})
141
- o.send(:initialize, **params)
141
+ o.send(:initialize, **params, &b)
142
142
  end.freeze
143
143
  end
144
144
  private :_new_from_merge
@@ -148,8 +148,8 @@ module Lab42
148
148
  def _define_initializer
149
149
  proxy = self
150
150
  ->(*) do
151
- define_method :initialize do |**params|
152
- proxy.init(self, **params)
151
+ define_method :initialize do |**params, &block|
152
+ proxy.init(self, **params, &block)
153
153
  proxy.validate!(self)
154
154
  end
155
155
  end
@@ -244,9 +244,13 @@ module Lab42
244
244
  end
245
245
  end
246
246
 
247
- def _init(data_class_instance, params)
247
+ def _init(data_class_instance, params, &block)
248
248
  params.each do |key, value|
249
- data_class_instance.instance_variable_set("@#{key}", value.freeze)
249
+ data_class_instance.instance_variable_set("@#{key}", value)
250
+ end
251
+ data_class_instance.instance_eval(&block) if block
252
+ params.each do |_, value|
253
+ value.freeze
250
254
  end
251
255
  end
252
256
  end
@@ -2,7 +2,7 @@
2
2
 
3
3
  module Lab42
4
4
  module DataClass
5
- VERSION = "0.9.0"
5
+ VERSION = "0.9.1"
6
6
  end
7
7
  end
8
8
  # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -48,6 +48,13 @@ module Lab42
48
48
  __data_class_proxy__.define_constraints(member => constraint || block)
49
49
  __data_class_proxy__.define_class!
50
50
  end
51
+
52
+ def validate(&blk)
53
+ raise ArgumentError, "validation block missing" unless blk
54
+
55
+ __data_class_proxy__.define_validation(&blk)
56
+ __data_class_proxy__.define_class!
57
+ end
51
58
  end
52
59
  end
53
- # SPDX-License-Identifier: Apache-2.0
60
+ # SPDX-License-Identifier: AGPL-3.0-or-later
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lab42_data_class
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 0.9.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober