traver 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/traver.rb +9 -0
- data/lib/traver/graph.rb +40 -0
- data/lib/traver/graph_creator.rb +20 -0
- data/lib/traver/object_creator.rb +7 -0
- data/lib/traver/version.rb +1 -1
- metadata +3 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8aa831df193e85e3df16534f4013983a7a73857d
|
4
|
+
data.tar.gz: 8be0b0fbe6e926eed801c6dc78f87661a98c3886
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 04976719f6a6d1635137bba9e70a890ef40837a7822c95ddfb6c4dfd0983cde6909fd7c7c46044ad9efa36c4c41e12f6be462c5698d5dc2d72727ee0c9f1ea10
|
7
|
+
data.tar.gz: 48cd4fffd40e5dd460997f4ba0bce0d636b56feef4389f1adda876fd79e3ef5d91cbcdb83e580e2ea83c4fb65cf31808ca0c3fd13cc902f56af28be6e326cd89
|
data/lib/traver.rb
CHANGED
@@ -1,6 +1,8 @@
|
|
1
1
|
require "traver/version"
|
2
2
|
require "traver/factory_definer"
|
3
3
|
require "traver/object_creator"
|
4
|
+
require "traver/graph"
|
5
|
+
require "traver/graph_creator"
|
4
6
|
|
5
7
|
module Traver
|
6
8
|
class Error < Exception; end
|
@@ -16,4 +18,11 @@ module Traver
|
|
16
18
|
|
17
19
|
object_creator.created_object
|
18
20
|
end
|
21
|
+
|
22
|
+
def self.create_graph(params = {})
|
23
|
+
graph_creator = GraphCreator.new(params)
|
24
|
+
graph_creator.create_graph
|
25
|
+
|
26
|
+
graph_creator.graph
|
27
|
+
end
|
19
28
|
end
|
data/lib/traver/graph.rb
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
module Traver
|
2
|
+
class Graph
|
3
|
+
def initialize
|
4
|
+
@vertices = {}
|
5
|
+
end
|
6
|
+
|
7
|
+
def add_vertex(key, object)
|
8
|
+
vertices[key] ||= []
|
9
|
+
vertices[key] << object
|
10
|
+
end
|
11
|
+
|
12
|
+
def [](key)
|
13
|
+
key = key.to_s
|
14
|
+
|
15
|
+
if plural?(key)
|
16
|
+
vertices[singularize(key).to_sym]
|
17
|
+
else
|
18
|
+
name, index = key.split(/(\d+)$/)
|
19
|
+
index = (index || 1).to_i
|
20
|
+
|
21
|
+
vertices[name.to_sym][index - 1]
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def method_missing(method_name, *args)
|
26
|
+
self[method_name]
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
attr_reader :vertices
|
31
|
+
|
32
|
+
def plural?(value)
|
33
|
+
value.end_with?("s")
|
34
|
+
end
|
35
|
+
|
36
|
+
def singularize(value)
|
37
|
+
value.chomp("s")
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Traver
|
2
|
+
class GraphCreator
|
3
|
+
attr_reader :params
|
4
|
+
attr_reader :graph
|
5
|
+
|
6
|
+
def initialize(params = {})
|
7
|
+
@params = params
|
8
|
+
@graph = Graph.new
|
9
|
+
end
|
10
|
+
|
11
|
+
def create_graph
|
12
|
+
object_creator = ObjectCreator.new(params)
|
13
|
+
object_creator.after_create = lambda do |creator|
|
14
|
+
graph.add_vertex(creator.factory_name, creator.created_object)
|
15
|
+
end
|
16
|
+
|
17
|
+
object_creator.create_object
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
module Traver
|
2
2
|
class ObjectCreator
|
3
3
|
attr_reader :factory_name, :params
|
4
|
+
attr_accessor :after_create
|
4
5
|
attr_reader :created_object
|
5
6
|
|
6
7
|
def initialize(options)
|
@@ -14,6 +15,7 @@ module Traver
|
|
14
15
|
instantiate_object
|
15
16
|
set_object_state
|
16
17
|
persist_object
|
18
|
+
call_after_create_hook
|
17
19
|
end
|
18
20
|
|
19
21
|
private
|
@@ -53,6 +55,7 @@ module Traver
|
|
53
55
|
|
54
56
|
def do_create_object(params)
|
55
57
|
object_creator = ObjectCreator.new(params)
|
58
|
+
object_creator.after_create = after_create
|
56
59
|
object_creator.create_object
|
57
60
|
|
58
61
|
object_creator.created_object
|
@@ -81,5 +84,9 @@ module Traver
|
|
81
84
|
def persist_object
|
82
85
|
created_object.save if defined?(Rails)
|
83
86
|
end
|
87
|
+
|
88
|
+
def call_after_create_hook
|
89
|
+
after_create.call(self) if after_create
|
90
|
+
end
|
84
91
|
end
|
85
92
|
end
|
data/lib/traver/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: traver
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yuri Kaspervich
|
@@ -97,6 +97,8 @@ files:
|
|
97
97
|
- bin/setup
|
98
98
|
- lib/traver.rb
|
99
99
|
- lib/traver/factory_definer.rb
|
100
|
+
- lib/traver/graph.rb
|
101
|
+
- lib/traver/graph_creator.rb
|
100
102
|
- lib/traver/object_creator.rb
|
101
103
|
- lib/traver/version.rb
|
102
104
|
- traver.gemspec
|