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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 338d95191adfb1ad3addd5e0d12331e772186643
4
- data.tar.gz: f22f8a30c993626c0985c4f3bc5e8685caedb6e4
3
+ metadata.gz: 8aa831df193e85e3df16534f4013983a7a73857d
4
+ data.tar.gz: 8be0b0fbe6e926eed801c6dc78f87661a98c3886
5
5
  SHA512:
6
- metadata.gz: c8855182f196e730cd4571c4f32a79d43c95e8d87b9ef79b90d9f827db362c48ae788b67a00083d3e3f3050fe73c0aaf8c29c4704550212bbc51b3e07a6b2524
7
- data.tar.gz: 724bcaeb91174f485b5c4d6bbb36818e227c790959b357def7d56ae55edc4d40bd3224c8806f0a5a3e09f2c49f9ce51556e88d0f512b9cec11fa994b141a98e6
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
@@ -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
@@ -1,3 +1,3 @@
1
1
  module Traver
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
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.0
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