opt_struct 0.8.3 → 0.9.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
- SHA1:
3
- metadata.gz: b699f5addc372cfd588ad4fbf591aea4c77c4688
4
- data.tar.gz: 11fefbd784a3055f7a4ad4364fa94a7722628c78
2
+ SHA256:
3
+ metadata.gz: 54518e9eca18b69463f611c221bd896a94cbd5293bd804a23319b0dd7441573d
4
+ data.tar.gz: 36584d846f30ebf6517d541a31668678a1a8dbd9025a4d9bef032eea2372c50f
5
5
  SHA512:
6
- metadata.gz: 3a686c37ceb559479e949dd7b1593be9ceb9695fe5bcb82887989958ba3dfa0a65567e90efecd2f8c513aefbdb754a6cdb6b159855154d3f25c37e0f4110e1b7
7
- data.tar.gz: 760dfdca6554c4c805db839ba9dbcfd6154743caeec1de527db5a72dd7f2c56c5bd846a4cb140387f35ac47a2efb3bec84f17f07eefb1a118b5472717947a690
6
+ metadata.gz: ff0a53a81253354676e0578028d775785eda00d30c7201b3f36414009b26ad551893f789dc9aabf82ec212b7abd5544432a045cfe4f973e59136ffeec1258867
7
+ data.tar.gz: fbbd6f407b889e2cca7b6b9d5ce891cdad58bb73db10a1e437515d74d1221af442da0cbb7715f8f20db05ea0799035951e094d9ad5bece86775f7c05fdd17c1e
@@ -24,16 +24,7 @@ module OptStruct
24
24
  if options.key?(key)
25
25
  options[key]
26
26
  elsif defaults.key?(key)
27
- default = defaults[key]
28
- options[key] =
29
- case default
30
- when Proc
31
- instance_exec(&default)
32
- when Symbol
33
- respond_to?(default) ? send(default) : default
34
- else
35
- default
36
- end
27
+ options[key] = read_default_value(key)
37
28
  end
38
29
  end
39
30
  end
@@ -72,17 +63,8 @@ module OptStruct
72
63
  end
73
64
 
74
65
  def expect_arguments(*arguments)
75
- check_reserved_words(arguments)
76
-
77
- existing = expected_arguments.count
66
+ required(*arguments)
78
67
  expected_arguments.concat(arguments)
79
-
80
- arguments.each_with_index do |arg, i|
81
- n = i + existing
82
- define_method(arg) { @arguments[n] }
83
- define_method("#{arg}=") { |value| @arguments[n] = value }
84
- end
85
-
86
68
  end
87
69
 
88
70
  def expected_arguments
@@ -2,9 +2,8 @@ module OptStruct
2
2
  module InstanceMethods
3
3
  def initialize(*arguments, **options)
4
4
  with_init_callbacks do
5
- @arguments = arguments
6
5
  @options = options
7
- check_required_args
6
+ assign_arguments(arguments)
8
7
  check_required_keys
9
8
  end
10
9
  end
@@ -25,20 +24,32 @@ module OptStruct
25
24
  raise ArgumentError, "missing required keywords: #{missing.inspect}"
26
25
  end
27
26
  end
28
-
29
- def check_required_args
30
- self.class.expected_arguments.each_with_index do |arg, i|
31
- if i >= @arguments.length
32
- if options.key?(arg)
33
- @arguments[i] = options.delete(arg)
34
- elsif defaults.key?(arg)
35
- @arguments[i] = defaults[arg]
27
+
28
+ def assign_arguments(args)
29
+ self.class.expected_arguments.map.with_index do |key, i|
30
+ if args.length > i
31
+ options[key] = args[i]
32
+ elsif !options.key?(key)
33
+ if defaults.key?(key)
34
+ options[key] = read_default_value(key)
36
35
  else
37
- raise ArgumentError, "missing required argument: #{arg}"
36
+ raise ArgumentError, "missing required argument: #{key}"
38
37
  end
39
38
  end
40
39
  end
41
40
  end
41
+
42
+ def read_default_value(key)
43
+ default = defaults[key]
44
+ case default
45
+ when Proc
46
+ instance_exec(&default)
47
+ when Symbol
48
+ respond_to?(default) ? send(default) : default
49
+ else
50
+ default
51
+ end
52
+ end
42
53
 
43
54
  def with_init_callbacks(&init_block)
44
55
  callbacks = self.class.all_callbacks
@@ -0,0 +1,3 @@
1
+ module OptStruct
2
+ VERSION = "0.9.0"
3
+ end
data/opt_struct.gemspec CHANGED
@@ -1,6 +1,10 @@
1
+ lib = File.expand_path('../lib', __FILE__)
2
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
+ require 'opt_struct/version'
4
+
1
5
  Gem::Specification.new do |spec|
2
6
  spec.name = "opt_struct"
3
- spec.version = "0.8.3"
7
+ spec.version = OptStruct::VERSION
4
8
  spec.authors = ["Carl Zulauf"]
5
9
  spec.email = ["carl@linkleaf.com"]
6
10
 
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.8.3
4
+ version: 0.9.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: 2017-11-11 00:00:00.000000000 Z
11
+ date: 2019-10-05 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -64,6 +64,7 @@ files:
64
64
  - lib/opt_struct/class_methods.rb
65
65
  - lib/opt_struct/instance_methods.rb
66
66
  - lib/opt_struct/module_methods.rb
67
+ - lib/opt_struct/version.rb
67
68
  - opt_struct.gemspec
68
69
  homepage: https://github.com/carlzulauf/opt_struct
69
70
  licenses:
@@ -84,8 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
85
  - !ruby/object:Gem::Version
85
86
  version: '0'
86
87
  requirements: []
87
- rubyforge_project:
88
- rubygems_version: 2.6.13
88
+ rubygems_version: 3.0.3
89
89
  signing_key:
90
90
  specification_version: 4
91
91
  summary: The Option Struct