opt_struct 1.3.0 → 1.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b76ee40e5f6c8f06f6f80efdefa9a595b48f4d07a3c98d6830fd515133038399
4
- data.tar.gz: a9643c5ee83f52613f47e6e079445cc5912853ffb17b195f00b3e6496b2cfc03
3
+ metadata.gz: 29701f52f41c942f328cc7a9303a72baa59d96cc1b0b8d9e803e9a80bac6aef3
4
+ data.tar.gz: 91c84c884b3a4ea3833db8c80083217efb8d942983aa0cb1072fd0b177c135b5
5
5
  SHA512:
6
- metadata.gz: 5d420f43e4cbc3571545846b6ee5275c32e86e5f79de7d2063564ef63f1cfc2c6857092256ee2d74a05bfce3fec9a9da7b1e5ada92ad50e3ceb69488310e8419
7
- data.tar.gz: 8b059ca5bfab302e0515c90e49650723174cc91eb42b93d104de4fa79cf86fe6e42aea3bdc50c1612cdef36ae690538e221b9338c683d5851e88e9688c546731
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,13 +45,14 @@ 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
39
52
 
40
- def option(key, default = nil, required: false, **options)
53
+ def option(key, default = OptStruct::DEFAULT, required: false, **options)
41
54
  default = options[:default] if options.key?(:default)
42
- defaults[key] = default if default
55
+ defaults[key] = default unless default == OptStruct::DEFAULT
43
56
  required_keys << key if required
44
57
  option_accessor key, **options
45
58
  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
@@ -91,11 +96,9 @@ module OptStruct
91
96
 
92
97
  private
93
98
 
94
- RESERVED_WORDS = %i(class defaults options fetch check_required_args check_required_keys)
95
-
96
99
  def check_reserved_words(words)
97
100
  Array(words).each do |word|
98
- if RESERVED_WORDS.member?(word)
101
+ if OptStruct::RESERVED_WORDS.member?(word)
99
102
  raise ArgumentError, "Use of reserved word is not permitted: #{word.inspect}"
100
103
  end
101
104
  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.3.0"
2
+ VERSION = "1.5.0"
3
3
  end
data/lib/opt_struct.rb CHANGED
@@ -3,7 +3,16 @@ 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
13
+
14
+ # Default value object allows us to distinguish unspecified defaults from nil
15
+ DEFAULT = Object.new
7
16
 
8
17
  def self._inject_struct(target, source, args = [], **defaults, &callback)
9
18
  structs = Array(source.instance_variable_get(:@_opt_structs)).dup
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.3.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl Zulauf
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-17 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:
@@ -28,7 +28,7 @@ homepage: https://github.com/carlzulauf/opt_struct
28
28
  licenses:
29
29
  - MIT
30
30
  metadata: {}
31
- post_install_message:
31
+ post_install_message:
32
32
  rdoc_options: []
33
33
  require_paths:
34
34
  - lib
@@ -43,8 +43,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
43
43
  - !ruby/object:Gem::Version
44
44
  version: '0'
45
45
  requirements: []
46
- rubygems_version: 3.2.3
47
- signing_key:
46
+ rubygems_version: 3.2.33
47
+ signing_key:
48
48
  specification_version: 4
49
49
  summary: The Option Struct
50
50
  test_files: []