pacer 0.9.1.1-java

Sign up to get free protection for your applications and to get access to all the features.
Files changed (184) hide show
  1. data/.autotest +8 -0
  2. data/.document +5 -0
  3. data/.gitignore +26 -0
  4. data/.rspec +1 -0
  5. data/.rvmrc +0 -0
  6. data/CONTRIBUTORS +5 -0
  7. data/Gemfile +4 -0
  8. data/LICENSE.txt +24 -0
  9. data/README.md +187 -0
  10. data/Rakefile +49 -0
  11. data/autotest/discover.rb +1 -0
  12. data/bin/autospec +16 -0
  13. data/bin/autotest +16 -0
  14. data/bin/rake +16 -0
  15. data/bin/rcov +16 -0
  16. data/bin/rspec +16 -0
  17. data/bin/yard +16 -0
  18. data/bin/yardoc +16 -0
  19. data/lib/pacer/blueprints/extensions.rb +77 -0
  20. data/lib/pacer/blueprints/multi_graph.rb +121 -0
  21. data/lib/pacer/blueprints/ruby_graph.rb +199 -0
  22. data/lib/pacer/blueprints/tg.rb +100 -0
  23. data/lib/pacer/blueprints.rb +4 -0
  24. data/lib/pacer/core/graph/edges_route.rb +92 -0
  25. data/lib/pacer/core/graph/element_route.rb +171 -0
  26. data/lib/pacer/core/graph/graph_index_route.rb +48 -0
  27. data/lib/pacer/core/graph/graph_route.rb +55 -0
  28. data/lib/pacer/core/graph/mixed_route.rb +96 -0
  29. data/lib/pacer/core/graph/vertices_route.rb +220 -0
  30. data/lib/pacer/core/graph.rb +13 -0
  31. data/lib/pacer/core/route.rb +502 -0
  32. data/lib/pacer/core/side_effect.rb +11 -0
  33. data/lib/pacer/core.rb +8 -0
  34. data/lib/pacer/exceptions.rb +11 -0
  35. data/lib/pacer/extensions/block_filter_element.rb +22 -0
  36. data/lib/pacer/extensions.rb +6 -0
  37. data/lib/pacer/filter/block_filter.rb +31 -0
  38. data/lib/pacer/filter/collection_filter.rb +109 -0
  39. data/lib/pacer/filter/empty_filter.rb +70 -0
  40. data/lib/pacer/filter/future_filter.rb +68 -0
  41. data/lib/pacer/filter/index_filter.rb +30 -0
  42. data/lib/pacer/filter/loop_filter.rb +95 -0
  43. data/lib/pacer/filter/object_filter.rb +55 -0
  44. data/lib/pacer/filter/property_filter/edge_filters.rb +93 -0
  45. data/lib/pacer/filter/property_filter/filters.rb +269 -0
  46. data/lib/pacer/filter/property_filter.rb +111 -0
  47. data/lib/pacer/filter/random_filter.rb +13 -0
  48. data/lib/pacer/filter/range_filter.rb +104 -0
  49. data/lib/pacer/filter/uniq_filter.rb +12 -0
  50. data/lib/pacer/filter/where_filter/node_visitor.rb +280 -0
  51. data/lib/pacer/filter/where_filter.rb +47 -0
  52. data/lib/pacer/filter.rb +17 -0
  53. data/lib/pacer/function_resolver.rb +43 -0
  54. data/lib/pacer/graph/edge_mixin.rb +127 -0
  55. data/lib/pacer/graph/element_mixin.rb +202 -0
  56. data/lib/pacer/graph/graph_indices_mixin.rb +93 -0
  57. data/lib/pacer/graph/graph_mixin.rb +361 -0
  58. data/lib/pacer/graph/graph_transactions_mixin.rb +207 -0
  59. data/lib/pacer/graph/index_mixin.rb +30 -0
  60. data/lib/pacer/graph/vertex_mixin.rb +119 -0
  61. data/lib/pacer/graph.rb +14 -0
  62. data/lib/pacer/pipe/blackbox_pipeline.rb +48 -0
  63. data/lib/pacer/pipe/block_filter_pipe.rb +38 -0
  64. data/lib/pacer/pipe/collection_filter_pipe.rb +10 -0
  65. data/lib/pacer/pipe/cross_product_transform_pipe.rb +48 -0
  66. data/lib/pacer/pipe/enumerable_pipe.rb +30 -0
  67. data/lib/pacer/pipe/expandable_pipe.rb +63 -0
  68. data/lib/pacer/pipe/id_collection_filter_pipe.rb +33 -0
  69. data/lib/pacer/pipe/is_empty_pipe.rb +30 -0
  70. data/lib/pacer/pipe/is_unique_pipe.rb +61 -0
  71. data/lib/pacer/pipe/label_collection_filter_pipe.rb +21 -0
  72. data/lib/pacer/pipe/label_prefix_pipe.rb +21 -0
  73. data/lib/pacer/pipe/loop_pipe.rb +86 -0
  74. data/lib/pacer/pipe/map_pipe.rb +36 -0
  75. data/lib/pacer/pipe/never_pipe.rb +9 -0
  76. data/lib/pacer/pipe/process_pipe.rb +37 -0
  77. data/lib/pacer/pipe/property_comparison_pipe.rb +40 -0
  78. data/lib/pacer/pipe/ruby_pipe.rb +25 -0
  79. data/lib/pacer/pipe/simple_visitor_pipe.rb +43 -0
  80. data/lib/pacer/pipe/stream_sort_pipe.rb +84 -0
  81. data/lib/pacer/pipe/stream_uniq_pipe.rb +33 -0
  82. data/lib/pacer/pipe/type_filter_pipe.rb +22 -0
  83. data/lib/pacer/pipe/unary_transform_pipe.rb +59 -0
  84. data/lib/pacer/pipe/variable_store_iterator_wrapper.rb +26 -0
  85. data/lib/pacer/pipe/visitor_pipe.rb +67 -0
  86. data/lib/pacer/pipes.rb +61 -0
  87. data/lib/pacer/route/mixin/bulk_operations.rb +52 -0
  88. data/lib/pacer/route/mixin/route_operations.rb +107 -0
  89. data/lib/pacer/route/mixin/variable_route_module.rb +26 -0
  90. data/lib/pacer/route/mixins.rb +3 -0
  91. data/lib/pacer/route.rb +228 -0
  92. data/lib/pacer/routes.rb +6 -0
  93. data/lib/pacer/side_effect/aggregate.rb +31 -0
  94. data/lib/pacer/side_effect/counted.rb +30 -0
  95. data/lib/pacer/side_effect/group_count.rb +44 -0
  96. data/lib/pacer/side_effect/is_unique.rb +32 -0
  97. data/lib/pacer/side_effect/section.rb +25 -0
  98. data/lib/pacer/side_effect/visitor.rb +37 -0
  99. data/lib/pacer/side_effect.rb +11 -0
  100. data/lib/pacer/support/array_list.rb +28 -0
  101. data/lib/pacer/support/enumerable.rb +100 -0
  102. data/lib/pacer/support/hash.rb +9 -0
  103. data/lib/pacer/support/iterator_mixins.rb +110 -0
  104. data/lib/pacer/support/native_exception.rb +22 -0
  105. data/lib/pacer/support/proc.rb +16 -0
  106. data/lib/pacer/support.rb +10 -0
  107. data/lib/pacer/transform/cap.rb +50 -0
  108. data/lib/pacer/transform/gather.rb +9 -0
  109. data/lib/pacer/transform/has_count_cap.rb +41 -0
  110. data/lib/pacer/transform/join.rb +181 -0
  111. data/lib/pacer/transform/map.rb +23 -0
  112. data/lib/pacer/transform/path.rb +50 -0
  113. data/lib/pacer/transform/process.rb +23 -0
  114. data/lib/pacer/transform/scatter.rb +23 -0
  115. data/lib/pacer/transform/sort_section.rb +103 -0
  116. data/lib/pacer/transform/stream_sort.rb +21 -0
  117. data/lib/pacer/transform/stream_uniq.rb +21 -0
  118. data/lib/pacer/transform.rb +16 -0
  119. data/lib/pacer/utils/graph_analysis.rb +112 -0
  120. data/lib/pacer/utils/trie.rb +93 -0
  121. data/lib/pacer/utils/tsort.rb +65 -0
  122. data/lib/pacer/utils/y_files.rb +127 -0
  123. data/lib/pacer/utils.rb +10 -0
  124. data/lib/pacer/version.rb +13 -0
  125. data/lib/pacer/wrappers/edge_wrapper.rb +51 -0
  126. data/lib/pacer/wrappers/element_wrapper.rb +78 -0
  127. data/lib/pacer/wrappers/new_element.rb +106 -0
  128. data/lib/pacer/wrappers/vertex_wrapper.rb +51 -0
  129. data/lib/pacer/wrappers.rb +19 -0
  130. data/lib/pacer-0.9.1.1-standalone.jar +0 -0
  131. data/lib/pacer.rb +290 -0
  132. data/pacer.gemspec +30 -0
  133. data/pom/standalone.xml +22 -0
  134. data/pom.xml +124 -0
  135. data/samples/grateful-dead.xml +26380 -0
  136. data/samples/grateful_dead.rb +63 -0
  137. data/samples/profile.rb +15 -0
  138. data/spec/data/grateful-dead.xml +26380 -0
  139. data/spec/data/pacer.graphml +319 -0
  140. data/spec/pacer/blueprints/dex_spec.rb +172 -0
  141. data/spec/pacer/blueprints/neo4j_spec.rb +177 -0
  142. data/spec/pacer/blueprints/tg_spec.rb +128 -0
  143. data/spec/pacer/core/graph/edges_route_spec.rb +52 -0
  144. data/spec/pacer/core/graph/element_route_spec.rb +46 -0
  145. data/spec/pacer/core/graph/graph_route_spec.rb +94 -0
  146. data/spec/pacer/core/graph/vertices_route_spec.rb +169 -0
  147. data/spec/pacer/core/route_spec.rb +197 -0
  148. data/spec/pacer/filter/collection_filter_spec.rb +19 -0
  149. data/spec/pacer/filter/empty_filter_spec.rb +29 -0
  150. data/spec/pacer/filter/future_filter_spec.rb +97 -0
  151. data/spec/pacer/filter/loop_filter_spec.rb +31 -0
  152. data/spec/pacer/filter/property_filter_spec.rb +111 -0
  153. data/spec/pacer/filter/random_filter_spec.rb +17 -0
  154. data/spec/pacer/filter/uniq_filter_spec.rb +18 -0
  155. data/spec/pacer/filter/where_filter_spec.rb +93 -0
  156. data/spec/pacer/graph/edge_mixin_spec.rb +116 -0
  157. data/spec/pacer/graph/element_mixin_spec.rb +297 -0
  158. data/spec/pacer/graph/graph_mixin_spec.rb +538 -0
  159. data/spec/pacer/graph/index_mixin_spec.rb +0 -0
  160. data/spec/pacer/graph/vertex_mixin_spec.rb +192 -0
  161. data/spec/pacer/pipe/block_filter_pipe_spec.rb +0 -0
  162. data/spec/pacer/pipe/labels_filter_pipe_spec.rb +0 -0
  163. data/spec/pacer/pipe/ruby_pipe_spec.rb +0 -0
  164. data/spec/pacer/pipe/type_filter_pipe_spec.rb +0 -0
  165. data/spec/pacer/route/mixin/base_spec.rb +419 -0
  166. data/spec/pacer/route/mixin/bulk_operations_spec.rb +30 -0
  167. data/spec/pacer/route/mixin/route_operations_spec.rb +127 -0
  168. data/spec/pacer/support/array_list_spec.rb +0 -0
  169. data/spec/pacer/support/enumerable_spec.rb +115 -0
  170. data/spec/pacer/transform/join_spec.rb +138 -0
  171. data/spec/pacer/transform/path_spec.rb +54 -0
  172. data/spec/pacer/utils/tsort_spec.rb +89 -0
  173. data/spec/pacer/wrapper/edge_wrapper_spec.rb +33 -0
  174. data/spec/pacer/wrapper/element_wrapper_spec.rb +169 -0
  175. data/spec/pacer/wrapper/vertex_wrapper_spec.rb +33 -0
  176. data/spec/pacer_spec.rb +0 -0
  177. data/spec/spec_helper.rb +91 -0
  178. data/spec/support/contexts.rb +14 -0
  179. data/spec/support/graph_runner.rb +142 -0
  180. data/spec/support/matchers.rb +19 -0
  181. data/spec/support/use_transactions.rb +31 -0
  182. data/spec/tackle/simple_mixin.rb +21 -0
  183. data/spec/tackle/tinkerpop_graph_mixins.rb +60 -0
  184. metadata +364 -0
@@ -0,0 +1,116 @@
1
+ require 'spec_helper'
2
+
3
+ shared_examples_for Pacer::EdgeMixin do
4
+ use_simple_graph_data
5
+
6
+ describe '#e' do
7
+ subject { e0.e }
8
+ it { should be_an_edges_route }
9
+ it { should_not be_a(graph.element_type(:edge)) }
10
+ it { should_not be_an_instance_of(graph.element_type(:edge)) }
11
+ end
12
+
13
+ describe '#add_extensions' do
14
+ context 'no extensions' do
15
+ subject { e0.add_extensions([]) }
16
+ its('extensions.to_a') { should == [] }
17
+ it { should_not be_a(Pacer::Wrappers::ElementWrapper) }
18
+ end
19
+
20
+ context 'with extensions' do
21
+ subject { e0.add_extensions([Tackle::SimpleMixin]) }
22
+ its('extensions.to_a') { should == [Tackle::SimpleMixin] }
23
+ it { should be_a(Pacer::Wrappers::ElementWrapper) }
24
+ it { should be_a(Pacer::Wrappers::EdgeWrapper) }
25
+ it { should_not be_a(Pacer::Wrappers::VertexWrapper) }
26
+
27
+ describe '#e' do
28
+ subject { e0.add_extensions([Tackle::SimpleMixin]).e }
29
+ its('extensions.to_a') { should == [Tackle::SimpleMixin] }
30
+ it { should be_an_edges_route }
31
+ it { should be_a(Tackle::SimpleMixin::Route) }
32
+ end
33
+ end
34
+ end
35
+
36
+ describe '#delete!' do
37
+ before do
38
+ @edge_id = e0.element_id
39
+ e0.delete!
40
+ graph.checkpoint # deleted edges in neo may be looked up during the transaction
41
+ end
42
+ it 'should be removed' do
43
+ graph.edge(@edge_id).should be_nil
44
+ end
45
+ end
46
+
47
+ contexts(
48
+ 'into new tg' => proc {
49
+ let(:dest) { Pacer.tg }
50
+ },
51
+ 'into graph2' => proc {
52
+ let(:dest) { graph2 }
53
+ }) do
54
+ describe '#clone_into', :transactions => false do
55
+ before { pending 'support temporary hash indices for clone/copy' unless graph.supports_manual_indices? }
56
+ context 'including vertices' do
57
+ subject { e0.clone_into(dest, :create_vertices => true) }
58
+
59
+ its('element_id.to_s') { should == e0.element_id.to_s if graph.supports_custom_element_ids? }
60
+ its(:label) { should == 'links' }
61
+ its(:graph) { should equal(dest) }
62
+ its('in_vertex.properties') { should == { 'name' => 'eliza' } }
63
+ its('out_vertex.properties') { should == { 'name' => 'darrick' } }
64
+ end
65
+
66
+ context 'without vertices' do
67
+ subject { e0.clone_into(dest) rescue nil }
68
+ it { should be_nil }
69
+
70
+ context 'but already existing' do
71
+ before do
72
+ v0.clone_into(dest)
73
+ v1.clone_into(dest)
74
+ end
75
+ its('element_id.to_s') { should == e0.element_id.to_s if graph.supports_custom_element_ids? }
76
+ its(:label) { should == 'links' }
77
+ its(:graph) { should equal(dest) }
78
+ its('in_vertex.properties') { should == { 'name' => 'eliza' } }
79
+ its('out_vertex.properties') { should == { 'name' => 'darrick' } }
80
+ end
81
+ end
82
+ end
83
+
84
+ describe '#copy_into', :transactions => false do
85
+ before { pending unless graph.supports_manual_indices? }
86
+ subject { v0.clone_into(dest); v1.clone_into(dest); e0.copy_into(dest) }
87
+ its(:label) { should == 'links' }
88
+ its(:graph) { should equal(dest) }
89
+ its('in_vertex.properties') { should == { 'name' => 'eliza' } }
90
+ its('out_vertex.properties') { should == { 'name' => 'darrick' } }
91
+ end
92
+
93
+ end
94
+
95
+ subject { e0 }
96
+ its(:graph) { should equal(graph) }
97
+ its(:display_name) { should == "#{ v0.element_id }-links-#{ v1.element_id }" }
98
+ its(:inspect) { should == "#<E[#{ e0.element_id }]:#{ v0.element_id }-links-#{ v1.element_id }>" }
99
+ context 'with label proc' do
100
+ before do
101
+ graph.edge_name = proc { |e| "some name" }
102
+ end
103
+ its(:display_name) { should == "some name" }
104
+ its(:inspect) { should == "#<E[#{ e0.element_id }]:some name>" }
105
+ end
106
+
107
+ context '', :transactions => true do
108
+ it { should_not == e1 }
109
+ it { should == e0 }
110
+ it { should_not == v0 }
111
+ end
112
+ end
113
+
114
+ Run.all do
115
+ it_uses Pacer::EdgeMixin
116
+ end
@@ -0,0 +1,297 @@
1
+ require 'spec_helper'
2
+
3
+ unless defined? ElementMixinSpec
4
+ ElementMixinSpec = true
5
+
6
+ shared_examples_for Pacer::ElementMixin do
7
+ context 'vertex' do
8
+ subject { v0 }
9
+ it { should be_a(Pacer::Core::Graph::VerticesRoute) }
10
+ it { should be_a(Pacer::ElementMixin) }
11
+ it { should be_a(Pacer::VertexMixin) }
12
+ it { should_not be_a(Pacer::EdgeMixin) }
13
+
14
+ describe '#v' do
15
+ context '()' do
16
+ subject { v0.v }
17
+ its(:to_a) { should == [v0] }
18
+ it { should be_a_vertices_route }
19
+ end
20
+
21
+ context '(:name => "eliza")' do
22
+ subject { v0.v(:name => 'eliza') }
23
+ its(:to_a) { should == [v0] }
24
+ it { should be_a_vertices_route }
25
+ end
26
+
27
+ context '(:name => "other")' do
28
+ subject { v0.v(:name => 'other') }
29
+ its(:to_a) { should == [] }
30
+ it { should be_a_vertices_route }
31
+ end
32
+
33
+ context '(SimpleMixin)' do
34
+ subject { v0.v(Tackle::SimpleMixin) }
35
+ its(:to_a) { should == [v0] }
36
+ it { should be_a_vertices_route }
37
+ its(:extensions) { should == Set[Tackle::SimpleMixin] }
38
+ end
39
+ end
40
+
41
+ describe '#e' do
42
+ it 'is unsupported' do
43
+ expect { v0.e }.to raise_error(Pacer::UnsupportedOperation)
44
+ end
45
+ end
46
+
47
+ describe '#eql?' do
48
+ subject { Hash.new(0) }
49
+ before do
50
+ subject[v0] += 1
51
+ subject[graph.v.first] += 1
52
+ end
53
+
54
+ its(:keys) { should == [v0] }
55
+ its(:values) { should == [2] }
56
+
57
+ it 'should put wrapped vertices in the same key' do
58
+ subject[v0.v(Tackle::SimpleMixin).first] += 1
59
+ subject.values.should == [3]
60
+ end
61
+
62
+ it 'should put other vertices in a different key' do
63
+ subject[v1].should == 0
64
+ subject[v0].should == 2
65
+ end
66
+ end
67
+ end
68
+
69
+ context 'edge' do
70
+ subject { e0 }
71
+ it { should be_a(Pacer::Core::Graph::EdgesRoute) }
72
+ it { should be_a(Pacer::ElementMixin) }
73
+ it { should be_a(Pacer::EdgeMixin) }
74
+ it { should_not be_a(Pacer::VertexMixin) }
75
+
76
+ describe '#e', :transactions => false do
77
+ context '()' do
78
+ subject { e0.e }
79
+ its(:to_a) { should == [e0] }
80
+ it(:a => :b) { should be_an_edges_route }
81
+ end
82
+
83
+ context '(:links)' do
84
+ subject { e0.e(:links) }
85
+ its(:to_a) { should == [e0] }
86
+ it { should be_an_edges_route }
87
+ end
88
+
89
+ context '(:other)' do
90
+ subject { e0.e(:other) }
91
+ its(:to_a) { should == [] }
92
+ it { should be_an_edges_route }
93
+ end
94
+
95
+ context '(SimpleMixin)' do
96
+ subject { e0.e(Tackle::SimpleMixin) }
97
+ its(:to_a) { should == [e0] }
98
+ it { should be_an_edges_route }
99
+ its(:extensions) { should == Set[Tackle::SimpleMixin] }
100
+ end
101
+ end
102
+
103
+ describe '#v' do
104
+ it 'is unsupported' do
105
+ expect { e0.v }.to raise_error(Pacer::UnsupportedOperation)
106
+ end
107
+ end
108
+
109
+ describe '#eql?', :transactions => false do
110
+ subject { Hash.new(0) }
111
+ before do
112
+ subject[e0] += 1
113
+ subject[graph.e.first] += 1
114
+ end
115
+
116
+ its(:keys) { should == [e0] }
117
+ its(:values) { should == [2] }
118
+
119
+ it 'should put wrapped edges in the same key' do
120
+ subject[e0.e(Tackle::SimpleMixin).first] += 1
121
+ subject.values.should == [3]
122
+ end
123
+
124
+ it 'should put other edges in a different key' do
125
+ subject[e1].should == 0
126
+ subject[e0].should == 2
127
+ end
128
+ end
129
+ end
130
+
131
+ describe '#graph' do
132
+ it { v0.graph.should == graph }
133
+ it { e0.graph.should == graph }
134
+ end
135
+
136
+ contexts(
137
+ 'vertex' => proc{
138
+ let(:element) { v0 }
139
+ },
140
+ 'edge' => proc{
141
+ let(:element) { e0 }
142
+ }) do
143
+ describe '#[]' do
144
+ context 'value types' do
145
+ it '(String)' do
146
+ element[:string] = 'words'
147
+ element[:string].should == 'words'
148
+ end
149
+
150
+ it '(Array)' do
151
+ a = [10, 'elements']
152
+ element[:array] = a
153
+ element[:array].should == a
154
+ end
155
+
156
+ it '(Hash)' do
157
+ h = { :elements => 10 }
158
+ element[:hash] = h
159
+ element[:hash].should == h
160
+ end
161
+
162
+ it '(Time)' do
163
+ time = Time.utc 2011, 1, 2, 3, 4, 5
164
+ element[:time] = time
165
+ element[:time].should == time
166
+ end
167
+
168
+ it '(Fixnum)' do
169
+ element[:number] = 123
170
+ element[:number].should == 123
171
+ end
172
+
173
+ it '(Float)' do
174
+ element[:float] = 12.345
175
+ element[:float].should == 12.345
176
+ end
177
+
178
+ it '(Bignum)' do
179
+ element[:big] = 123321123321123321123321123321123321
180
+ element[:big].should == 123321123321123321123321123321123321
181
+ end
182
+
183
+ it "('')" do
184
+ element[:name] = ''
185
+ element[:name].should be_nil
186
+ element.property_keys.should_not include('name')
187
+ end
188
+
189
+ it '(nil)' do
190
+ element[:name] = nil
191
+ element[:name].should be_nil
192
+ element.property_keys.should_not include('name')
193
+ end
194
+ end
195
+
196
+ context 'key types' do
197
+ it 'String' do
198
+ element['name'].should == element[:name]
199
+ end
200
+
201
+ it 'Fixnum' do
202
+ element[123] = 'value'
203
+ element[123].should == 'value'
204
+ end
205
+ end
206
+ end
207
+
208
+ describe '#result', :transactions => false do
209
+ subject { element.result }
210
+ it { should equal(element) }
211
+ end
212
+
213
+ describe '#from_graph?' do
214
+ context 'same graph' do
215
+ subject { element.from_graph? graph }
216
+ it { should be_true }
217
+ end
218
+ context 'different graph' do
219
+ subject { element.from_graph? graph2 }
220
+ it { should be_false }
221
+ end
222
+ end
223
+
224
+ describe '#properties' do
225
+ before do
226
+ element.properties = { :a => 'valuea', :b => 'valueb' }
227
+ end
228
+ subject { element.properties }
229
+ it { should be_a(Hash) }
230
+ its(:count) { should == 2 }
231
+ it 'should have the correct vales' do
232
+ element.properties['a'].should == 'valuea'
233
+ element.properties['b'].should == 'valueb'
234
+ element[:a].should == 'valuea'
235
+ element[:b].should == 'valueb'
236
+ end
237
+ it 'should not affect the element if returned values are changed' do
238
+ element.properties['a'].gsub!(/value/, 'oops')
239
+ element.properties['a'].should == 'valuea'
240
+ element[:a].should == 'valuea'
241
+ end
242
+ it 'should not affect the element if returned keys are changed' do
243
+ element.properties.delete('a')
244
+ element.properties['a'].should == 'valuea'
245
+ element[:a].should == 'valuea'
246
+ end
247
+ it 'should not affect the element if something is added' do
248
+ element.properties['c'] = 'something'
249
+ element[:c].should be_nil
250
+ end
251
+ context 'existing properties' do
252
+ before do
253
+ element.properties = { :a => 'new value', :c => 'value c' }
254
+ end
255
+ its(:count) { should == 2 }
256
+ it 'should have the correct values' do
257
+ element[:a].should == 'new value'
258
+ element[:b].should be_nil
259
+ element[:c].should == 'value c'
260
+ end
261
+ end
262
+ end
263
+
264
+ subject { element }
265
+ its(:element_id) { should_not be_nil }
266
+ context '', :transactions => false do
267
+ # FIXME: Neo4j edges are flaky sometimes when inside a
268
+ # transaction. If you look them up by id, they are not found.
269
+ its(:to_a) { should == [element] }
270
+ its(:element) { should == element }
271
+ end
272
+ end
273
+ end
274
+ end
275
+
276
+ Run.all do
277
+ it_uses Pacer::ElementMixin do
278
+ let(:v0) { graph.create_vertex :name => 'eliza' }
279
+ let(:v1) { graph.create_vertex :name => 'darrick' }
280
+ let(:e0) { graph.create_edge nil, v0, v1, :links }
281
+ let(:e1) { graph.create_edge nil, v0, v1, :relinks }
282
+ end
283
+
284
+ context 'vertex' do
285
+ let(:v0) { graph.create_vertex :name => 'eliza' }
286
+ subject { v0 }
287
+ it { should_not be_a(Pacer::Wrappers::ElementWrapper) }
288
+ end
289
+
290
+ context 'edge' do
291
+ let(:v0) { graph.create_vertex :name => 'eliza' }
292
+ let(:v1) { graph.create_vertex :name => 'darrick' }
293
+ let(:e0) { graph.create_edge nil, v0, v1, :links }
294
+ subject { e0 }
295
+ it { should_not be_a(Pacer::Wrappers::ElementWrapper) }
296
+ end
297
+ end