ardb 0.14.0 → 0.15.0

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.
@@ -0,0 +1,64 @@
1
+ module Ardb
2
+
3
+ class RelationSpy
4
+
5
+ attr_reader :applied
6
+ attr_accessor :results
7
+
8
+ def initialize
9
+ @applied, @results = [], []
10
+ @offset, @limit = 0, nil
11
+ end
12
+
13
+ [ :select,
14
+ :joins,
15
+ :where,
16
+ :order,
17
+ :group, :having,
18
+ :merge
19
+ ].each do |type|
20
+
21
+ define_method(type) do |*args|
22
+ @applied << AppliedExpression.new(type, args)
23
+ self
24
+ end
25
+
26
+ end
27
+
28
+ def limit(value)
29
+ @limit = value ? value.to_i : nil
30
+ @applied << AppliedExpression.new(:limit, [ value ])
31
+ self
32
+ end
33
+
34
+ def offset(value)
35
+ @offset = value ? value.to_i : 0
36
+ @applied << AppliedExpression.new(:offset, [ value ])
37
+ self
38
+ end
39
+
40
+ def all
41
+ @results[@offset, (@limit || @results.size)] || []
42
+ end
43
+
44
+ def count
45
+ all.size
46
+ end
47
+
48
+ def limit_value
49
+ @limit
50
+ end
51
+
52
+ def offset_value
53
+ @offset
54
+ end
55
+
56
+ def ==(other)
57
+ @applied == other.applied
58
+ end
59
+
60
+ AppliedExpression = Struct.new(:type, :args)
61
+
62
+ end
63
+
64
+ end
data/lib/ardb/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Ardb
2
- VERSION = "0.14.0"
2
+ VERSION = "0.15.0"
3
3
  end
@@ -0,0 +1,160 @@
1
+ require 'assert'
2
+ require 'ardb/relation_spy'
3
+
4
+ class Ardb::RelationSpy
5
+
6
+ class UnitTests < Assert::Context
7
+ desc "Ardb::RelationSpy"
8
+ setup do
9
+ @relation_spy = Ardb::RelationSpy.new
10
+ end
11
+ subject{ @relation_spy }
12
+
13
+ should have_readers :applied
14
+ should have_accessors :results
15
+ should have_imeths :select, :joins, :where, :order, :group, :having, :merge
16
+ should have_imeths :limit, :offset
17
+ should have_imeths :all, :count
18
+ should have_imeths :limit_value, :offset_value
19
+
20
+ should "default it's attributes" do
21
+ assert_equal [], subject.applied
22
+ assert_equal [], subject.results
23
+ assert_equal nil, subject.limit_value
24
+ assert_equal 0, subject.offset_value
25
+ end
26
+
27
+ should "add an applied expression using `select`" do
28
+ subject.select :column_a, :column_b
29
+ assert_equal 1, subject.applied.size
30
+ applied_expression = subject.applied.first
31
+ assert_instance_of AppliedExpression, applied_expression
32
+ assert_equal :select, applied_expression.type
33
+ assert_equal [ :column_a, :column_b ], applied_expression.args
34
+ end
35
+
36
+ should "add an applied expression using `joins`" do
37
+ subject.joins :table_a, :table_b
38
+ assert_equal 1, subject.applied.size
39
+ applied_expression = subject.applied.first
40
+ assert_instance_of AppliedExpression, applied_expression
41
+ assert_equal :joins, applied_expression.type
42
+ assert_equal [ :table_a, :table_b ], applied_expression.args
43
+ end
44
+
45
+ should "add an applied expression using `where`" do
46
+ subject.where :column_a => 'some value'
47
+ assert_equal 1, subject.applied.size
48
+ applied_expression = subject.applied.first
49
+ assert_instance_of AppliedExpression, applied_expression
50
+ assert_equal :where, applied_expression.type
51
+ assert_equal [ { :column_a => 'some value' } ], applied_expression.args
52
+ end
53
+
54
+ should "add an applied expression using `order`" do
55
+ subject.order :column_a, :column_b
56
+ assert_equal 1, subject.applied.size
57
+ applied_expression = subject.applied.first
58
+ assert_instance_of AppliedExpression, applied_expression
59
+ assert_equal :order, applied_expression.type
60
+ assert_equal [ :column_a, :column_b ], applied_expression.args
61
+ end
62
+
63
+ should "add an applied expression using `group`" do
64
+ subject.group :column_a, :column_b
65
+ assert_equal 1, subject.applied.size
66
+ applied_expression = subject.applied.first
67
+ assert_instance_of AppliedExpression, applied_expression
68
+ assert_equal :group, applied_expression.type
69
+ assert_equal [ :column_a, :column_b ], applied_expression.args
70
+ end
71
+
72
+ should "add an applied expression using `having`" do
73
+ subject.having 'COUNT(column_a) > 0'
74
+ assert_equal 1, subject.applied.size
75
+ applied_expression = subject.applied.first
76
+ assert_instance_of AppliedExpression, applied_expression
77
+ assert_equal :having, applied_expression.type
78
+ assert_equal [ 'COUNT(column_a) > 0' ], applied_expression.args
79
+ end
80
+
81
+ should "add an applied expression using `merge`" do
82
+ other_relation = Ardb::RelationSpy.new
83
+ subject.merge other_relation
84
+ assert_equal 1, subject.applied.size
85
+ applied_expression = subject.applied.first
86
+ assert_instance_of AppliedExpression, applied_expression
87
+ assert_equal :merge, applied_expression.type
88
+ assert_equal [ other_relation ], applied_expression.args
89
+ end
90
+
91
+ should "add an applied expression using `limit`" do
92
+ subject.limit 100
93
+ assert_equal 1, subject.applied.size
94
+ applied_expression = subject.applied.first
95
+ assert_instance_of AppliedExpression, applied_expression
96
+ assert_equal :limit, applied_expression.type
97
+ assert_equal [ 100 ], applied_expression.args
98
+ end
99
+
100
+ should "set it's limit value using `limit`" do
101
+ subject.limit 100
102
+ assert_equal 100, subject.limit_value
103
+ end
104
+
105
+ should "add an applied expression using `offset`" do
106
+ subject.offset 100
107
+ assert_equal 1, subject.applied.size
108
+ applied_expression = subject.applied.first
109
+ assert_instance_of AppliedExpression, applied_expression
110
+ assert_equal :offset, applied_expression.type
111
+ assert_equal [ 100 ], applied_expression.args
112
+ end
113
+
114
+ should "set it's offset value using `offset`" do
115
+ subject.offset 100
116
+ assert_equal 100, subject.offset_value
117
+ end
118
+
119
+ should "return it's results using `all`" do
120
+ subject.results = [ 1, 2, 3 ]
121
+ assert_equal [ 1, 2, 3 ], subject.all
122
+ end
123
+
124
+ should "honor limit and offset values using `all`" do
125
+ subject.results = [ 1, 2, 3, 4, 5 ]
126
+
127
+ subject.limit 2
128
+ subject.offset nil
129
+ assert_equal [ 1, 2 ], subject.all
130
+
131
+ subject.limit nil
132
+ subject.offset 3
133
+ assert_equal [ 4, 5 ], subject.all
134
+
135
+ subject.limit 2
136
+ subject.offset 2
137
+ assert_equal [ 3, 4 ], subject.all
138
+ end
139
+
140
+ should "return the size of `all` using `count`" do
141
+ subject.results = [ 1, 2, 3, 4, 5 ]
142
+ assert_equal 5, subject.count
143
+
144
+ subject.limit 2
145
+ subject.offset 2
146
+ assert_equal 2, subject.count
147
+ end
148
+
149
+ should "be comparable using there applied collections" do
150
+ other_relation = Ardb::RelationSpy.new
151
+ other_relation.select :column_a
152
+ assert_not_equal other_relation, subject
153
+
154
+ subject.select :column_a
155
+ assert_equal other_relation, subject
156
+ end
157
+
158
+ end
159
+
160
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ardb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 39
4
+ hash: 35
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
- - 14
8
+ - 15
9
9
  - 0
10
- version: 0.14.0
10
+ version: 0.15.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Kelly Redding
@@ -16,7 +16,7 @@ autorequire:
16
16
  bindir: bin
17
17
  cert_chain: []
18
18
 
19
- date: 2013-11-13 00:00:00 Z
19
+ date: 2013-11-18 00:00:00 Z
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
22
  version_requirements: &id001 !ruby/object:Gem::Requirement
@@ -105,6 +105,7 @@ files:
105
105
  - lib/ardb/cli.rb
106
106
  - lib/ardb/migration_helpers.rb
107
107
  - lib/ardb/record_spy.rb
108
+ - lib/ardb/relation_spy.rb
108
109
  - lib/ardb/root_path.rb
109
110
  - lib/ardb/runner.rb
110
111
  - lib/ardb/runner/connect_command.rb
@@ -125,6 +126,7 @@ files:
125
126
  - test/unit/config_tests.rb
126
127
  - test/unit/migration_helpers_tests.rb
127
128
  - test/unit/record_spy_tests.rb
129
+ - test/unit/relation_spy_tests.rb
128
130
  - test/unit/runner/connect_command_tests.rb
129
131
  - test/unit/runner/create_command_tests.rb
130
132
  - test/unit/runner/drop_command_tests.rb
@@ -189,6 +191,7 @@ test_files:
189
191
  - test/unit/config_tests.rb
190
192
  - test/unit/migration_helpers_tests.rb
191
193
  - test/unit/record_spy_tests.rb
194
+ - test/unit/relation_spy_tests.rb
192
195
  - test/unit/runner/connect_command_tests.rb
193
196
  - test/unit/runner/create_command_tests.rb
194
197
  - test/unit/runner/drop_command_tests.rb