opt_struct 1.4.0 → 1.5.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: 193867b718e2e264678a0ad084fc6ee5d76854203e74d13e6fc64404dfb042e8
4
- data.tar.gz: b226650ae4b38741e70de40d8e0ffde6666f6e80f7b6735c316dfd303f74a435
3
+ metadata.gz: 29701f52f41c942f328cc7a9303a72baa59d96cc1b0b8d9e803e9a80bac6aef3
4
+ data.tar.gz: 91c84c884b3a4ea3833db8c80083217efb8d942983aa0cb1072fd0b177c135b5
5
5
  SHA512:
6
- metadata.gz: 16565e6596e06089f3cc463917af8ee13d573ad8ded530a39f121e3d4d2b1eb05b5b5e3bf308fe770750e7067adf06d08d72b0ef438ff939bdab4ef02605f2be
7
- data.tar.gz: 942ccab03a688b1fc8b11db1d571d9cf6d8b96db49243120847f1083a7cb40bbdcedffdd38f252c483db395692f91f1dbfa275f2c876d159bcf2b5a230f533d2
6
+ metadata.gz: 27ceba23b7146f571232215d3228c59d9d6632e0628b694ded56fb8f308ad9257182c0f29edf41bbb9dc151570e5b855f40412ad066b33abfe042d18a3342344
7
+ data.tar.gz: 74f73309afd32192f9ea1b7d48f193e209f0e056381d20762001f57ec6b113387d11a8e9532a713b28855e2e052f210a8f0cff1df9b1c1319e8701934e9d0687
@@ -7,10 +7,22 @@ module OptStruct
7
7
  end
8
8
  end
9
9
 
10
+ def defined_keys
11
+ @defined_keys ||= []
12
+ end
13
+
10
14
  def required_keys
11
15
  @required_keys ||= []
12
16
  end
13
17
 
18
+ def expected_arguments
19
+ @expected_arguments ||= []
20
+ end
21
+
22
+ def defaults
23
+ @defaults ||= {}
24
+ end
25
+
14
26
  def required(*keys, **options)
15
27
  required_keys.concat keys
16
28
  option_accessor *keys, **options
@@ -33,6 +45,7 @@ module OptStruct
33
45
 
34
46
  def option_accessor(*keys, **options)
35
47
  check_reserved_words(keys)
48
+ defined_keys.concat keys
36
49
  option_reader *keys, **options
37
50
  option_writer *keys, **options
38
51
  end
@@ -52,20 +65,12 @@ module OptStruct
52
65
  end
53
66
  end
54
67
 
55
- def defaults
56
- @defaults ||= {}
57
- end
58
-
59
68
  def expect_arguments(*arguments)
60
69
  required(*arguments)
61
70
  expected_arguments.concat(arguments)
62
71
  end
63
72
  alias_method :expect_argument, :expect_arguments
64
73
 
65
- def expected_arguments
66
- @expected_arguments ||= []
67
- end
68
-
69
74
  def init(meth = nil, &blk)
70
75
  add_callback(:init, meth || blk)
71
76
  end
@@ -29,27 +29,24 @@ module OptStruct
29
29
  def assign_defaults
30
30
  defaults.each do |key, default_value|
31
31
  next if options.key?(key)
32
- options[key] = read_default_value(default_value)
32
+ options[key] =
33
+ case default_value
34
+ when Proc
35
+ instance_exec(&default_value)
36
+ when Symbol
37
+ respond_to?(default_value) ? send(default_value) : default_value
38
+ else
39
+ default_value
40
+ end
33
41
  end
34
42
  end
35
43
 
36
44
  def assign_arguments(args)
37
- self.class.expected_arguments.map.with_index do |key, i|
45
+ self.class.expected_arguments.each_with_index do |key, i|
38
46
  options[key] = args[i] if args.length > i
39
47
  end
40
48
  end
41
49
 
42
- def read_default_value(default)
43
- case default
44
- when Proc
45
- instance_exec(&default)
46
- when Symbol
47
- respond_to?(default) ? send(default) : default
48
- else
49
- default
50
- end
51
- end
52
-
53
50
  def with_init_callbacks(&init_block)
54
51
  callbacks = self.class.all_callbacks
55
52
  return yield if callbacks.nil? || callbacks.empty?
@@ -1,3 +1,3 @@
1
1
  module OptStruct
2
- VERSION = "1.4.0"
2
+ VERSION = "1.5.0"
3
3
  end
data/lib/opt_struct.rb CHANGED
@@ -3,7 +3,13 @@ require "opt_struct/module_methods"
3
3
  require "opt_struct/instance_methods"
4
4
 
5
5
  module OptStruct
6
- RESERVED_WORDS = %i(class defaults options fetch check_required_args check_required_keys).freeze
6
+
7
+ RESERVED_WORDS = [
8
+ :class, :options,
9
+ *OptStruct::InstanceMethods.instance_methods,
10
+ *OptStruct::InstanceMethods.protected_instance_methods,
11
+ *OptStruct::InstanceMethods.private_instance_methods,
12
+ ].freeze
7
13
 
8
14
  # Default value object allows us to distinguish unspecified defaults from nil
9
15
  DEFAULT = Object.new
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: opt_struct
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl Zulauf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2022-02-23 00:00:00.000000000 Z
11
+ date: 2023-08-25 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: Struct with support for keyword params and mixin support
14
14
  email:
@@ -43,7 +43,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
43
43
  - !ruby/object:Gem::Version
44
44
  version: '0'
45
45
  requirements: []
46
- rubygems_version: 3.3.7
46
+ rubygems_version: 3.2.33
47
47
  signing_key:
48
48
  specification_version: 4
49
49
  summary: The Option Struct