l43_open_object 0.2.8 → 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: 240068b0df2618888660d12f9f1b8d032087e3063f6e0198a46046da794bdb1c
4
- data.tar.gz: 92ebe8107c88a91de4e2a034d58a7a3fa357f3a2f24a97fca31aa90b88016fa6
3
+ metadata.gz: 7008cb448ef1b5ee3d8d07a1412f1edca5b90d9d3b1f6134208ff9534b985053
4
+ data.tar.gz: cd3867b8d7006c3b1cd76d8f76d48283625080ff13ca816e679037f95410b801
5
5
  SHA512:
6
- metadata.gz: 0e406c09bda90dea1580a1b7e072ec009f245488fdaa25b6895395bf9bbbbb6cb47bcbb6ab9b3726f4bdfaecb738d425ab9a99fdc66f59d667199010551af1fb
7
- data.tar.gz: deccbd050e3d939344d52d833cb42d0b84518504cde9fd83a79376f28d42626465c6e48c7ac9a835dbd2a38b85cdb96f67db99dc5a478cf26443d3e745d58a2b
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
 
@@ -55,6 +55,23 @@ module L43
55
55
  update(attribute => blk.(self))
56
56
  end
57
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
58
75
  end
59
76
  end
60
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.8"
7
+ VERSION = "0.2.9"
8
8
 
9
9
  def attributes(*atts, **defaults, &blk)
10
10
  attr_reader(*atts)
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.8
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: