birddog 0.0.5 → 0.0.6
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.
- data/lib/birddog/birddog.rb +19 -14
- data/lib/birddog/version.rb +1 -1
- data/specs/common_aggregates_spec.rb +33 -3
- metadata +19 -19
data/lib/birddog/birddog.rb
CHANGED
@@ -204,8 +204,8 @@ module Birddog
|
|
204
204
|
private :define_common_aggregates_for
|
205
205
|
|
206
206
|
def _common_average_for(model)
|
207
|
-
define_static_scope(:_birddog_average) do |field, value|
|
208
|
-
field_name = "
|
207
|
+
define_static_scope(:_birddog_average) do |field, field_alias, value|
|
208
|
+
field_name = "#{field_alias}#{field}"
|
209
209
|
scope = { :select => @model.arel_table[field].average.as(field_name) }
|
210
210
|
warn_common_aggregate_conditional if conditional?(value)
|
211
211
|
scope
|
@@ -214,8 +214,8 @@ module Birddog
|
|
214
214
|
private :_common_average_for
|
215
215
|
|
216
216
|
def _common_sum_for(model)
|
217
|
-
define_static_scope(:_birddog_sum) do |field, value|
|
218
|
-
field_name = "
|
217
|
+
define_static_scope(:_birddog_sum) do |field, field_alias, value|
|
218
|
+
field_name = "#{field_alias}#{field}"
|
219
219
|
scope = { :select => @model.arel_table[field].sum.as(field_name) }
|
220
220
|
warn_common_aggregate_conditional if conditional?(value)
|
221
221
|
scope
|
@@ -224,8 +224,8 @@ module Birddog
|
|
224
224
|
private :_common_sum_for
|
225
225
|
|
226
226
|
def _common_minimum_for(model)
|
227
|
-
define_static_scope(:_birddog_minimum) do |field, value|
|
228
|
-
field_name = "
|
227
|
+
define_static_scope(:_birddog_minimum) do |field, field_alias, value|
|
228
|
+
field_name = "#{field_alias}#{field}"
|
229
229
|
scope = { :select => @model.arel_table[field].minimum.as(field_name) }
|
230
230
|
warn_common_aggregate_conditional if conditional?(value)
|
231
231
|
scope
|
@@ -234,8 +234,8 @@ module Birddog
|
|
234
234
|
private :_common_minimum_for
|
235
235
|
|
236
236
|
def _common_maximum_for(model)
|
237
|
-
define_static_scope(:_birddog_maximum) do |field, value|
|
238
|
-
field_name = "
|
237
|
+
define_static_scope(:_birddog_maximum) do |field, field_alias, value|
|
238
|
+
field_name = "#{field_alias}#{field}"
|
239
239
|
scope = { :select => @model.arel_table[field].maximum.as(field_name) }
|
240
240
|
warn_common_aggregate_conditional if conditional?(value)
|
241
241
|
scope
|
@@ -246,33 +246,38 @@ module Birddog
|
|
246
246
|
def aggregate_scope_for(model, key, value)
|
247
247
|
aggregate_scope = nil
|
248
248
|
field_name = nil
|
249
|
+
field_alias = nil
|
249
250
|
key = key.to_s
|
250
251
|
|
251
252
|
case
|
252
|
-
when key =~ /^(average_)([a-zA-Z_]*)/ && @averagable.include?($2.to_sym) then
|
253
|
+
when key =~ /^(average_|avg_)([a-zA-Z_]*)/ && @averagable.include?($2.to_sym) then
|
253
254
|
aggregate_scope = "_birddog_average"
|
255
|
+
field_alias = $1
|
254
256
|
field_name = $2
|
255
257
|
when key =~ /^(sum_)([a-zA-Z_]*)/ && @sumable.include?($2.to_sym) then
|
256
258
|
aggregate_scope = "_birddog_sum"
|
259
|
+
field_alias = $1
|
257
260
|
field_name = $2
|
258
|
-
when key =~ /^(minimum_)([a-zA-Z_]*)/ && @minimumable.include?($2.to_sym) then
|
261
|
+
when key =~ /^(minimum_|min_)([a-zA-Z_]*)/ && @minimumable.include?($2.to_sym) then
|
259
262
|
aggregate_scope = "_birddog_minimum"
|
263
|
+
field_alias = $1
|
260
264
|
field_name = $2
|
261
|
-
when key =~ /^(maximum_)([a-zA-Z_]*)/ && @maximumable.include?($2.to_sym) then
|
265
|
+
when key =~ /^(maximum_|max_)([a-zA-Z_]*)/ && @maximumable.include?($2.to_sym) then
|
262
266
|
aggregate_scope = "_birddog_maximum"
|
267
|
+
field_alias = $1
|
263
268
|
field_name = $2
|
264
269
|
end
|
265
270
|
|
266
|
-
[
|
271
|
+
[field_name, field_alias, aggregate_scope]
|
267
272
|
end
|
268
273
|
private :aggregate_scope_for
|
269
274
|
|
270
275
|
def scope_for(model, key, value)
|
271
|
-
|
276
|
+
field, field_alias, scope_name = aggregate_scope_for(model, key, value)
|
272
277
|
scope_name = scope_name_for(key) unless scope_name
|
273
278
|
|
274
279
|
if model.respond_to?(scope_name)
|
275
|
-
send_params = [field, value].compact
|
280
|
+
send_params = [field, field_alias, value].compact
|
276
281
|
model.__send__(scope_name, *send_params)
|
277
282
|
else
|
278
283
|
model.scoped
|
data/lib/birddog/version.rb
CHANGED
@@ -17,13 +17,23 @@ describe Birddog::Birddog do
|
|
17
17
|
|
18
18
|
it "creates a query on the column desired when scope is average_*" do
|
19
19
|
sql = Product.scopes_for_query("average_value").to_sql
|
20
|
-
sql.must_match(/
|
20
|
+
sql.must_match(/average_value/)
|
21
|
+
end
|
22
|
+
|
23
|
+
it "creates a query on the column desired when scope is avg_*" do
|
24
|
+
sql = Product.scopes_for_query("avg_value").to_sql
|
25
|
+
sql.must_match(/avg_value/)
|
21
26
|
end
|
22
27
|
|
23
28
|
it "calculates the average and returns it in the result set" do
|
24
29
|
avg = Product.scopes_for_query("average_value").first
|
25
30
|
avg.average_value.must_equal((100 + 200 + 10) / 3.0)
|
26
31
|
end
|
32
|
+
|
33
|
+
it "calculates the avg and returns it in the result set" do
|
34
|
+
avg = Product.scopes_for_query("avg_value").first
|
35
|
+
avg.avg_value.must_equal((100 + 200 + 10) / 3.0)
|
36
|
+
end
|
27
37
|
end
|
28
38
|
|
29
39
|
describe "minimumable" do
|
@@ -33,13 +43,23 @@ describe Birddog::Birddog do
|
|
33
43
|
|
34
44
|
it "creates a query on the column desired when scope is minimum_*" do
|
35
45
|
sql = Product.scopes_for_query("minimum_value").to_sql
|
36
|
-
sql.must_match(/
|
46
|
+
sql.must_match(/minimum_value/)
|
47
|
+
end
|
48
|
+
|
49
|
+
it "creates a query on the column desired when scope is min_*" do
|
50
|
+
sql = Product.scopes_for_query("min_value").to_sql
|
51
|
+
sql.must_match(/min_value/)
|
37
52
|
end
|
38
53
|
|
39
54
|
it "calculates the minimum and returns it in the result set" do
|
40
55
|
avg = Product.scopes_for_query("minimum_value").first
|
41
56
|
avg.minimum_value.must_equal(10)
|
42
57
|
end
|
58
|
+
|
59
|
+
it "calculates the min and returns it in the result set" do
|
60
|
+
avg = Product.scopes_for_query("min_value").first
|
61
|
+
avg.min_value.must_equal(10)
|
62
|
+
end
|
43
63
|
end
|
44
64
|
|
45
65
|
describe "maximumable" do
|
@@ -49,13 +69,23 @@ describe Birddog::Birddog do
|
|
49
69
|
|
50
70
|
it "creates a query on the column desired when scope is maximum_*" do
|
51
71
|
sql = Product.scopes_for_query("maximum_value").to_sql
|
52
|
-
sql.must_match(/
|
72
|
+
sql.must_match(/maximum_value/)
|
73
|
+
end
|
74
|
+
|
75
|
+
it "creates a query on the column desired when scope is max_*" do
|
76
|
+
sql = Product.scopes_for_query("max_value").to_sql
|
77
|
+
sql.must_match(/max_value/)
|
53
78
|
end
|
54
79
|
|
55
80
|
it "calculates the maximum and returns it in the result set" do
|
56
81
|
avg = Product.scopes_for_query("maximum_value").first
|
57
82
|
avg.maximum_value.must_equal(200)
|
58
83
|
end
|
84
|
+
|
85
|
+
it "calculates the max and returns it in the result set" do
|
86
|
+
avg = Product.scopes_for_query("max_value").first
|
87
|
+
avg.max_value.must_equal(200)
|
88
|
+
end
|
59
89
|
end
|
60
90
|
|
61
91
|
describe "sumable" do
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: birddog
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -13,7 +13,7 @@ date: 2012-02-29 00:00:00.000000000Z
|
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: minitest
|
16
|
-
requirement: &
|
16
|
+
requirement: &12901960 !ruby/object:Gem::Requirement
|
17
17
|
none: false
|
18
18
|
requirements:
|
19
19
|
- - ! '>='
|
@@ -21,10 +21,10 @@ dependencies:
|
|
21
21
|
version: '0'
|
22
22
|
type: :development
|
23
23
|
prerelease: false
|
24
|
-
version_requirements: *
|
24
|
+
version_requirements: *12901960
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
requirement: &
|
27
|
+
requirement: &12901400 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *12901400
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: sqlite3-ruby
|
38
|
-
requirement: &
|
38
|
+
requirement: &12900740 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :development
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *12900740
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: pry
|
49
|
-
requirement: &
|
49
|
+
requirement: &12899920 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :development
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *12899920
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: chronic
|
60
|
-
requirement: &
|
60
|
+
requirement: &12899480 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: '0'
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *12899480
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: activerecord
|
71
|
-
requirement: &
|
71
|
+
requirement: &12899060 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *12899060
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: activesupport
|
82
|
-
requirement: &
|
82
|
+
requirement: &12898400 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *12898400
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: squeel
|
93
|
-
requirement: &
|
93
|
+
requirement: &12897540 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *12897540
|
102
102
|
description: Seeeeeeeee Readme
|
103
103
|
email:
|
104
104
|
- brandonsdewitt@gmail.com
|
@@ -139,7 +139,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
139
139
|
version: '0'
|
140
140
|
segments:
|
141
141
|
- 0
|
142
|
-
hash: -
|
142
|
+
hash: -3806611019993035456
|
143
143
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
144
144
|
none: false
|
145
145
|
requirements:
|
@@ -148,7 +148,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
148
148
|
version: '0'
|
149
149
|
segments:
|
150
150
|
- 0
|
151
|
-
hash: -
|
151
|
+
hash: -3806611019993035456
|
152
152
|
requirements: []
|
153
153
|
rubyforge_project: birddog
|
154
154
|
rubygems_version: 1.8.10
|