opt_struct 0.8.3 → 0.9.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
- 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