guacamole 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (40) hide show
  1. checksums.yaml +4 -4
  2. data/.hound.yml +1 -1
  3. data/.travis.yml +16 -15
  4. data/CHANGELOG.md +16 -0
  5. data/GOALS.md +8 -0
  6. data/Guardfile +4 -0
  7. data/README.md +21 -81
  8. data/guacamole.gemspec +3 -3
  9. data/lib/guacamole.rb +1 -0
  10. data/lib/guacamole/aql_query.rb +6 -1
  11. data/lib/guacamole/collection.rb +34 -66
  12. data/lib/guacamole/configuration.rb +53 -25
  13. data/lib/guacamole/document_model_mapper.rb +149 -38
  14. data/lib/guacamole/edge.rb +74 -0
  15. data/lib/guacamole/edge_collection.rb +91 -0
  16. data/lib/guacamole/exceptions.rb +0 -5
  17. data/lib/guacamole/graph_query.rb +31 -0
  18. data/lib/guacamole/model.rb +4 -0
  19. data/lib/guacamole/proxies/proxy.rb +7 -3
  20. data/lib/guacamole/proxies/relation.rb +22 -0
  21. data/lib/guacamole/railtie.rb +1 -1
  22. data/lib/guacamole/transaction.rb +177 -0
  23. data/lib/guacamole/version.rb +1 -1
  24. data/shared/transaction.js +66 -0
  25. data/spec/acceptance/aql_spec.rb +32 -40
  26. data/spec/acceptance/relations_spec.rb +239 -0
  27. data/spec/acceptance/spec_helper.rb +2 -2
  28. data/spec/fabricators/author_fabricator.rb +2 -0
  29. data/spec/setup/arangodb.sh +2 -2
  30. data/spec/unit/collection_spec.rb +20 -97
  31. data/spec/unit/configuration_spec.rb +73 -50
  32. data/spec/unit/document_model_mapper_spec.rb +84 -77
  33. data/spec/unit/edge_collection_spec.rb +174 -0
  34. data/spec/unit/edge_spec.rb +57 -0
  35. data/spec/unit/proxies/relation_spec.rb +35 -0
  36. metadata +22 -14
  37. data/lib/guacamole/proxies/referenced_by.rb +0 -15
  38. data/lib/guacamole/proxies/references.rb +0 -15
  39. data/spec/acceptance/association_spec.rb +0 -40
  40. data/spec/unit/example_spec.rb +0 -8
@@ -0,0 +1,57 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'spec_helper'
4
+ require 'guacamole/edge'
5
+
6
+ class TestEdge
7
+ include Guacamole::Edge
8
+ end
9
+
10
+ describe Guacamole::Edge do
11
+ context 'having an instance of an edge' do
12
+ subject { TestEdge.new }
13
+
14
+ it 'should be a specialized Guacamole::Model' do
15
+ expect(subject).to be_kind_of Guacamole::Model
16
+ end
17
+
18
+ it 'should have a special attribute :from' do
19
+ expect(subject).to respond_to(:from)
20
+ end
21
+
22
+ it 'should have a special attribute :to' do
23
+ expect(subject).to respond_to(:to)
24
+ end
25
+ end
26
+
27
+ context 'defining edges' do
28
+ subject { TestEdge }
29
+
30
+ it 'should define a :from definition' do
31
+ subject.from :orders
32
+
33
+ expect(subject.from).to eq :orders
34
+ end
35
+
36
+ it 'should define a :to definition' do
37
+ subject.to :customers
38
+
39
+ expect(subject.to).to eq :customers
40
+ end
41
+
42
+ context 'looking up collections' do
43
+ let(:edge_collection) { double('EdgeCollection') }
44
+
45
+ before do
46
+ stub_const('FromCollection', edge_collection)
47
+ stub_const('ToCollection', edge_collection)
48
+
49
+ allow(subject).to receive(:to).and_return('to')
50
+ allow(subject).to receive(:from).and_return('from')
51
+ end
52
+
53
+ its(:to_collection) { should eq edge_collection }
54
+ its(:from_collection) { should eq edge_collection }
55
+ end
56
+ end
57
+ end
@@ -0,0 +1,35 @@
1
+ # -*- encoding : utf-8 -*-
2
+
3
+ require 'spec_helper'
4
+ require 'guacamole/proxies/relation'
5
+
6
+ describe Guacamole::Proxies::Relation do
7
+ let(:model) { double('Model') }
8
+ let(:edge_class) { double('EdgeClass') }
9
+ let(:responsible_edge_collection) { double('EdgeCollection') }
10
+ let(:edge_collection_name) { 'name_of_the_edge_collection' }
11
+
12
+ before do
13
+ allow(Guacamole::EdgeCollection).to receive(:for).with(edge_class).and_return(responsible_edge_collection)
14
+ allow(responsible_edge_collection).to receive(:collection_name).and_return(edge_collection_name)
15
+ end
16
+
17
+ context 'initialization' do
18
+ subject { Guacamole::Proxies::Relation }
19
+
20
+ it 'should take a model and edge class as params' do
21
+ expect { subject.new(model, edge_class) }.not_to raise_error
22
+ end
23
+ end
24
+
25
+ context 'initialized proxy' do
26
+ subject { Guacamole::Proxies::Relation.new(model, edge_class) }
27
+
28
+ it 'should call the #neigbors method on the appropriate edge collection' do
29
+ expect(responsible_edge_collection).to receive(:neighbors)
30
+ .with(model)
31
+
32
+ subject.to_a
33
+ end
34
+ end
35
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: guacamole
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Lucas Dohmen
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2014-07-01 00:00:00.000000000 Z
12
+ date: 2014-12-18 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: ashikawa-core
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 0.12.0
20
+ version: 0.13.1
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 0.12.0
27
+ version: 0.13.1
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: virtus
30
30
  requirement: !ruby/object:Gem::Requirement
@@ -255,14 +255,14 @@ dependencies:
255
255
  requirements:
256
256
  - - "~>"
257
257
  - !ruby/object:Gem::Version
258
- version: 3.0.0
258
+ version: 3.1.0
259
259
  type: :development
260
260
  prerelease: false
261
261
  version_requirements: !ruby/object:Gem::Requirement
262
262
  requirements:
263
263
  - - "~>"
264
264
  - !ruby/object:Gem::Version
265
- version: 3.0.0
265
+ version: 3.1.0
266
266
  - !ruby/object:Gem::Dependency
267
267
  name: timecop
268
268
  requirement: !ruby/object:Gem::Requirement
@@ -293,8 +293,8 @@ dependencies:
293
293
  version: 0.8.7.4
294
294
  description: ODM for ArangoDB
295
295
  email:
296
- - moonglum@moonbeamlabs.com
297
- - dirk.breuer@gmail.com
296
+ - lucas@arangodb.com
297
+ - dirk@arangodb.com
298
298
  executables: []
299
299
  extensions: []
300
300
  extra_rdoc_files: []
@@ -321,16 +321,19 @@ files:
321
321
  - lib/guacamole/collection.rb
322
322
  - lib/guacamole/configuration.rb
323
323
  - lib/guacamole/document_model_mapper.rb
324
+ - lib/guacamole/edge.rb
325
+ - lib/guacamole/edge_collection.rb
324
326
  - lib/guacamole/exceptions.rb
327
+ - lib/guacamole/graph_query.rb
325
328
  - lib/guacamole/identity_map.rb
326
329
  - lib/guacamole/model.rb
327
330
  - lib/guacamole/proxies/proxy.rb
328
- - lib/guacamole/proxies/referenced_by.rb
329
- - lib/guacamole/proxies/references.rb
331
+ - lib/guacamole/proxies/relation.rb
330
332
  - lib/guacamole/query.rb
331
333
  - lib/guacamole/railtie.rb
332
334
  - lib/guacamole/railtie/database.rake
333
335
  - lib/guacamole/tasks/database.rake
336
+ - lib/guacamole/transaction.rb
334
337
  - lib/guacamole/version.rb
335
338
  - lib/rails/generators/guacamole/callbacks/callbacks_generator.rb
336
339
  - lib/rails/generators/guacamole/callbacks/templates/callbacks.rb.tt
@@ -351,12 +354,13 @@ files:
351
354
  - lib/rails/generators/test_unit/collection/collection_generator.rb
352
355
  - lib/rails/generators/test_unit/collection/templates/collection_test.rb.tt
353
356
  - log/.gitkeep
357
+ - shared/transaction.js
354
358
  - spec/acceptance/.gitkeep
355
359
  - spec/acceptance/aql_spec.rb
356
- - spec/acceptance/association_spec.rb
357
360
  - spec/acceptance/basic_spec.rb
358
361
  - spec/acceptance/callbacks_spec.rb
359
362
  - spec/acceptance/config/guacamole.yml
363
+ - spec/acceptance/relations_spec.rb
360
364
  - spec/acceptance/spec_helper.rb
361
365
  - spec/fabricators/article.rb
362
366
  - spec/fabricators/article_fabricator.rb
@@ -376,9 +380,11 @@ files:
376
380
  - spec/unit/collection_spec.rb
377
381
  - spec/unit/configuration_spec.rb
378
382
  - spec/unit/document_model_mapper_spec.rb
379
- - spec/unit/example_spec.rb
383
+ - spec/unit/edge_collection_spec.rb
384
+ - spec/unit/edge_spec.rb
380
385
  - spec/unit/identiy_map_spec.rb
381
386
  - spec/unit/model_spec.rb
387
+ - spec/unit/proxies/relation_spec.rb
382
388
  - spec/unit/query_spec.rb
383
389
  homepage: http://guacamolegem.org
384
390
  licenses:
@@ -407,10 +413,10 @@ summary: An ODM for ArangoDB that uses the DataMapper pattern.
407
413
  test_files:
408
414
  - spec/acceptance/.gitkeep
409
415
  - spec/acceptance/aql_spec.rb
410
- - spec/acceptance/association_spec.rb
411
416
  - spec/acceptance/basic_spec.rb
412
417
  - spec/acceptance/callbacks_spec.rb
413
418
  - spec/acceptance/config/guacamole.yml
419
+ - spec/acceptance/relations_spec.rb
414
420
  - spec/acceptance/spec_helper.rb
415
421
  - spec/fabricators/article.rb
416
422
  - spec/fabricators/article_fabricator.rb
@@ -430,8 +436,10 @@ test_files:
430
436
  - spec/unit/collection_spec.rb
431
437
  - spec/unit/configuration_spec.rb
432
438
  - spec/unit/document_model_mapper_spec.rb
433
- - spec/unit/example_spec.rb
439
+ - spec/unit/edge_collection_spec.rb
440
+ - spec/unit/edge_spec.rb
434
441
  - spec/unit/identiy_map_spec.rb
435
442
  - spec/unit/model_spec.rb
443
+ - spec/unit/proxies/relation_spec.rb
436
444
  - spec/unit/query_spec.rb
437
445
  has_rdoc:
@@ -1,15 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
-
3
- require 'guacamole/proxies/proxy'
4
-
5
- module Guacamole
6
- module Proxies
7
- # The {ReferencedBy} proxy is used to represent the 'one' in one-to-many relations.
8
- class ReferencedBy < Proxy
9
- def initialize(ref, model)
10
- init model,
11
- -> { DocumentModelMapper.collection_for(ref).by_example("#{model.class.name.underscore}_id" => model.key) }
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
-
3
- require 'guacamole/proxies/proxy'
4
-
5
- module Guacamole
6
- module Proxies
7
- # The {References} proxy is used to represent the 'many' in one-to-many relations.
8
- class References < Proxy
9
- def initialize(ref, document)
10
- init nil,
11
- -> { DocumentModelMapper.collection_for(ref).by_key(document["#{ref}_id"]) }
12
- end
13
- end
14
- end
15
- end
@@ -1,40 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'guacamole'
3
- require 'acceptance/spec_helper'
4
-
5
- require 'fabricators/book'
6
- require 'fabricators/author'
7
-
8
- class AuthorsCollection
9
- include Guacamole::Collection
10
-
11
- map do
12
- referenced_by :books
13
- end
14
- end
15
-
16
- class BooksCollection
17
- include Guacamole::Collection
18
-
19
- map do
20
- references :author
21
- end
22
- end
23
-
24
- describe 'Associations' do
25
- let(:author) { Fabricate(:author_with_three_books) }
26
-
27
- it 'should load referenced models from the database' do
28
- the_author = AuthorsCollection.by_key author.key
29
- books_from_author = BooksCollection.by_example(author_id: author.key).to_a
30
-
31
- expect(books_from_author).to eq the_author.books.to_a
32
- end
33
-
34
- it 'should load the referenced model from the database' do
35
- the_author = AuthorsCollection.by_key author.key
36
- a_book_by_the_author = BooksCollection.by_example(author_id: author.key).to_a.first
37
-
38
- expect(a_book_by_the_author.author).to eq the_author
39
- end
40
- end
@@ -1,8 +0,0 @@
1
- # -*- encoding : utf-8 -*-
2
- require 'spec_helper'
3
-
4
- describe 'experiment' do
5
- it 'should work' do
6
- expect(5).to be 5
7
- end
8
- end