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.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/opt_struct.rb +31 -28
  3. data/opt_struct.gemspec +1 -1
  4. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 55e3b71a809a00e523194d64dafde4a2d6e2e738
4
- data.tar.gz: 2cacaade967a5840dfe41d0f7d2358b55b1dc603
3
+ metadata.gz: 86875cc60a9f0c8baa956deb6b0f262ec19bab4e
4
+ data.tar.gz: bfa7c755fc3a9f33fcf4f75be7c9a3a4d94d350b
5
5
  SHA512:
6
- metadata.gz: 62439a89421d58a67470a4c3c614833a160781cd9a58711eeb4e5c4683986433d1eca64433f059f79bd6bfe12608096886eccca13cbea748ce813fb2f02cffa5
7
- data.tar.gz: a33b20f55781929e3d955c69826ef0287cdefc388e0f88ef7eb57baaa8f12716704299b32b3dbd0eda22a301b6801b9b0f346b10df39036fd07981eee8244486
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.inject_struct(target_klass, &more_block)
6
- target_klass.instance_exec do
7
- extend ClassMethods
8
- attr_reader :options
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
- target_klass.instance_exec(&more_block) if block_given?
12
- target_klass
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
- inject_struct(klass)
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
- klass = inject_struct(Class.new) do
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 do
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
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "opt_struct"
3
- spec.version = "0.5.0"
3
+ spec.version = "0.6.0"
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.5.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-09 00:00:00.000000000 Z
11
+ date: 2017-06-10 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler