aggregate_columns 0.9.3 → 0.9.4
Sign up to get free protection for your applications and to get access to all the features.
- data/.hgignore +3 -0
- data/Rakefile +1 -50
- data/lib/aggregate_columns.rb +15 -9
- metadata +31 -15
data/.hgignore
ADDED
data/Rakefile
CHANGED
@@ -1,50 +1 @@
|
|
1
|
-
require
|
2
|
-
require 'rake/testtask'
|
3
|
-
require 'rake/rdoctask'
|
4
|
-
require 'rake/gempackagetask'
|
5
|
-
|
6
|
-
PKG_FILES = FileList[
|
7
|
-
'[a-zA-Z]*',
|
8
|
-
'generators/**/*',
|
9
|
-
'lib/**/*',
|
10
|
-
'rails/**/*',
|
11
|
-
'tasks/**/*',
|
12
|
-
'test/**/*'
|
13
|
-
]
|
14
|
-
|
15
|
-
spec = Gem::Specification.new do |s|
|
16
|
-
s.name = "aggregate_columns"
|
17
|
-
s.version = "0.9.3"
|
18
|
-
s.author = "Marek Janukowicz"
|
19
|
-
s.email = "marek@janukowicz.net"
|
20
|
-
s.homepage = "http://www.bitbucket.org/starware/aggregate_columns"
|
21
|
-
s.platform = Gem::Platform::RUBY
|
22
|
-
s.summary = "Create and use aggregate columns in Rails applications"
|
23
|
-
s.files = PKG_FILES.to_a
|
24
|
-
s.require_path = "lib"
|
25
|
-
s.has_rdoc = false
|
26
|
-
s.extra_rdoc_files = ["README"]
|
27
|
-
end
|
28
|
-
|
29
|
-
desc 'Create gem'
|
30
|
-
Rake::GemPackageTask.new(spec) do |pkg|
|
31
|
-
pkg.gem_spec = spec
|
32
|
-
end
|
33
|
-
|
34
|
-
desc 'Run tests'
|
35
|
-
Rake::TestTask.new(:test) do |t|
|
36
|
-
t.libs << 'lib'
|
37
|
-
t.libs << 'test'
|
38
|
-
t.pattern = 'test/**/*_test.rb'
|
39
|
-
t.verbose = true
|
40
|
-
end
|
41
|
-
|
42
|
-
desc 'Generate RDoc documentation'
|
43
|
-
Rake::RDocTask.new(:rdoc) do |rdoc|
|
44
|
-
rdoc.rdoc_dir = 'rdoc'
|
45
|
-
rdoc.title = 'AggregateColumns'
|
46
|
-
rdoc.options << '--line-numbers' << '--inline-source'
|
47
|
-
rdoc.rdoc_files.include('README')
|
48
|
-
rdoc.rdoc_files.include('lib/**/*.rb')
|
49
|
-
end
|
50
|
-
|
1
|
+
require "bundler/gem_tasks"
|
data/lib/aggregate_columns.rb
CHANGED
@@ -71,16 +71,22 @@ module AggregateColumns
|
|
71
71
|
foreign_key = assoc_reflection.foreign_key
|
72
72
|
aggregate_table_name = assoc_reflection.table_name
|
73
73
|
klass = assoc_reflection.klass
|
74
|
-
join_type = options[:join_type]
|
74
|
+
join_type = options[:join_type] # TODO: check if within allowed values
|
75
75
|
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
76
|
+
if join_type
|
77
|
+
aggregate_rel = klass.select( "#{foreign_key}, #{function}(#{field}) AS #{result_column}" ).from( aggregate_table_name ).group( foreign_key )
|
78
|
+
aggregate_rel = yield( aggregate_rel ) if block_given?
|
79
|
+
rel = rel.
|
80
|
+
joins( "#{join_type.to_s.upcase} JOIN (#{aggregate_rel.to_sql}) #{result_column}_join ON #{table_name}.id = #{result_column}_join.#{foreign_key}" ).
|
81
|
+
select( result_column.to_s ).
|
82
|
+
order( "#{result_column} DESC" ) # You might reorder if you want to have it differently
|
83
|
+
else
|
84
|
+
aggregate_rel = klass.select( "#{function}(#{field}) AS #{result_column}" ).from( aggregate_table_name ).where( "#{table_name}.id = #{foreign_key}" )
|
85
|
+
aggregate_rel = yield( aggregate_rel ) if block_given?
|
86
|
+
rel = rel.
|
87
|
+
select( "(#{aggregate_rel.to_sql}) AS #{result_column}" ).
|
88
|
+
order( "#{result_column} DESC" ) # You might reorder if you want to have it differently
|
89
|
+
end
|
84
90
|
return rel
|
85
91
|
end
|
86
92
|
end
|
metadata
CHANGED
@@ -1,40 +1,55 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: aggregate_columns
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 51
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 9
|
9
|
-
-
|
10
|
-
version: 0.9.
|
9
|
+
- 4
|
10
|
+
version: 0.9.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
|
-
- Marek Janukowicz
|
13
|
+
- Marek Janukowicz/Starware
|
14
14
|
autorequire:
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-12-
|
18
|
+
date: 2011-12-09 00:00:00 +01:00
|
19
19
|
default_executable:
|
20
|
-
dependencies:
|
21
|
-
|
22
|
-
|
23
|
-
|
20
|
+
dependencies:
|
21
|
+
- !ruby/object:Gem::Dependency
|
22
|
+
name: activerecord
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ">="
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
hash: 7
|
30
|
+
segments:
|
31
|
+
- 2
|
32
|
+
version: "2"
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: ""
|
36
|
+
email:
|
37
|
+
- marek@janukowicz.net
|
24
38
|
executables: []
|
25
39
|
|
26
40
|
extensions: []
|
27
41
|
|
28
|
-
extra_rdoc_files:
|
29
|
-
|
42
|
+
extra_rdoc_files: []
|
43
|
+
|
30
44
|
files:
|
31
|
-
-
|
45
|
+
- .hgignore
|
32
46
|
- README
|
47
|
+
- Rakefile
|
33
48
|
- lib/aggregate_columns.rb
|
34
49
|
- test/aggregate_columns_test.rb
|
35
50
|
- test/test_helper.rb
|
36
51
|
has_rdoc: true
|
37
|
-
homepage:
|
52
|
+
homepage: ""
|
38
53
|
licenses: []
|
39
54
|
|
40
55
|
post_install_message:
|
@@ -67,5 +82,6 @@ rubygems_version: 1.6.2
|
|
67
82
|
signing_key:
|
68
83
|
specification_version: 3
|
69
84
|
summary: Create and use aggregate columns in Rails applications
|
70
|
-
test_files:
|
71
|
-
|
85
|
+
test_files:
|
86
|
+
- test/aggregate_columns_test.rb
|
87
|
+
- test/test_helper.rb
|