geoff 0.0.7 → 0.0.8
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile.lock +2 -2
- data/README.md +88 -7
- data/lib/geoff/importer.rb +6 -4
- data/lib/geoff/version.rb +1 -1
- data/spec/integration/geoff_spec.rb +52 -51
- metadata +8 -3
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
geoff (0.0.
|
4
|
+
geoff (0.0.8)
|
5
5
|
activesupport (~> 3.2.3)
|
6
6
|
json
|
7
7
|
neo4j
|
@@ -31,7 +31,7 @@ GEM
|
|
31
31
|
diff-lcs (1.1.3)
|
32
32
|
erubis (2.7.0)
|
33
33
|
hike (1.2.1)
|
34
|
-
i18n (0.6.
|
34
|
+
i18n (0.6.1)
|
35
35
|
journey (1.0.4)
|
36
36
|
json (1.7.5-java)
|
37
37
|
linecache (0.46)
|
data/README.md
CHANGED
@@ -29,7 +29,6 @@ Prerequisites/ Caveats
|
|
29
29
|
Usage
|
30
30
|
-------
|
31
31
|
|
32
|
-
|
33
32
|
```ruby
|
34
33
|
#Gemfile
|
35
34
|
gem 'geoff'
|
@@ -84,12 +83,6 @@ before do
|
|
84
83
|
end
|
85
84
|
```
|
86
85
|
|
87
|
-
###Using a ramdisk see http://neo4j.rubyforge.org/guides/configuration.html
|
88
|
-
|
89
|
-
```sh
|
90
|
-
diskutil erasevolume HFS+ "ramdisk" `hdiutil attach -nomount ram://1165430`
|
91
|
-
```
|
92
|
-
|
93
86
|
```geoff
|
94
87
|
(ROOT)-[:Company]->(Company)
|
95
88
|
(ROOT)-[:Person]->(Person)
|
@@ -190,4 +183,92 @@ Geoff(Company, target: self) do
|
|
190
183
|
end
|
191
184
|
```
|
192
185
|
|
186
|
+
#Injecting builders
|
187
|
+
```ruby
|
188
|
+
coffee_machines_builder = Geoff do
|
189
|
+
b.large_coffee_machines = children do
|
190
|
+
coffee_machine('large_machine') { power 2300 }
|
191
|
+
coffee_machine('xxl_machine' ) { power 2600 }
|
192
|
+
end
|
193
|
+
end
|
194
|
+
|
195
|
+
tables_builder = Geoff do
|
196
|
+
b.tables = children do
|
197
|
+
table('round_table' ) { capacity 3 }
|
198
|
+
table('square_table') { capacity 4 }
|
199
|
+
end
|
200
|
+
end
|
201
|
+
|
202
|
+
Geoff(coffee_machines_builder, tables_builder) do
|
203
|
+
branch 'acme_coffee_luton_branch' do
|
204
|
+
number_of_employees 15
|
205
|
+
|
206
|
+
children do
|
207
|
+
b.small_coffee_machines type: 'uses', lease: '3 years'
|
208
|
+
b.tables type: 'has'
|
209
|
+
end
|
210
|
+
end
|
211
|
+
end
|
212
|
+
```
|
213
|
+
Resulting graph
|
214
|
+
```
|
215
|
+
(Branch)
|
216
|
+
acme_coffee_luton_branch---------------------(Table)
|
217
|
+
/ | \ has square_table
|
218
|
+
/ | \ {capacity: 4}
|
219
|
+
/ | \
|
220
|
+
/uses |uses \has
|
221
|
+
/ | \
|
222
|
+
/ | \
|
223
|
+
/ | \
|
224
|
+
(CoffeeMachine) (CoffeeMachine) (Table)
|
225
|
+
large_machine xxl_machine round_table
|
226
|
+
{power: 2300} {power: 2600} {capacity: 3}
|
227
|
+
```
|
228
|
+
|
229
|
+
#Cloning subtrees
|
230
|
+
```ruby
|
231
|
+
Geoff do
|
232
|
+
b.grinder = grinder 'fine_grinder'
|
233
|
+
|
234
|
+
branch 'acme_coffee_luton_branch' do
|
235
|
+
children 'uses' do
|
236
|
+
b.machine = coffee_machine('large_machine') do
|
237
|
+
power 2300
|
193
238
|
|
239
|
+
children 'connected_to' do
|
240
|
+
b.grinder clone: false
|
241
|
+
end
|
242
|
+
end
|
243
|
+
|
244
|
+
# this branch uses two identical large coffee machines
|
245
|
+
# but they share same grinder
|
246
|
+
b.machine type: 'uses', clone: true
|
247
|
+
end
|
248
|
+
end
|
249
|
+
end
|
250
|
+
```
|
251
|
+
Resulting graph
|
252
|
+
```
|
253
|
+
(Branch)
|
254
|
+
acme_coffee_luton_branch
|
255
|
+
/ \
|
256
|
+
/ \
|
257
|
+
/ \
|
258
|
+
/uses \uses
|
259
|
+
/ \
|
260
|
+
/ \
|
261
|
+
/ \
|
262
|
+
(CoffeeMachine) (CoffeeMachine)
|
263
|
+
large_machine large_machine
|
264
|
+
{power: 2300} {power: 2300}
|
265
|
+
\ /
|
266
|
+
\ /
|
267
|
+
\ /
|
268
|
+
\connected_to /connected_to
|
269
|
+
\ /
|
270
|
+
\ /
|
271
|
+
\ /
|
272
|
+
(Grinder)
|
273
|
+
fine_grinder
|
274
|
+
```
|
data/lib/geoff/importer.rb
CHANGED
@@ -68,11 +68,13 @@ class Geoff
|
|
68
68
|
|
69
69
|
def rebuild_indexes
|
70
70
|
log 're-building indexes'
|
71
|
-
|
71
|
+
if defined?(r.get_type.to_s)
|
72
|
+
types = root_node.relationships.map { |r| Kernel.const_get(r.get_type.to_s) }
|
72
73
|
|
73
|
-
|
74
|
-
|
75
|
-
|
74
|
+
Neo4j::Transaction.run do
|
75
|
+
types.each do |type|
|
76
|
+
re_index(type)
|
77
|
+
end
|
76
78
|
end
|
77
79
|
end
|
78
80
|
end
|
data/lib/geoff/version.rb
CHANGED
@@ -18,8 +18,8 @@ describe Geoff do
|
|
18
18
|
coffee_machines_builder,
|
19
19
|
tables_builder
|
20
20
|
) do
|
21
|
-
branch '
|
22
|
-
|
21
|
+
branch 'acme_coffee_luton_branch' do
|
22
|
+
number_of_employees 15
|
23
23
|
|
24
24
|
children do
|
25
25
|
b.small_coffee_machines type: 'uses', lease: '3 years'
|
@@ -27,8 +27,8 @@ describe Geoff do
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
-
branch '
|
31
|
-
|
30
|
+
branch 'acme_coffee_reading_branch' do
|
31
|
+
number_of_employees 10
|
32
32
|
|
33
33
|
children do
|
34
34
|
b.large_coffee_machines type: 'uses', lease: '3 years'
|
@@ -44,13 +44,13 @@ describe Geoff do
|
|
44
44
|
let(:coffee_machines_builder) do
|
45
45
|
Geoff(CoffeeMachine) do
|
46
46
|
b.large_coffee_machines = children do
|
47
|
-
coffee_machine('
|
48
|
-
coffee_machine('
|
47
|
+
coffee_machine('large_machine') { power 2300 }
|
48
|
+
coffee_machine('xxl_machine' ) { power 2600 }
|
49
49
|
end
|
50
50
|
|
51
51
|
b.small_coffee_machines = children do
|
52
|
-
coffee_machine('
|
53
|
-
coffee_machine('
|
52
|
+
coffee_machine('xs_machine' ) { power 600 }
|
53
|
+
coffee_machine('small_machine') { power 750 }
|
54
54
|
end
|
55
55
|
end
|
56
56
|
end
|
@@ -67,37 +67,37 @@ describe Geoff do
|
|
67
67
|
let(:expected_geoff) do
|
68
68
|
strip_whitespace <<-EOS
|
69
69
|
(ROOT)-[:Branch]->(Branch)
|
70
|
-
(
|
71
|
-
(Branch)-[:all]->(
|
72
|
-
(
|
73
|
-
(CoffeeMachine)-[:all]->(
|
74
|
-
(
|
75
|
-
(
|
76
|
-
(CoffeeMachine)-[:all]->(
|
77
|
-
(
|
70
|
+
(acme_coffee_luton_branch) {"_classname":"Branch","number_of_employees":15}
|
71
|
+
(Branch)-[:all]->(acme_coffee_luton_branch)
|
72
|
+
(xs_machine) {"_classname":"CoffeeMachine","power":600}
|
73
|
+
(CoffeeMachine)-[:all]->(xs_machine)
|
74
|
+
(acme_coffee_luton_branch)-[:uses]->(xs_machine) {"lease":"3 years"}
|
75
|
+
(small_machine) {"_classname":"CoffeeMachine","power":750}
|
76
|
+
(CoffeeMachine)-[:all]->(small_machine)
|
77
|
+
(acme_coffee_luton_branch)-[:uses]->(small_machine) {"lease":"3 years"}
|
78
78
|
(round_table) {"_classname":"Table","capacity":3}
|
79
79
|
(Table)-[:all]->(round_table)
|
80
|
-
(
|
80
|
+
(acme_coffee_luton_branch)-[:has]->(round_table)
|
81
81
|
(square_table) {"_classname":"Table","capacity":4}
|
82
82
|
(Table)-[:all]->(square_table)
|
83
|
-
(
|
84
|
-
(
|
85
|
-
(Branch)-[:all]->(
|
86
|
-
(
|
87
|
-
(CoffeeMachine)-[:all]->(
|
88
|
-
(
|
89
|
-
(
|
90
|
-
(CoffeeMachine)-[:all]->(
|
91
|
-
(
|
83
|
+
(acme_coffee_luton_branch)-[:has]->(square_table)
|
84
|
+
(acme_coffee_reading_branch) {"_classname":"Branch","number_of_employees":10}
|
85
|
+
(Branch)-[:all]->(acme_coffee_reading_branch)
|
86
|
+
(large_machine) {"_classname":"CoffeeMachine","power":2300}
|
87
|
+
(CoffeeMachine)-[:all]->(large_machine)
|
88
|
+
(acme_coffee_reading_branch)-[:uses]->(large_machine) {"lease":"3 years"}
|
89
|
+
(xxl_machine) {"_classname":"CoffeeMachine","power":2600}
|
90
|
+
(CoffeeMachine)-[:all]->(xxl_machine)
|
91
|
+
(acme_coffee_reading_branch)-[:uses]->(xxl_machine) {"lease":"3 years"}
|
92
92
|
(round_table) {"_classname":"Table","capacity":3}
|
93
93
|
(Table)-[:all]->(round_table)
|
94
|
-
(
|
94
|
+
(acme_coffee_reading_branch)-[:has]->(round_table)
|
95
95
|
(square_table) {"_classname":"Table","capacity":4}
|
96
96
|
(Table)-[:all]->(square_table)
|
97
|
-
(
|
97
|
+
(acme_coffee_reading_branch)-[:has]->(square_table)
|
98
98
|
(octagonal_table) {"_classname":"Table","capacity":8}
|
99
99
|
(Table)-[:all]->(octagonal_table)
|
100
|
-
(
|
100
|
+
(acme_coffee_reading_branch)-[:has]->(octagonal_table)
|
101
101
|
EOS
|
102
102
|
end
|
103
103
|
|
@@ -127,7 +127,7 @@ describe Geoff do
|
|
127
127
|
Branch,
|
128
128
|
coffee_machines_builder
|
129
129
|
) do
|
130
|
-
branch '
|
130
|
+
branch 'acme_coffee_luton_branch' do
|
131
131
|
children do
|
132
132
|
b.coffee_machine type: 'uses', lease: '3 years'
|
133
133
|
end
|
@@ -137,7 +137,7 @@ describe Geoff do
|
|
137
137
|
|
138
138
|
let(:coffee_machines_builder) do
|
139
139
|
Geoff(CoffeeMachine) do
|
140
|
-
b.coffee_machine = coffee_machine('
|
140
|
+
b.coffee_machine = coffee_machine('machine') do
|
141
141
|
power 2300
|
142
142
|
|
143
143
|
children 'connected_to' do
|
@@ -150,14 +150,14 @@ describe Geoff do
|
|
150
150
|
let(:expected_geoff) do
|
151
151
|
strip_whitespace <<-EOS
|
152
152
|
(ROOT)-[:Branch]->(Branch)
|
153
|
-
(
|
154
|
-
(Branch)-[:all]->(
|
155
|
-
(
|
156
|
-
(CoffeeMachine)-[:all]->(
|
153
|
+
(acme_coffee_luton_branch_1) {"_classname":"Branch"}
|
154
|
+
(Branch)-[:all]->(acme_coffee_luton_branch_1)
|
155
|
+
(machine_3) {"_classname":"CoffeeMachine","power":2300}
|
156
|
+
(CoffeeMachine)-[:all]->(machine_3)
|
157
157
|
(fine_grinder_5) {"_classname":"Grinder"}
|
158
158
|
(Grinder)-[:all]->(fine_grinder_5)
|
159
|
-
(
|
160
|
-
(
|
159
|
+
(machine_3)-[:connected_to]->(fine_grinder_5)
|
160
|
+
(acme_coffee_luton_branch_1)-[:uses]->(machine_3) {"lease":"3 years"}
|
161
161
|
EOS
|
162
162
|
end
|
163
163
|
|
@@ -175,9 +175,9 @@ describe Geoff do
|
|
175
175
|
Geoff(Branch) do
|
176
176
|
b.grinder = grinder 'fine_grinder'
|
177
177
|
|
178
|
-
branch '
|
178
|
+
branch 'acme_coffee_luton_branch' do
|
179
179
|
children 'uses' do
|
180
|
-
b.
|
180
|
+
b.machine = coffee_machine('large_machine') do
|
181
181
|
power 2300
|
182
182
|
|
183
183
|
children 'connected_to' do
|
@@ -185,8 +185,9 @@ describe Geoff do
|
|
185
185
|
end
|
186
186
|
end
|
187
187
|
|
188
|
-
# this branch uses two identical large
|
189
|
-
|
188
|
+
# this branch uses two identical large machine machines
|
189
|
+
# but sharing same grinder
|
190
|
+
b.machine type: 'uses', clone: true
|
190
191
|
end
|
191
192
|
end
|
192
193
|
end
|
@@ -197,16 +198,16 @@ describe Geoff do
|
|
197
198
|
(ROOT)-[:Branch]->(Branch)
|
198
199
|
(fine_grinder) {"_classname":"Grinder"}
|
199
200
|
(Grinder)-[:all]->(fine_grinder)
|
200
|
-
(
|
201
|
-
(Branch)-[:all]->(
|
202
|
-
(
|
203
|
-
(CoffeeMachine)-[:all]->(
|
204
|
-
(
|
205
|
-
(
|
206
|
-
(
|
207
|
-
(CoffeeMachine)-[:all]->(
|
208
|
-
(
|
209
|
-
(
|
201
|
+
(acme_coffee_luton_branch) {"_classname":"Branch"}
|
202
|
+
(Branch)-[:all]->(acme_coffee_luton_branch)
|
203
|
+
(large_machine) {"_classname":"CoffeeMachine","power":2300}
|
204
|
+
(CoffeeMachine)-[:all]->(large_machine)
|
205
|
+
(large_machine)-[:connected_to]->(fine_grinder)
|
206
|
+
(acme_coffee_luton_branch)-[:uses]->(large_machine)
|
207
|
+
(large_machine) {"_classname":"CoffeeMachine","power":2300}
|
208
|
+
(CoffeeMachine)-[:all]->(large_machine)
|
209
|
+
(large_machine)-[:connected_to]->(fine_grinder)
|
210
|
+
(acme_coffee_luton_branch)-[:uses]->(large_machine)
|
210
211
|
EOS
|
211
212
|
end
|
212
213
|
|
metadata
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geoff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.8
|
4
5
|
prerelease:
|
5
|
-
version: 0.0.7
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- David Rouchy
|
@@ -13,7 +13,7 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2012-
|
16
|
+
date: 2012-10-04 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: neo4j
|
@@ -174,13 +174,19 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
174
174
|
requirements:
|
175
175
|
- - ! '>='
|
176
176
|
- !ruby/object:Gem::Version
|
177
|
+
segments:
|
178
|
+
- 0
|
177
179
|
version: '0'
|
180
|
+
hash: 2
|
178
181
|
none: false
|
179
182
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
180
183
|
requirements:
|
181
184
|
- - ! '>='
|
182
185
|
- !ruby/object:Gem::Version
|
186
|
+
segments:
|
187
|
+
- 0
|
183
188
|
version: '0'
|
189
|
+
hash: 2
|
184
190
|
none: false
|
185
191
|
requirements: []
|
186
192
|
rubyforge_project:
|
@@ -197,5 +203,4 @@ test_files:
|
|
197
203
|
- spec/node_dsl_spec.rb
|
198
204
|
- spec/spec_helper.rb
|
199
205
|
- spec/support/geof_matchers.rb
|
200
|
-
has_rdoc:
|
201
206
|
...
|