simple_facade 0.1.3 → 0.2.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/Gemfile.lock +1 -1
- data/lib/simple_facade.rb +1 -0
- data/lib/simple_facade/linking.rb +88 -0
- data/lib/simple_facade/version.rb +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: 98b40c93e2ca44d489e5a78be91f67ee30c44a0a
|
4
|
+
data.tar.gz: 3b9a762f13d9216102971cba97d9a22a54a5796a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4eca7ea95b0a4676c8e799fd4363f48c47e235007191a609b5e2e1d9e7f037a86b6b4189a08452b3f898b2187a204492d684011cf3669726eadb451beae79390
|
7
|
+
data.tar.gz: 6e7ec31700521482dd31ae8d10ce3b1399db2eb99b240d2cc2102ae2bb3cc1cd9461d312202943f11dc2cd8ae0372520b28c0ec1e0c53330a321e589a1c74dab
|
data/Gemfile.lock
CHANGED
data/lib/simple_facade.rb
CHANGED
@@ -0,0 +1,88 @@
|
|
1
|
+
module SimpleFacade
|
2
|
+
module Linking
|
3
|
+
READERS = [
|
4
|
+
SUCCESSOR = :successor,
|
5
|
+
PREDECESSOR = :predecessor,
|
6
|
+
]
|
7
|
+
|
8
|
+
class LinkingObserver
|
9
|
+
attr_reader :current_object, :previous_step, :reader
|
10
|
+
|
11
|
+
def initialize(reader = nil)
|
12
|
+
@reader = reader
|
13
|
+
end
|
14
|
+
|
15
|
+
def double?
|
16
|
+
reader.nil?
|
17
|
+
end
|
18
|
+
|
19
|
+
def single?
|
20
|
+
!double?
|
21
|
+
end
|
22
|
+
|
23
|
+
def reverse?
|
24
|
+
reader == SimpleFacade::Linking::PREDECESSOR
|
25
|
+
end
|
26
|
+
|
27
|
+
def direct?
|
28
|
+
reader == SimpleFacade::Linking::SUCCESSOR
|
29
|
+
end
|
30
|
+
|
31
|
+
def on_new_object(accessor, object)
|
32
|
+
@current_object = link(@current_object, object, @previous_step, accessor)
|
33
|
+
@previous_step = accessor
|
34
|
+
end
|
35
|
+
|
36
|
+
def link(current_object, next_object, predecessor, successor)
|
37
|
+
return next_object if predecessor.nil? || current_object.nil?
|
38
|
+
|
39
|
+
link_predecessor(current_object, next_object, predecessor)
|
40
|
+
link_successor(current_object, next_object, successor)
|
41
|
+
|
42
|
+
next_object
|
43
|
+
end
|
44
|
+
|
45
|
+
def link_predecessor(current_object, next_object, predecessor)
|
46
|
+
return if single? && direct?
|
47
|
+
next_object.singleton_class.class_eval do
|
48
|
+
attr_accessor :predecessor
|
49
|
+
end
|
50
|
+
next_object.predecessor = predecessor
|
51
|
+
next_object.singleton_class.class_eval do
|
52
|
+
attr_accessor next_object.predecessor
|
53
|
+
end
|
54
|
+
next_object.public_send(:"#{next_object.predecessor}=", current_object)
|
55
|
+
end
|
56
|
+
|
57
|
+
def link_successor(current_object, next_object, successor)
|
58
|
+
return if single? && reverse?
|
59
|
+
current_object.singleton_class.class_eval do
|
60
|
+
attr_accessor :successor
|
61
|
+
end
|
62
|
+
current_object.successor = successor
|
63
|
+
current_object.singleton_class.class_eval do
|
64
|
+
attr_accessor current_object.successor
|
65
|
+
end
|
66
|
+
current_object.public_send(:"#{current_object.successor}=", next_object)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def link_members
|
71
|
+
link(PREDECESSOR)
|
72
|
+
end
|
73
|
+
|
74
|
+
def double_link_members
|
75
|
+
link(nil)
|
76
|
+
end
|
77
|
+
|
78
|
+
private
|
79
|
+
|
80
|
+
def link(reader)
|
81
|
+
observer = LinkingObserver.new(reader)
|
82
|
+
__subjects__.each do |k, v|
|
83
|
+
observer.on_new_object(k, v)
|
84
|
+
end
|
85
|
+
observer.current_object
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: simple_facade
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrii Baran
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
11
|
+
date: 2020-09-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,6 +86,7 @@ files:
|
|
86
86
|
- bin/console
|
87
87
|
- bin/setup
|
88
88
|
- lib/simple_facade.rb
|
89
|
+
- lib/simple_facade/linking.rb
|
89
90
|
- lib/simple_facade/version.rb
|
90
91
|
- simple_facade.gemspec
|
91
92
|
homepage: https://github.com/andriy-baran/simple_facade
|