axiom-arango-adapter 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (125) hide show
  1. data/.gitignore +4 -0
  2. data/.rspec +5 -0
  3. data/.travis.yml +25 -0
  4. data/Gemfile +9 -0
  5. data/Gemfile.devtools +57 -0
  6. data/Guardfile +18 -0
  7. data/LICENSE +20 -0
  8. data/README.md +92 -0
  9. data/Rakefile +2 -0
  10. data/TODO +1 -0
  11. data/axiom-arango-adapter.gemspec +26 -0
  12. data/config/flay.yml +3 -0
  13. data/config/flog.yml +2 -0
  14. data/config/mutant.yml +3 -0
  15. data/config/roodi.yml +18 -0
  16. data/config/site.reek +102 -0
  17. data/config/yardstick.yml +2 -0
  18. data/lib/axiom-arango-adapter.rb +2 -0
  19. data/lib/axiom/adapter/arango.rb +40 -0
  20. data/lib/axiom/adapter/arango/adapter.rb +68 -0
  21. data/lib/axiom/adapter/arango/gateway.rb +356 -0
  22. data/lib/axiom/adapter/arango/reader.rb +98 -0
  23. data/lib/axiom/adapter/arango/visitor.rb +100 -0
  24. data/lib/axiom/adapter/arango/visitor/aggregate.rb +132 -0
  25. data/lib/axiom/adapter/arango/visitor/attribute.rb +26 -0
  26. data/lib/axiom/adapter/arango/visitor/binary.rb +77 -0
  27. data/lib/axiom/adapter/arango/visitor/for.rb +75 -0
  28. data/lib/axiom/adapter/arango/visitor/for/base.rb +40 -0
  29. data/lib/axiom/adapter/arango/visitor/for/binary.rb +108 -0
  30. data/lib/axiom/adapter/arango/visitor/for/binary/join.rb +131 -0
  31. data/lib/axiom/adapter/arango/visitor/for/binary/product.rb +48 -0
  32. data/lib/axiom/adapter/arango/visitor/for/summarization.rb +113 -0
  33. data/lib/axiom/adapter/arango/visitor/for/unary.rb +29 -0
  34. data/lib/axiom/adapter/arango/visitor/for/unary/extension.rb +72 -0
  35. data/lib/axiom/adapter/arango/visitor/for/unary/limit.rb +31 -0
  36. data/lib/axiom/adapter/arango/visitor/for/unary/offset.rb +34 -0
  37. data/lib/axiom/adapter/arango/visitor/for/unary/order.rb +63 -0
  38. data/lib/axiom/adapter/arango/visitor/for/unary/projection.rb +32 -0
  39. data/lib/axiom/adapter/arango/visitor/for/unary/rename.rb +88 -0
  40. data/lib/axiom/adapter/arango/visitor/for/unary/restriction.rb +42 -0
  41. data/lib/axiom/adapter/arango/visitor/function.rb +33 -0
  42. data/lib/axiom/adapter/arango/visitor/header.rb +55 -0
  43. data/lib/axiom/adapter/arango/visitor/literal.rb +26 -0
  44. data/lib/axiom/adapter/arango/visitor/reverse.rb +27 -0
  45. data/spec/fuzzer.rb +53 -0
  46. data/spec/integration/arango/read_spec.rb +166 -0
  47. data/spec/setup/arangodb.sh +61 -0
  48. data/spec/setup/run.sh +23 -0
  49. data/spec/shared/aql_behavior.rb +7 -0
  50. data/spec/shared/binary_relation_method_behaviour.rb +53 -0
  51. data/spec/shared/unary_relation_method_behaviour.rb +21 -0
  52. data/spec/spec_helper.rb +51 -0
  53. data/spec/support/ice_nine_config.rb +6 -0
  54. data/spec/unit/axiom/adapter/arango/adapter/class_methods/new_spec.rb +24 -0
  55. data/spec/unit/axiom/adapter/arango/adapter/gateway_spec.rb +11 -0
  56. data/spec/unit/axiom/adapter/arango/adapter/reader_spec.rb +12 -0
  57. data/spec/unit/axiom/adapter/arango/gateway/class_methods/new_spec.rb +15 -0
  58. data/spec/unit/axiom/adapter/arango/gateway/difference_spec.rb +16 -0
  59. data/spec/unit/axiom/adapter/arango/gateway/drop_spec.rb +20 -0
  60. data/spec/unit/axiom/adapter/arango/gateway/each_spec.rb +78 -0
  61. data/spec/unit/axiom/adapter/arango/gateway/extend_spec.rb +26 -0
  62. data/spec/unit/axiom/adapter/arango/gateway/intersect_spec.rb +16 -0
  63. data/spec/unit/axiom/adapter/arango/gateway/join_spec.rb +43 -0
  64. data/spec/unit/axiom/adapter/arango/gateway/materialize_spec.rb +26 -0
  65. data/spec/unit/axiom/adapter/arango/gateway/optimize_spec.rb +22 -0
  66. data/spec/unit/axiom/adapter/arango/gateway/product_spec.rb +16 -0
  67. data/spec/unit/axiom/adapter/arango/gateway/project_spec.rb +20 -0
  68. data/spec/unit/axiom/adapter/arango/gateway/remove_spec.rb +20 -0
  69. data/spec/unit/axiom/adapter/arango/gateway/rename_spec.rb +20 -0
  70. data/spec/unit/axiom/adapter/arango/gateway/respond_to_predicate_spec.rb +28 -0
  71. data/spec/unit/axiom/adapter/arango/gateway/restrict_spec.rb +26 -0
  72. data/spec/unit/axiom/adapter/arango/gateway/reverse_spec.rb +20 -0
  73. data/spec/unit/axiom/adapter/arango/gateway/sort_by_spec.rb +26 -0
  74. data/spec/unit/axiom/adapter/arango/gateway/summarize_spec.rb +150 -0
  75. data/spec/unit/axiom/adapter/arango/gateway/take_spec.rb +20 -0
  76. data/spec/unit/axiom/adapter/arango/gateway/unhandled_message_spec.rb +17 -0
  77. data/spec/unit/axiom/adapter/arango/gateway/union_spec.rb +16 -0
  78. data/spec/unit/axiom/adapter/arango/reader/each_spec.rb +43 -0
  79. data/spec/unit/axiom/adapter/arango/visitor/aggregate/count/root_spec.rb +15 -0
  80. data/spec/unit/axiom/adapter/arango/visitor/aggregate/count_spec.rb +15 -0
  81. data/spec/unit/axiom/adapter/arango/visitor/aggregate/maximum/root_spec.rb +15 -0
  82. data/spec/unit/axiom/adapter/arango/visitor/aggregate/maximum_spec.rb +15 -0
  83. data/spec/unit/axiom/adapter/arango/visitor/aggregate/minimum/root_spec.rb +15 -0
  84. data/spec/unit/axiom/adapter/arango/visitor/aggregate/minimum_spec.rb +15 -0
  85. data/spec/unit/axiom/adapter/arango/visitor/aggregate/sum/root_spec.rb +15 -0
  86. data/spec/unit/axiom/adapter/arango/visitor/aggregate/sum_spec.rb +15 -0
  87. data/spec/unit/axiom/adapter/arango/visitor/attribute/root_spec.rb +12 -0
  88. data/spec/unit/axiom/adapter/arango/visitor/binary/root_spec.rb +15 -0
  89. data/spec/unit/axiom/adapter/arango/visitor/class_methods/build_spec.rb +37 -0
  90. data/spec/unit/axiom/adapter/arango/visitor/class_methods/run_spec.rb +26 -0
  91. data/spec/unit/axiom/adapter/arango/visitor/for/base/root_spec.rb +13 -0
  92. data/spec/unit/axiom/adapter/arango/visitor/for/binary/join/local_name_spec.rb +20 -0
  93. data/spec/unit/axiom/adapter/arango/visitor/for/binary/join/right/root_spec.rb +14 -0
  94. data/spec/unit/axiom/adapter/arango/visitor/for/binary/join/root_spec.rb +14 -0
  95. data/spec/unit/axiom/adapter/arango/visitor/for/binary/join_spec.rb +14 -0
  96. data/spec/unit/axiom/adapter/arango/visitor/for/binary/local_name_spec.rb +14 -0
  97. data/spec/unit/axiom/adapter/arango/visitor/for/binary/product/right/root_spec.rb +13 -0
  98. data/spec/unit/axiom/adapter/arango/visitor/for/binary/product/root_spec.rb +13 -0
  99. data/spec/unit/axiom/adapter/arango/visitor/for/binary/product_spec.rb +13 -0
  100. data/spec/unit/axiom/adapter/arango/visitor/for/binary/right/join_spec.rb +14 -0
  101. data/spec/unit/axiom/adapter/arango/visitor/for/binary/right/local_name_spec.rb +13 -0
  102. data/spec/unit/axiom/adapter/arango/visitor/for/binary/right/product_spec.rb +13 -0
  103. data/spec/unit/axiom/adapter/arango/visitor/for/local_name_spec.rb +21 -0
  104. data/spec/unit/axiom/adapter/arango/visitor/for/root_spec.rb +29 -0
  105. data/spec/unit/axiom/adapter/arango/visitor/for/summarization/root_spec.rb +53 -0
  106. data/spec/unit/axiom/adapter/arango/visitor/for/unary/extension/root_spec.rb +13 -0
  107. data/spec/unit/axiom/adapter/arango/visitor/for/unary/extension_spec.rb +13 -0
  108. data/spec/unit/axiom/adapter/arango/visitor/for/unary/limit/root_spec.rb +17 -0
  109. data/spec/unit/axiom/adapter/arango/visitor/for/unary/limit_spec.rb +17 -0
  110. data/spec/unit/axiom/adapter/arango/visitor/for/unary/offset/root_spec.rb +17 -0
  111. data/spec/unit/axiom/adapter/arango/visitor/for/unary/offset_spec.rb +17 -0
  112. data/spec/unit/axiom/adapter/arango/visitor/for/unary/order/root_spec.rb +14 -0
  113. data/spec/unit/axiom/adapter/arango/visitor/for/unary/order_spec.rb +14 -0
  114. data/spec/unit/axiom/adapter/arango/visitor/for/unary/projection/root_spec.rb +13 -0
  115. data/spec/unit/axiom/adapter/arango/visitor/for/unary/projection_spec.rb +13 -0
  116. data/spec/unit/axiom/adapter/arango/visitor/for/unary/rename/root_spec.rb +13 -0
  117. data/spec/unit/axiom/adapter/arango/visitor/for/unary/rename_spec.rb +13 -0
  118. data/spec/unit/axiom/adapter/arango/visitor/for/unary/restriction/root_spec.rb +14 -0
  119. data/spec/unit/axiom/adapter/arango/visitor/for/unary/restriction_spec.rb +14 -0
  120. data/spec/unit/axiom/adapter/arango/visitor/header/root_spec.rb +12 -0
  121. data/spec/unit/axiom/adapter/arango/visitor/literal/root_spec.rb +10 -0
  122. data/spec/unit/axiom/adapter/arango/visitor/static/root_spec.rb +19 -0
  123. data/spec/unit/axiom/adapter/arango/visitor/visit_spec.rb +52 -0
  124. data/spec/unit/axiom/adapter/arango/visitor/visitor_spec.rb +39 -0
  125. metadata +379 -0
@@ -0,0 +1,166 @@
1
+ require 'spec_helper'
2
+ require 'logger'
3
+
4
+ describe Axiom::Adapter::Arango, 'read' do
5
+ let(:logger) do
6
+ Logger.new($stderr, :debug)
7
+ end
8
+
9
+ let(:projects) do
10
+ header = Axiom::Relation::Header.coerce(
11
+ [
12
+ [ :id, Integer ],
13
+ [ :name, String ]
14
+ ]
15
+ )
16
+
17
+ Axiom::Relation.new(header,
18
+ [
19
+ [ 1, 'dm-mapper' ],
20
+ [ 2, 'axiom' ],
21
+ [ 3, 'dm-session'],
22
+ ]
23
+ )
24
+ end
25
+
26
+ let(:people) do
27
+ header = Axiom::Relation::Header.coerce(
28
+ [
29
+ [ :id, Integer ],
30
+ [ :name, String ]
31
+ ]
32
+ )
33
+
34
+ Axiom::Relation.new(header,
35
+ [
36
+ [ 1, 'Dan Kubb' ],
37
+ [ 2, 'Piotr Solnica' ],
38
+ [ 3, 'Martin Gamsjaeger' ],
39
+ [ 4, 'Markus Schirp' ]
40
+ ]
41
+ )
42
+ end
43
+
44
+ let(:tasks) do
45
+ header = Axiom::Relation::Header.coerce(
46
+ [
47
+ [ :id, Integer ],
48
+ [ :name, String ],
49
+ [ :project_id, Integer ]
50
+ ]
51
+ )
52
+
53
+ Axiom::Relation::new(header,
54
+ [
55
+ [ 1, 'Add full mutation coverage', 1],
56
+ [ 2, 'Finish dm-session integration', 1],
57
+ [ 3, 'Rename to axiom', 2],
58
+ [ 4, 'Add UoW Interface', 3]
59
+ ]
60
+ )
61
+ end
62
+
63
+ let(:relations) do
64
+ {
65
+ :tasks => tasks,
66
+ :people => people,
67
+ :projects => projects
68
+ }
69
+ end
70
+
71
+ let(:database) do
72
+ Ashikawa::Core::Database.new do |config|
73
+ config.url = 'http://localhost:8529'
74
+ end
75
+ end
76
+
77
+ let(:adapter) do
78
+ Axiom::Adapter::Arango::Adapter.new(database, logger)
79
+ end
80
+
81
+ before :all do
82
+ relations.each do |name, relation|
83
+ database[name].delete
84
+ collection = database[name]
85
+ relation.each do |tuple|
86
+ document = relation.header.each_with_object({}) do |attribute, document|
87
+ document[attribute.name.to_s]=tuple[attribute]
88
+ end
89
+ collection.create_document(document)
90
+ end
91
+ end
92
+ end
93
+
94
+ def assert_eql_tuples_order(example, expected)
95
+ expected.to_a.map(&:to_ary).should eql(example.to_a.map(&:to_ary))
96
+ end
97
+
98
+ def assert_eql_tuples(expected, example)
99
+ expected_tuples = expected.to_a.map(&:to_ary).to_set
100
+ example_tuples = example.to_a.map(&:to_ary).to_set
101
+ example_tuples.should eql(expected_tuples)
102
+ end
103
+
104
+ def gateway(name)
105
+ adapter.gateway(Axiom::Relation::Base.new(name, relations.fetch(name).header))
106
+ end
107
+
108
+ specify 'projection' do
109
+ assert_eql_tuples(gateway(:tasks).project([:id, :name]), tasks.project([:id, :name]))
110
+ end
111
+
112
+ specify 'restriction' do
113
+ assert_eql_tuples(gateway(:tasks).restrict { |r| r.project_id.eq(1) }, tasks.restrict { |r| r.project_id.eq(1) })
114
+ end
115
+
116
+ specify 'join' do
117
+ expected = projects.rename(:id => :project_id).join(tasks)
118
+
119
+ assert_eql_tuples(
120
+ projects.rename(:id => :project_id, :name => :project_name).join(tasks),
121
+ gateway(:projects).rename(:id => :project_id, :name => :project_name).join(tasks)
122
+ )
123
+ end
124
+
125
+ specify 'nested joins' do
126
+ assert_eql_tuples(
127
+ projects.join(projects).join(projects),
128
+ gateway(:projects).join(gateway(:projects)).join(gateway(:projects))
129
+ )
130
+ end
131
+
132
+ specify 'sort' do
133
+ assert_eql_tuples_order(
134
+ projects.sort_by { |r| [r.id.asc, r.name.asc] },
135
+ gateway(:projects).sort_by { |r| [r.id.asc, r.name.asc] }
136
+ )
137
+ end
138
+
139
+ specify 'limit' do
140
+ assert_eql_tuples_order(
141
+ projects.sort_by { |r| [r.id.asc, r.name.asc] }.take(1),
142
+ gateway(:projects).sort_by { |r| [r.id.asc, r.name.asc] }.take(1)
143
+ )
144
+ end
145
+
146
+ specify 'offset' do
147
+ assert_eql_tuples_order(
148
+ projects.sort_by { |r| [r.id.asc, r.name.asc] }.drop(1),
149
+ gateway(:projects).sort_by { |r| [r.id.asc, r.name.asc] }.drop(1)
150
+ )
151
+ end
152
+
153
+ specify 'summarize' do
154
+ assert_eql_tuples(
155
+ tasks.summarize([:project_id]) { |r| r.add(:count, r.name.count) },
156
+ gateway(:tasks).summarize([:project_id]) { |r| [r.add(:count, r.name.count)] }
157
+ )
158
+ end
159
+
160
+ specify 'extend' do
161
+ assert_eql_tuples(
162
+ tasks.extend { |r| r.add(:extend, r.project_id % 2) },
163
+ gateway(:tasks).extend { |r| r.add(:extend, r.project_id % 2) }
164
+ )
165
+ end
166
+ end
@@ -0,0 +1,61 @@
1
+ #!/bin/bash
2
+
3
+ DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
4
+ cd $DIR
5
+
6
+ VERSION=1.2.0
7
+ NAME=ArangoDB-$VERSION
8
+
9
+ if [ ! -d "$DIR/$NAME" ]; then
10
+ # download ArangoDB
11
+ echo "wget http://www.arangodb.org/travisCI/$NAME.tar.gz"
12
+ wget http://www.arangodb.org/travisCI/$NAME.tar.gz
13
+ echo "tar zxf $NAME.tar.gz"
14
+ tar zvxf $NAME.tar.gz
15
+ fi
16
+
17
+ ARCH=$(arch)
18
+ PID=$(echo $PPID)
19
+ TMP_DIR="/tmp/arangodb.$PID"
20
+ PID_FILE="/tmp/arangodb.$PID.pid"
21
+ ARANGODB_DIR="$DIR/$NAME"
22
+
23
+ ARANGOD="${ARANGODB_DIR}/bin/arangod"
24
+ if [ "$ARCH" == "x86_64" ]; then
25
+ ARANGOD="${ARANGOD}_x86_64"
26
+ fi
27
+
28
+ # create database directory
29
+ mkdir ${TMP_DIR}
30
+
31
+ echo "Starting arangodb '${ARANGOD}'"
32
+
33
+ ${ARANGOD} \
34
+ --database.directory ${TMP_DIR} \
35
+ --configuration none \
36
+ --server.endpoint tcp://127.0.0.1:8529 \
37
+ --javascript.startup-directory ${ARANGODB_DIR}/js \
38
+ --javascript.modules-path ${ARANGODB_DIR}/js/server/modules:${ARANGODB_DIR}/js/common/modules \
39
+ --javascript.action-directory ${ARANGODB_DIR}/js/actions/system \
40
+ --database.maximal-journal-size 1048576 \
41
+ --server.disable-admin-interface true \
42
+ --server.disable-authentication true &
43
+
44
+ sleep 5
45
+
46
+ echo "Check for arangod process"
47
+ process=$(ps auxww | grep "bin/arangod" | grep -v grep)
48
+
49
+ if [ "x$process" == "x" ]; then
50
+ echo "no 'arangod' process found"
51
+ echo "ARCH = $ARCH"
52
+ exit 1
53
+ fi
54
+
55
+ echo "Waiting until ArangoDB is ready on port 8529"
56
+ while [[ -z `curl -s 'http://127.0.0.1:8529/_api/version' ` ]] ; do
57
+ echo -n "."
58
+ sleep 2s
59
+ done
60
+
61
+ echo "ArangoDB is up"
@@ -0,0 +1,23 @@
1
+ #!/bin/bash
2
+ # Run arango under my archlinux machine
3
+
4
+ PID=$(echo $PPID)
5
+ TMP_DIR="/tmp/arangodb.$PID"
6
+ PID_FILE="/tmp/arangodb.$PID.pid"
7
+ ARANGODB_DIR="/usr/share/arangodb"
8
+
9
+ # create database directory
10
+ mkdir ${TMP_DIR}
11
+
12
+ arangod \
13
+ --database.directory ${TMP_DIR} \
14
+ --configuration none \
15
+ --server.endpoint tcp://127.0.0.1:8529 \
16
+ --javascript.startup-directory ${ARANGODB_DIR}/js \
17
+ --javascript.modules-path ${ARANGODB_DIR}/js/server/modules:${ARANGODB_DIR}/js/common/modules \
18
+ --javascript.action-directory ${ARANGODB_DIR}/js/actions/system \
19
+ --log debug \
20
+ --database.maximal-journal-size 1048576 \
21
+ --server.disable-admin-interface true \
22
+ --server.disable-authentication true \
23
+ --javascript.gc-interval 1
@@ -0,0 +1,7 @@
1
+ shared_examples_for 'Node#aql' do
2
+ subject { object.aql }
3
+
4
+ it { should eql(expected_aql) }
5
+ its(:frozen?) { should be(true) }
6
+ it_should_behave_like 'an idempotent method'
7
+ end
@@ -0,0 +1,53 @@
1
+ # encoding: utf-8
2
+
3
+ shared_examples_for 'a binary relation method' do
4
+ describe 'when other has the same adapter' do
5
+ let(:other_relation) { mock('Other Relation') }
6
+ let(:other) { described_class.new(adapter, other_relation) }
7
+ let(:gateway) { mock('Other Gateway') }
8
+
9
+ before do
10
+ relation.stub(operation).and_return(gateway)
11
+ end
12
+
13
+ it { should be(gateway) }
14
+
15
+ it 'passes the other relation to the binary operation' do
16
+ relation.should_receive(operation) do |argument|
17
+ argument.should be(other_relation)
18
+ end
19
+ subject
20
+ end
21
+ end
22
+
23
+ describe 'when other has a different adapter' do
24
+ let(:other_adapter) { mock('Other Adapter') }
25
+ let(:other) { described_class.new(other_adapter, stub) }
26
+
27
+ before do
28
+ factory.stub!(:new).and_return(binary_relation)
29
+ end
30
+
31
+ it { should equal(binary_relation) }
32
+
33
+ it 'initializes the binary operation with the gateways' do
34
+ factory.should_receive(:new).with(object, other)
35
+ subject
36
+ end
37
+ end
38
+
39
+ describe 'when other has no adapter' do
40
+ let(:other) { mock('Other Relation') }
41
+
42
+ before do
43
+ factory.stub!(:new).and_return(binary_relation)
44
+ end
45
+
46
+ it { should equal(binary_relation) }
47
+
48
+ it 'initializes the binary operation with the gateway and other relation' do
49
+ factory.should_receive(:new).with(object, other)
50
+ subject
51
+ end
52
+ end
53
+ end
@@ -0,0 +1,21 @@
1
+ # encoding: utf-8
2
+
3
+ shared_examples_for 'a unary relation method' do
4
+ let(:gateway) { mock('New Gateway') }
5
+
6
+ before do
7
+ described_class.stub!(:new).and_return(gateway)
8
+ end
9
+
10
+ it { should equal(gateway) }
11
+
12
+ it 'tests the response is a relation' do
13
+ response.should_receive(:kind_of?).with(Axiom::Relation)
14
+ subject
15
+ end
16
+
17
+ it 'initializes the new gateway with the adapter and response' do
18
+ described_class.should_receive(:new).with(adapter, response)
19
+ subject
20
+ end
21
+ end
@@ -0,0 +1,51 @@
1
+ # encoding: utf-8
2
+
3
+ require 'axiom-arango-adapter'
4
+ require 'timeout'
5
+ require 'devtools'
6
+ Devtools.init_spec_helper
7
+
8
+ module InstanceMethodHelper
9
+ def instance_method_defined?(name)
10
+ instance_methods.map(&:to_sym).include?(name)
11
+ end
12
+ end
13
+
14
+ module AQLHelper
15
+ def compress_aql(string)
16
+ string.gsub(/^[ ]*/, '').split("\n").join(' ')
17
+ end
18
+
19
+ def expect_aql(string)
20
+ let(:header) { Axiom::Relation::Header.coerce([[:foo, String], [:bar, Integer]]) }
21
+ let(:base) { Axiom::Relation::Base.new(:name, header) }
22
+ let(:object) { described_class.new(relation, context) }
23
+
24
+ # Disjunct header for projection
25
+ let(:header_b) { Axiom::Relation::Header.coerce([[:baz, String]]) }
26
+ let(:base_b) { Axiom::Relation::Base.new(:name_b, header_b) }
27
+
28
+ # Overlapping header for join
29
+ let(:header_c) { Axiom::Relation::Header.coerce([[:baz, String], [:bar, Integer]]) }
30
+ let(:base_c) { Axiom::Relation::Base.new(:name_c, header_c) }
31
+
32
+ unless instance_method_defined?(:context)
33
+ let(:context) { nil }
34
+ end
35
+
36
+ expected_aql = compress_aql(string)
37
+ it_should_behave_like 'an idempotent method'
38
+ its(:aql) { should eql(expected_aql) }
39
+ end
40
+ end
41
+
42
+ RSpec.configure do |config|
43
+ config.include(Axiom)
44
+ config.extend(AQLHelper)
45
+ config.extend(InstanceMethodHelper)
46
+ config.around do |example|
47
+ Timeout.timeout(1) do
48
+ example.run
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,6 @@
1
+ module IceNine
2
+ class Freezer
3
+ class RSpec < NoFreeze
4
+ end
5
+ end
6
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ describe Axiom::Adapter::Arango::Adapter, '.new' do
4
+ subject { object.new(*arguments) }
5
+
6
+ let(:object) { described_class }
7
+
8
+ let(:database) { mock('Database') }
9
+ let(:logger) { mock('Logger') }
10
+
11
+ context 'with single argument' do
12
+ let(:arguments) { [database] }
13
+
14
+ its(:database) { should be(database) }
15
+ its(:logger) { should be(NullLogger.instance) }
16
+ end
17
+
18
+ context 'with two arguments' do
19
+ let(:arguments) { [database, logger] }
20
+
21
+ its(:database) { should be(database) }
22
+ its(:logger) { should be(logger) }
23
+ end
24
+ end
@@ -0,0 +1,11 @@
1
+ require 'spec_helper'
2
+
3
+ describe Axiom::Adapter::Arango::Adapter, '#gateway' do
4
+ subject { object.gateway(relation) }
5
+
6
+ let(:object) { described_class.new(database) }
7
+ let(:relation) { mock('Relation') }
8
+ let(:database) { mock('Database') }
9
+
10
+ it { should eql(Axiom::Adapter::Arango::Gateway.new(object, relation)) }
11
+ end
@@ -0,0 +1,12 @@
1
+ require 'spec_helper'
2
+
3
+ describe Axiom::Adapter::Arango::Adapter, '#reader' do
4
+
5
+ let(:object) { described_class.new(database) }
6
+ let(:database) { mock('Database') }
7
+ let(:relation) { mock('Relation') }
8
+
9
+ subject { object.reader(relation) }
10
+
11
+ it { should eql(Axiom::Adapter::Arango::Reader.new(object, relation)) }
12
+ end