nina 0.1.2 → 0.1.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Gemfile.lock +3 -3
- data/lib/nina/assembler.rb +4 -25
- data/lib/nina/builder.rb +3 -4
- data/lib/nina/version.rb +1 -1
- data/lib/nina.rb +40 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2fa283d983d2df265fc4d74813c9abefb8f351c2582245d359a497514f4a61a5
|
4
|
+
data.tar.gz: 0e6ee2d867415efdec03f53d35be33a99ad202b4e2aa9f76ab9683b9657af999
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 822d7360687494fefea19be97898eefa121c3aff71ba579d1030730b9a3b97e5409d6fe53990f43f2b175e132ff78a7184c79956e2545647aeaccd1c0a8c8c2a
|
7
|
+
data.tar.gz: fc42924b259b4c68ceca3e14b951ae45aadd61214b8ac7944294a283d183cd5bfedc6b4248287b55364e175ef9bfcb7fbfaad8e5c564a33fcbbc0acd9b851aaf
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
nina (0.1.
|
5
|
-
toritori (= 0.1
|
4
|
+
nina (0.1.4)
|
5
|
+
toritori (= 0.2.1)
|
6
6
|
|
7
7
|
GEM
|
8
8
|
remote: https://rubygems.org/
|
@@ -58,7 +58,7 @@ GEM
|
|
58
58
|
json (>= 1.8, < 3)
|
59
59
|
simplecov-html (~> 0.10.0)
|
60
60
|
simplecov-html (0.10.2)
|
61
|
-
toritori (0.1
|
61
|
+
toritori (0.2.1)
|
62
62
|
unicode-display_width (2.4.2)
|
63
63
|
|
64
64
|
PLATFORMS
|
data/lib/nina/assembler.rb
CHANGED
@@ -3,27 +3,6 @@
|
|
3
3
|
module Nina
|
4
4
|
# Generates module that adds support for objects creation
|
5
5
|
class Assembler
|
6
|
-
# Adds ability to delegeate methods via method_missing
|
7
|
-
module MethodMissingDelegation
|
8
|
-
def method_missing(name, *attrs, &block)
|
9
|
-
return super unless methods.detect { |m| m == :__predecessor }
|
10
|
-
|
11
|
-
public_send(__predecessor).public_send(name, *attrs, &block)
|
12
|
-
end
|
13
|
-
|
14
|
-
def respond_to_missing?(method_name, _include_private = false)
|
15
|
-
return super unless methods.detect { |m| m == :__predecessor }
|
16
|
-
|
17
|
-
public_send(__predecessor).respond_to?(method_name)
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.def_accessor(accessor, on:, to:, delegate: false)
|
22
|
-
on.define_singleton_method(:__predecessor) { accessor }
|
23
|
-
on.define_singleton_method(accessor) { to }
|
24
|
-
on.extend(MethodMissingDelegation) if delegate
|
25
|
-
end
|
26
|
-
|
27
6
|
def initialize(abstract_factory)
|
28
7
|
@abstract_factory = abstract_factory
|
29
8
|
end
|
@@ -31,8 +10,8 @@ module Nina
|
|
31
10
|
def inject(build_order, initialization = {}, callbacks: nil, delegate: false)
|
32
11
|
build_order.each.with_index(-1).inject(nil) do |prev, (name, idx)|
|
33
12
|
object = create_object(name, initialization)
|
34
|
-
|
35
|
-
callbacks
|
13
|
+
Nina.def_accessor(build_order[idx], on: object, to: prev, delegate: delegate) if prev
|
14
|
+
callbacks[name].each { |c| c.call(object) } if callbacks&.key?(name)
|
36
15
|
object
|
37
16
|
end
|
38
17
|
end
|
@@ -40,10 +19,10 @@ module Nina
|
|
40
19
|
private
|
41
20
|
|
42
21
|
def create_object(name, initialization = {})
|
43
|
-
return @abstract_factory.
|
22
|
+
return @abstract_factory.factories[name].create if initialization[name].nil?
|
44
23
|
|
45
24
|
args, kwargs, block = initialization[name]
|
46
|
-
@abstract_factory.
|
25
|
+
@abstract_factory.factories[name].create(*args, **kwargs, &block)
|
47
26
|
end
|
48
27
|
end
|
49
28
|
end
|
data/lib/nina/builder.rb
CHANGED
@@ -31,8 +31,7 @@ module Nina
|
|
31
31
|
build_order_list << name
|
32
32
|
super
|
33
33
|
define_singleton_method(name) do |klass = nil, &definition|
|
34
|
-
factories[__method__].subclass
|
35
|
-
factories[__method__].subclass(&definition) if definition
|
34
|
+
factories[__method__].subclass(produces: klass, &definition)
|
36
35
|
end
|
37
36
|
end
|
38
37
|
end
|
@@ -65,7 +64,7 @@ module Nina
|
|
65
64
|
@assembler.inject(
|
66
65
|
@abstract_factory.build_order_list,
|
67
66
|
@initialization.to_h,
|
68
|
-
callbacks: callbacks,
|
67
|
+
callbacks: callbacks.to_h,
|
69
68
|
delegate: delegate
|
70
69
|
)
|
71
70
|
end
|
@@ -76,7 +75,7 @@ module Nina
|
|
76
75
|
@assembler.inject(
|
77
76
|
@abstract_factory.build_order_list.reverse,
|
78
77
|
@initialization.to_h,
|
79
|
-
callbacks: callbacks,
|
78
|
+
callbacks: callbacks.to_h,
|
80
79
|
delegate: delegate
|
81
80
|
)
|
82
81
|
end
|
data/lib/nina/version.rb
CHANGED
data/lib/nina.rb
CHANGED
@@ -31,7 +31,47 @@ module Nina
|
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
34
|
+
# Adds ability to delegeate methods via method_missing
|
35
|
+
module MethodMissingDelegation
|
36
|
+
def method_missing(name, *attrs, **kwargs, &block)
|
37
|
+
if (prev = predecessors.detect { |o| o.public_methods.include?(name) })
|
38
|
+
prev.public_send(name, *attrs, **kwargs, &block)
|
39
|
+
else
|
40
|
+
super
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
def respond_to_missing?(method_name, _include_private = false)
|
45
|
+
public_methods.detect { |m| m == :predecessor_name } || super
|
46
|
+
end
|
47
|
+
|
48
|
+
def predecessors
|
49
|
+
@predecessors ||= begin
|
50
|
+
obj = self
|
51
|
+
[].tap do |list|
|
52
|
+
list << obj = obj.public_send(obj.predecessor_name) while obj.methods.detect { |m| m == :predecessor_name }
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
34
58
|
def self.included(receiver)
|
35
59
|
receiver.extend ClassMethods
|
36
60
|
end
|
61
|
+
|
62
|
+
def self.def_accessor(accessor, on:, to:, delegate: false)
|
63
|
+
on.define_singleton_method(accessor) { to }
|
64
|
+
return unless delegate
|
65
|
+
|
66
|
+
on.define_singleton_method(:predecessor_name) { accessor }
|
67
|
+
on.extend(MethodMissingDelegation)
|
68
|
+
end
|
69
|
+
|
70
|
+
def self.linked_list(build_config, delegate: false)
|
71
|
+
build_order = build_config.keys
|
72
|
+
build_config.each.with_index(-1).inject(nil) do |prev, ((_, object), idx)|
|
73
|
+
Nina.def_accessor(build_order[idx], on: object, to: prev, delegate: delegate) if prev
|
74
|
+
object
|
75
|
+
end
|
76
|
+
end
|
37
77
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nina
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrii Baran
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: toritori
|
@@ -16,14 +16,14 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - '='
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 0.1
|
19
|
+
version: 0.2.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - '='
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 0.1
|
26
|
+
version: 0.2.1
|
27
27
|
description: Reduce biolerplate code when you need to create complex OOD composition
|
28
28
|
email:
|
29
29
|
- andriy.baran.v@gmail.com
|