opt_struct 0.5.0 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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