opt_struct 0.5.0 → 0.6.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 +4 -4
- data/lib/opt_struct.rb +31 -28
- data/opt_struct.gemspec +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 86875cc60a9f0c8baa956deb6b0f262ec19bab4e
|
4
|
+
data.tar.gz: bfa7c755fc3a9f33fcf4f75be7c9a3a4d94d350b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8382e279bf7d34c822df3ce74b6dad5f99f5a39a3300110eac6ad5009ddfbd14ba0ffe83a2ff2e83e7348c2505add8ff5b01cb804ede7c120c9534d07cbb7191
|
7
|
+
data.tar.gz: 30ad8a248b2eb6cae7284f947fe2fe629799f47b34e80985329b6560c358d72f8a7be8a70b5f8e14b686fbf0cf1ff9c9dce3efd51ff94c801a416cef913fc3b5
|
data/lib/opt_struct.rb
CHANGED
@@ -2,48 +2,51 @@ require "opt_struct/class_methods"
|
|
2
2
|
require "opt_struct/instance_methods"
|
3
3
|
|
4
4
|
module OptStruct
|
5
|
-
def self.
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
include InstanceMethods
|
5
|
+
def self._inject_struct(target, source, args = [], defaults = {}, &callback)
|
6
|
+
structs = Array(source.instance_variable_get(:@_opt_structs)).dup
|
7
|
+
if args.any? || defaults.any? || callback
|
8
|
+
structs << [args, defaults, callback]
|
10
9
|
end
|
11
|
-
|
12
|
-
|
10
|
+
target.instance_variable_set(:@_opt_structs, structs)
|
11
|
+
if target.is_a?(Class)
|
12
|
+
target.instance_exec do
|
13
|
+
extend ClassMethods
|
14
|
+
attr_reader :options
|
15
|
+
include InstanceMethods
|
16
|
+
end
|
17
|
+
structs.each do |s_args, s_defaults, s_callback|
|
18
|
+
target.class_exec do
|
19
|
+
expect_arguments *s_args if s_args.any?
|
20
|
+
options s_defaults if s_defaults.any?
|
21
|
+
end
|
22
|
+
target.class_exec(&s_callback) if s_callback
|
23
|
+
end
|
24
|
+
else
|
25
|
+
target.instance_exec do
|
26
|
+
def self.included(klass)
|
27
|
+
OptStruct._inject_struct(klass, self)
|
28
|
+
super(klass)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
target
|
13
33
|
end
|
14
34
|
|
15
35
|
def self.included(klass)
|
16
|
-
|
36
|
+
_inject_struct(klass, self)
|
37
|
+
super(klass)
|
17
38
|
end
|
18
39
|
|
19
40
|
def self.new(*args, **defaults, &callback)
|
20
41
|
check_for_invalid_args(args)
|
21
42
|
args.map!(&:to_sym)
|
22
|
-
|
23
|
-
expect_arguments *args
|
24
|
-
options defaults
|
25
|
-
end
|
26
|
-
klass.class_exec(&callback) if callback
|
27
|
-
klass
|
43
|
+
_inject_struct(Class.new, self, args, defaults, &callback)
|
28
44
|
end
|
29
45
|
|
30
46
|
def self.build(*args, **defaults, &callback)
|
31
47
|
check_for_invalid_args(args)
|
32
48
|
args.map!(&:to_sym)
|
33
|
-
Module.new
|
34
|
-
@arguments = args
|
35
|
-
@defaults = defaults
|
36
|
-
@callback = callback
|
37
|
-
|
38
|
-
def self.included(klass)
|
39
|
-
arguments, defaults, callback = @arguments, @defaults, @callback
|
40
|
-
OptStruct.inject_struct(klass) do
|
41
|
-
expect_arguments *arguments
|
42
|
-
options defaults
|
43
|
-
end
|
44
|
-
klass.class_exec(&callback) if callback
|
45
|
-
end
|
46
|
-
end
|
49
|
+
_inject_struct(Module.new, self, args, defaults, &callback)
|
47
50
|
end
|
48
51
|
|
49
52
|
private
|
data/opt_struct.gemspec
CHANGED
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.
|
4
|
+
version: 0.6.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-06-
|
11
|
+
date: 2017-06-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|