opt_struct 0.6.0 → 0.7.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 +13 -23
- data/lib/opt_struct/class_methods.rb +18 -0
- data/lib/opt_struct/module_methods.rb +30 -0
- data/opt_struct.gemspec +1 -1
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 97cdaee22a1c74440c23a4107a054b31be14e14c
|
4
|
+
data.tar.gz: 103a25d331444af311700ee23efa51fcc3526c82
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6a62a3d36c523e61e0c470ce3e9549d7a9991b2f621906f3c932d215fb4c8227fc1ad55a38b7f24839dc943f0dc3cd0d30e58c2a49e3f87d26acd58fbefa5a63
|
7
|
+
data.tar.gz: 6e52a658e7250f1f1ff142c1b9ab83eedf8460d7bacfc2ff9d8dad9272421b78a1aab572a6d51b311abacfe85f638a1970452d3f7695d0d3b5846f8cf5639f29
|
data/lib/opt_struct.rb
CHANGED
@@ -1,7 +1,9 @@
|
|
1
1
|
require "opt_struct/class_methods"
|
2
|
+
require "opt_struct/module_methods"
|
2
3
|
require "opt_struct/instance_methods"
|
3
4
|
|
4
5
|
module OptStruct
|
6
|
+
|
5
7
|
def self._inject_struct(target, source, args = [], defaults = {}, &callback)
|
6
8
|
structs = Array(source.instance_variable_get(:@_opt_structs)).dup
|
7
9
|
if args.any? || defaults.any? || callback
|
@@ -15,19 +17,12 @@ module OptStruct
|
|
15
17
|
include InstanceMethods
|
16
18
|
end
|
17
19
|
structs.each do |s_args, s_defaults, s_callback|
|
18
|
-
target.
|
19
|
-
|
20
|
-
|
21
|
-
end
|
22
|
-
target.class_exec(&s_callback) if s_callback
|
20
|
+
target.expect_arguments *s_args if s_args.any?
|
21
|
+
target.options s_defaults if s_defaults.any?
|
22
|
+
target.class_exec(&s_callback) if s_callback
|
23
23
|
end
|
24
24
|
else
|
25
|
-
target.
|
26
|
-
def self.included(klass)
|
27
|
-
OptStruct._inject_struct(klass, self)
|
28
|
-
super(klass)
|
29
|
-
end
|
30
|
-
end
|
25
|
+
target.singleton_class.prepend ModuleMethods
|
31
26
|
end
|
32
27
|
target
|
33
28
|
end
|
@@ -37,21 +32,16 @@ module OptStruct
|
|
37
32
|
super(klass)
|
38
33
|
end
|
39
34
|
|
40
|
-
def self.
|
41
|
-
|
42
|
-
|
43
|
-
_inject_struct(Class.new, self, args, defaults, &callback)
|
35
|
+
def self.prepended(klass)
|
36
|
+
_inject_struct(klass, self)
|
37
|
+
super(klass)
|
44
38
|
end
|
45
39
|
|
46
|
-
def self.
|
47
|
-
|
48
|
-
args.map!(&:to_sym)
|
49
|
-
_inject_struct(Module.new, self, args, defaults, &callback)
|
40
|
+
def self.new(*args, **defaults, &callback)
|
41
|
+
_inject_struct(Class.new, self, args.map(&:to_sym), defaults, &callback)
|
50
42
|
end
|
51
43
|
|
52
|
-
|
53
|
-
|
54
|
-
def self.check_for_invalid_args(args)
|
55
|
-
|
44
|
+
def self.build(*args, **defaults, &callback)
|
45
|
+
_inject_struct(Module.new, self, args.map(&:to_sym), defaults, &callback)
|
56
46
|
end
|
57
47
|
end
|
@@ -16,12 +16,16 @@ module OptStruct
|
|
16
16
|
end
|
17
17
|
|
18
18
|
def option_reader(*keys)
|
19
|
+
check_reserved_words(keys)
|
20
|
+
|
19
21
|
keys.each do |key|
|
20
22
|
define_method(key) { options[key] }
|
21
23
|
end
|
22
24
|
end
|
23
25
|
|
24
26
|
def option_writer(*keys)
|
27
|
+
check_reserved_words(keys)
|
28
|
+
|
25
29
|
keys.each do |key|
|
26
30
|
define_method("#{key}=") { |value| options[key] = value }
|
27
31
|
end
|
@@ -52,6 +56,8 @@ module OptStruct
|
|
52
56
|
end
|
53
57
|
|
54
58
|
def expect_arguments(*arguments)
|
59
|
+
check_reserved_words(arguments)
|
60
|
+
|
55
61
|
existing = expected_arguments.count
|
56
62
|
expected_arguments.concat(arguments)
|
57
63
|
|
@@ -66,5 +72,17 @@ module OptStruct
|
|
66
72
|
def expected_arguments
|
67
73
|
@expected_arguments ||= []
|
68
74
|
end
|
75
|
+
|
76
|
+
private
|
77
|
+
|
78
|
+
RESERVED_WORDS = %i(class options fetch check_required_args check_required_keys)
|
79
|
+
|
80
|
+
def check_reserved_words(words)
|
81
|
+
Array(words).each do |word|
|
82
|
+
if RESERVED_WORDS.member?(word)
|
83
|
+
raise ArgumentError, "Use of reserved word is not permitted: #{word.inspect}"
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
69
87
|
end
|
70
88
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module OptStruct
|
2
|
+
module ModuleMethods
|
3
|
+
|
4
|
+
def included(klass)
|
5
|
+
OptStruct._inject_struct(klass, self)
|
6
|
+
super(klass)
|
7
|
+
end
|
8
|
+
|
9
|
+
def prepended(klass)
|
10
|
+
OptStruct._inject_struct(klass, self)
|
11
|
+
super(klass)
|
12
|
+
end
|
13
|
+
|
14
|
+
# These methods are meant to duplicate the macro methods in ClassMethods
|
15
|
+
# When they are called in a module the action is deferred by adding a block to the struct chain
|
16
|
+
%i(
|
17
|
+
required
|
18
|
+
option_reader
|
19
|
+
option_writer
|
20
|
+
option_accessor
|
21
|
+
option
|
22
|
+
options
|
23
|
+
expect_arguments
|
24
|
+
).each do |class_method|
|
25
|
+
define_method(class_method) do |*args|
|
26
|
+
@_opt_structs << [[], {}, -> { send(class_method, *args) }]
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
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.7.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-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -63,6 +63,7 @@ files:
|
|
63
63
|
- lib/opt_struct.rb
|
64
64
|
- lib/opt_struct/class_methods.rb
|
65
65
|
- lib/opt_struct/instance_methods.rb
|
66
|
+
- lib/opt_struct/module_methods.rb
|
66
67
|
- opt_struct.gemspec
|
67
68
|
homepage: https://github.com/carlzulauf/opt_struct
|
68
69
|
licenses:
|