l43_open_object 0.2.7 → 0.2.9

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: 1e8a361b980fb5f30b71d1638ca850e98064bd24a6fe8c03275a9e4ff1470508
4
- data.tar.gz: 4729ee0970899d0082179bb8be3fe33680ee23540bd87c3c5366e05d27a9acbf
3
+ metadata.gz: 7008cb448ef1b5ee3d8d07a1412f1edca5b90d9d3b1f6134208ff9534b985053
4
+ data.tar.gz: cd3867b8d7006c3b1cd76d8f76d48283625080ff13ca816e679037f95410b801
5
5
  SHA512:
6
- metadata.gz: fc979712cd454e1d792e2e04ee49955f694652f4c1f7cd6e9518f1729c6f5986c46ce611048e17df26cfde1cbc768119b8e235e00ace65ba2d8d41a802b0f4f0
7
- data.tar.gz: c8442b589be6f50c4409b4780cf63b659623eb42ab139d94285bd488d1e3af7295bc494f1a3c6e25271c4c6907b287d0ed4d8af77eb7a7bcfbb84c0f75bc915d
6
+ metadata.gz: 499291c4eddc3efc8467a57c4772b8fe3ebaa15dca640fd9ef429c0878ef71e3fbc53f24c7ca63c4f57e4d4840863d43a215998a960923c7621e2ca65fe7446c
7
+ data.tar.gz: ee82dcfc0e21aaf3b1f3d01fe1adec6f329295092f608846d6632673553a9b9abc7c0fb30b68d7f74803d5a5c11f47dae0f213d6a31c43b08c65b265694dc59e
@@ -6,7 +6,7 @@ module L43
6
6
  module OpenObject
7
7
  module Behavior
8
8
  extend Forwardable
9
- def_delegators :to_h, :each, :fetch, :slice
9
+ def_delegators :to_h, :[], :each, :fetch, :has_key?, :slice
10
10
 
11
11
  include Enumerable
12
12
 
@@ -43,6 +43,11 @@ module L43
43
43
  end
44
44
  end
45
45
 
46
+ def update_attribute_or(attribute, value, &blk)
47
+ return update_attribute(attribute, value) if self[attribute].nil?
48
+ update_attribute(attribute, blk.(self[attribute], value))
49
+ end
50
+
46
51
  def update_attribute_unless(attribute, condition, &blk)
47
52
  if condition
48
53
  self
@@ -50,6 +55,23 @@ module L43
50
55
  update(attribute => blk.(self))
51
56
  end
52
57
  end
58
+
59
+ def new_with(**atts)
60
+ defaults = self.class.instance_variable_get("@__defaults__")
61
+ new_atts = self.class.instance_variable_get("@__atts__") + atts.keys
62
+ new_values = to_h.merge(atts)
63
+ OpenObject.def_class(*new_atts, **defaults).new(**new_values)
64
+ end
65
+
66
+ def without(*keys)
67
+ defaults = self.class.instance_variable_get("@__defaults__")
68
+ atts = self.class.instance_variable_get("@__atts__")
69
+ new_atts = atts - keys
70
+ new_keys = (atts + defaults.keys) - keys
71
+ new_defaults = defaults.slice(*new_keys)
72
+ new_values = to_h.slice(*new_keys)
73
+ OpenObject.def_class(*new_atts, **new_defaults).new(**new_values)
74
+ end
53
75
  end
54
76
  end
55
77
  end
@@ -27,6 +27,11 @@ module L43
27
27
  freeze
28
28
  end
29
29
  end
30
+
31
+ klass.instance_eval do
32
+ @__atts__ = atts.freeze
33
+ @__defaults__ = defaults.freeze
34
+ end
30
35
  end
31
36
 
32
37
  def define_dynamic_to_h(klass, keys)
@@ -4,7 +4,7 @@ require_relative 'open_object/initializer'
4
4
  require_relative 'open_object/behavior'
5
5
  module L43
6
6
  module OpenObject
7
- VERSION = "0.2.7"
7
+ VERSION = "0.2.9"
8
8
 
9
9
  def attributes(*atts, **defaults, &blk)
10
10
  attr_reader(*atts)
data/lib/l43.rb CHANGED
@@ -1,4 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'l43/open_object'
4
+ module L43
5
+ end
4
6
  # SPDX-License-Identifier: AGPL-3.0-or-later
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: l43_open_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.7
4
+ version: 0.2.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-04-01 00:00:00.000000000 Z
10
+ date: 2026-04-13 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: |-
13
13
  When using the class method `attributes` in a class you get: