l43_open_object 0.2.9 → 0.3.0

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: 7008cb448ef1b5ee3d8d07a1412f1edca5b90d9d3b1f6134208ff9534b985053
4
- data.tar.gz: cd3867b8d7006c3b1cd76d8f76d48283625080ff13ca816e679037f95410b801
3
+ metadata.gz: b6d55f44ec50f1cd6ba1dc6488db8cd515a5cef61841a34da88e30032963932c
4
+ data.tar.gz: 3f04fe5f15b9e81f9c80b57099d0bbf691eff30be9f32707002175b7c3b82850
5
5
  SHA512:
6
- metadata.gz: 499291c4eddc3efc8467a57c4772b8fe3ebaa15dca640fd9ef429c0878ef71e3fbc53f24c7ca63c4f57e4d4840863d43a215998a960923c7621e2ca65fe7446c
7
- data.tar.gz: ee82dcfc0e21aaf3b1f3d01fe1adec6f329295092f608846d6632673553a9b9abc7c0fb30b68d7f74803d5a5c11f47dae0f213d6a31c43b08c65b265694dc59e
6
+ metadata.gz: d132576dde02301168436e9633f0a4caa4b61f61d055b7fcdcb52a3e00665d1c4d5ff8dff00366a30f28c5f12fe54ca2b031bab5a35d6b0c8c8dca11a7e70e98
7
+ data.tar.gz: 30e854ee3d537492a0ee2e2d5b69bf0f47a0350071e5953a7596be59e411139ea82c2b06b09e59fc7646102651432033cd0c5979a966abfefbfe9366aa3ad271
@@ -1,13 +1,12 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'ostruct'
3
4
  module L43
4
5
  module OpenObject
5
6
  module Initializer extend self
6
7
 
7
8
  def define_initialize(klass, atts, defaults, blk)
8
9
  klass.define_method :initialize do |**kwds|
9
- missing = atts - kwds.keys
10
- raise ArgumentError, "missing required keyword parameters: #{missing.inspect}" unless missing.empty?
11
10
  spurious = kwds.keys - atts - defaults.keys
12
11
  raise ArgumentError, "spurious keyword parameters: #{spurious.inspect}" unless spurious.empty?
13
12
 
@@ -15,11 +14,26 @@ module L43
15
14
  values.each do |key, value|
16
15
  instance_variable_set("@#{key}", value)
17
16
  end
17
+
18
+
19
+ if blk
20
+ more_values = instance_exec(OpenStruct.new(values), &blk)
21
+ if Hash === more_values
22
+ more_values.each do |key, value|
23
+ instance_variable_set("@#{key}", value)
24
+ end
25
+ values = values.merge(more_values)
26
+ end
27
+ end
28
+
29
+ missing = atts - values.keys
30
+ raise ArgumentError, "missing required keyword parameters: #{missing.inspect}" unless missing.empty?
31
+
18
32
  if respond_to?(:_init)
19
33
  _init
20
34
  end
21
- do_we_freeze = instance_exec(&blk) if blk
22
- if do_we_freeze == :stay_warm
35
+
36
+ if klass.mutable?
23
37
  Initializer.define_dynamic_to_h(klass, values.keys)
24
38
  else
25
39
  Initializer.define_to_h(klass, values.keys)
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module L43
4
+ module OpenObject
5
+ VERSION = "0.3.0"
6
+ end
7
+ end
8
+ # SPDX-License-Identifier: AGPL-3.0-or-later
@@ -1,10 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require_relative 'open_object/initializer'
4
- require_relative 'open_object/behavior'
3
+ require 'l43/open_object/initializer'
4
+ require 'l43/open_object/behavior'
5
5
  module L43
6
6
  module OpenObject
7
- VERSION = "0.2.9"
8
7
 
9
8
  def attributes(*atts, **defaults, &blk)
10
9
  attr_reader(*atts)
@@ -31,6 +30,14 @@ module L43
31
30
  # end
32
31
  end
33
32
 
33
+ def mutable_object!
34
+ instance_variable_set("@__mutable__", true)
35
+ end
36
+
37
+ def mutable?
38
+ instance_variable_get("@__mutable__") || false
39
+ end
40
+
34
41
  def self.def_class(*a, **k, &b)
35
42
  oo = self
36
43
  Class.new do
metadata CHANGED
@@ -1,14 +1,28 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: l43_open_object
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.9
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Robert Dober
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2026-04-13 00:00:00.000000000 Z
11
- dependencies: []
10
+ date: 2026-04-27 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: ostruct
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: 0.6.3
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: 0.6.3
12
26
  description: |-
13
27
  When using the class method `attributes` in a class you get:
14
28
  - an initialize method with attributes as kwd params and the respective defaults
@@ -26,6 +40,7 @@ files:
26
40
  - lib/l43/open_object.rb
27
41
  - lib/l43/open_object/behavior.rb
28
42
  - lib/l43/open_object/initializer.rb
43
+ - lib/l43/open_object/version.rb
29
44
  homepage: https://codeberg.org/lab419/l43_open_object
30
45
  licenses:
31
46
  - AGPL-3.0-or-later
@@ -44,7 +59,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
44
59
  - !ruby/object:Gem::Version
45
60
  version: '0'
46
61
  requirements: []
47
- rubygems_version: 4.0.9
62
+ rubygems_version: 4.0.10
48
63
  specification_version: 4
49
64
  summary: Define attributes with potential defaults, get all the goodies...
50
65
  test_files: []