opt_struct 0.7.1 → 0.7.2

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
  SHA1:
3
- metadata.gz: d8873a2c7cc94bd72bd9b3c8b9488a6c7657d44b
4
- data.tar.gz: a12e4e7515cad929f9de2e828e732e07ef438fe4
3
+ metadata.gz: 58d04b610dd9e01836ded937683e0454ab6f8ca6
4
+ data.tar.gz: 1313b9c2d0daab287f437a6ce225ffb23017b0d4
5
5
  SHA512:
6
- metadata.gz: b4a88efd47dcffae3a2bfdc9d7dfee486ff0614d0669a084ddd1232565096dffdb72506711ba322b82cbeb24efd0f55974e9d3908d8e8ba2087b325af645013d
7
- data.tar.gz: cbdf3573a8f33d125b90e23f0d919ec697e738f35e4a41cc11df819663072e1f6234fa2a9f08862564122939e4be1886d288263935e7bfe20638b2f403c1324f
6
+ metadata.gz: 6c0052e8e964a8af261e45fef6c06c7ab11c801832464352c447a5319e28e34d43added7597e8a7b49b7d14984e54a40ae356f30c566406f0c60d9235b40154c
7
+ data.tar.gz: c189970eee5b74c925ef31614fa50f419143db679dbdf9cb2d5627d7e8c05d440a5c3406180bdcf25f601fa722b28bd39726f46a7d25a002e835c23003abe6c2
@@ -20,7 +20,21 @@ module OptStruct
20
20
  check_reserved_words(keys)
21
21
 
22
22
  keys.each do |key|
23
- define_method(key) { options[key] }
23
+ define_method(key) do
24
+ if options.key?(key)
25
+ options[key]
26
+ else
27
+ default = defaults[key]
28
+ case default
29
+ when Proc
30
+ instance_exec(&default)
31
+ when Symbol
32
+ respond_to?(default) ? send(default) : default
33
+ else
34
+ default
35
+ end
36
+ end
37
+ end
24
38
  end
25
39
  end
26
40
 
@@ -76,7 +90,7 @@ module OptStruct
76
90
 
77
91
  private
78
92
 
79
- RESERVED_WORDS = %i(class options fetch check_required_args check_required_keys)
93
+ RESERVED_WORDS = %i(class defaults options fetch check_required_args check_required_keys)
80
94
 
81
95
  def check_reserved_words(words)
82
96
  Array(words).each do |word|
@@ -2,7 +2,7 @@ module OptStruct
2
2
  module InstanceMethods
3
3
  def initialize(*arguments, **options)
4
4
  @arguments = arguments
5
- @options = self.class.defaults.merge(options)
5
+ @options = options
6
6
  check_required_args
7
7
  check_required_keys
8
8
  end
@@ -11,6 +11,10 @@ module OptStruct
11
11
  options.fetch(*a, &b)
12
12
  end
13
13
 
14
+ def defaults
15
+ self.class.defaults
16
+ end
17
+
14
18
  private
15
19
 
16
20
  def check_required_keys
@@ -23,10 +27,13 @@ module OptStruct
23
27
  def check_required_args
24
28
  self.class.expected_arguments.each_with_index do |arg, i|
25
29
  if i >= @arguments.length
26
- unless options.key?(arg)
30
+ if options.key?(arg)
31
+ @arguments[i] = options.delete(arg)
32
+ elsif defaults.key?(arg)
33
+ @arguments[i] = defaults[arg]
34
+ else
27
35
  raise ArgumentError, "missing required argument: #{arg}"
28
36
  end
29
- @arguments[i] = options.delete(arg)
30
37
  end
31
38
  end
32
39
  end
data/opt_struct.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "opt_struct"
3
- spec.version = "0.7.1"
3
+ spec.version = "0.7.2"
4
4
  spec.authors = ["Carl Zulauf"]
5
5
  spec.email = ["carl@linkleaf.com"]
6
6
 
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: 0.7.1
4
+ version: 0.7.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Carl Zulauf
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-24 00:00:00.000000000 Z
11
+ date: 2017-08-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  version: '0'
86
86
  requirements: []
87
87
  rubyforge_project:
88
- rubygems_version: 2.6.11
88
+ rubygems_version: 2.6.8
89
89
  signing_key:
90
90
  specification_version: 4
91
91
  summary: The Option Struct