traver 0.2.0 → 0.2.1

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 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