aggregate_columns 0.9.1 → 0.9.2

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.
Files changed (3) hide show
  1. data/Rakefile +1 -1
  2. data/lib/aggregate_columns.rb +7 -5
  3. metadata +40 -19
data/Rakefile CHANGED
@@ -14,7 +14,7 @@ PKG_FILES = FileList[
14
14
 
15
15
  spec = Gem::Specification.new do |s|
16
16
  s.name = "aggregate_columns"
17
- s.version = "0.9.1"
17
+ s.version = "0.9.2"
18
18
  s.author = "Marek Janukowicz"
19
19
  s.email = "marek@janukowicz.net"
20
20
  s.homepage = "http://www.bitbucket.org/starware/aggregate_columns"
@@ -47,7 +47,7 @@ module AggregateColumns
47
47
 
48
48
  module MethodsRails3
49
49
 
50
- def aggregate_columns( options )
50
+ def aggregate_column( options )
51
51
  rel = self.select( "#{table_name}.*" )
52
52
  # Process options
53
53
  options.assert_valid_keys( :association, :column, :function, :result_column, :join_type )
@@ -68,16 +68,18 @@ module AggregateColumns
68
68
  # (and not that complicated) to make it work on ActiveRecord::Relation
69
69
  # instances
70
70
  assoc_reflection = reflect_on_association( association )
71
- foreign_key = assoc_reflection.primary_key_name # As stupid as it looks, this is actually correct
71
+ foreign_key = assoc_reflection.foreign_key
72
72
  aggregate_table_name = assoc_reflection.table_name
73
73
  klass = assoc_reflection.klass
74
74
  join_type = options[:join_type] || "LEFT" # TODO: check if within allowed values
75
75
 
76
- aggregate_rel = klass.select( "#{foreign_key}, #{function}(#{field}) AS #{result_column}" ).from( aggregate_table_name ).group( foreign_key )
76
+ aggregate_rel = klass.select( "#{function}(#{field}) AS #{result_column}" ).from( aggregate_table_name ).where( "#{table_name}.id = #{result_column}_join.#{foreign_key}" )
77
+ #aggregate_rel = klass.select( "#{foreign_key}, #{function}(#{field}) AS #{result_column}" ).from( aggregate_table_name ).group( foreign_key )
77
78
  aggregate_rel = yield( aggregate_rel ) if block_given?
78
79
  rel = rel.
79
- joins( "#{join_type.to_s.upcase} JOIN (#{aggregate_rel.to_sql}) #{result_column}_join ON #{table_name}.id = #{result_column}_join.#{foreign_key}" ).
80
- select( result_column.to_s ).
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
+ select( "(#{aggregate_rel.to_sql}) AS #{result_column}" ).
81
83
  order( "#{result_column} DESC" ) # You might reorder if you want to have it differently
82
84
  return rel
83
85
  end
metadata CHANGED
@@ -1,50 +1,71 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: aggregate_columns
3
- version: !ruby/object:Gem::Version
4
- version: 0.9.1
3
+ version: !ruby/object:Gem::Version
4
+ hash: 63
5
5
  prerelease:
6
+ segments:
7
+ - 0
8
+ - 9
9
+ - 2
10
+ version: 0.9.2
6
11
  platform: ruby
7
- authors:
12
+ authors:
8
13
  - Marek Janukowicz
9
14
  autorequire:
10
15
  bindir: bin
11
16
  cert_chain: []
12
- date: 2011-11-29 00:00:00.000000000 Z
17
+
18
+ date: 2011-12-07 00:00:00 +01:00
19
+ default_executable:
13
20
  dependencies: []
21
+
14
22
  description:
15
23
  email: marek@janukowicz.net
16
24
  executables: []
25
+
17
26
  extensions: []
18
- extra_rdoc_files:
27
+
28
+ extra_rdoc_files:
19
29
  - README
20
- files:
30
+ files:
21
31
  - Rakefile
22
32
  - README
23
33
  - lib/aggregate_columns.rb
24
34
  - test/aggregate_columns_test.rb
25
35
  - test/test_helper.rb
36
+ has_rdoc: true
26
37
  homepage: http://www.bitbucket.org/starware/aggregate_columns
27
38
  licenses: []
39
+
28
40
  post_install_message:
29
41
  rdoc_options: []
30
- require_paths:
42
+
43
+ require_paths:
31
44
  - lib
32
- required_ruby_version: !ruby/object:Gem::Requirement
45
+ required_ruby_version: !ruby/object:Gem::Requirement
33
46
  none: false
34
- requirements:
35
- - - ! '>='
36
- - !ruby/object:Gem::Version
37
- version: '0'
38
- required_rubygems_version: !ruby/object:Gem::Requirement
47
+ requirements:
48
+ - - ">="
49
+ - !ruby/object:Gem::Version
50
+ hash: 3
51
+ segments:
52
+ - 0
53
+ version: "0"
54
+ required_rubygems_version: !ruby/object:Gem::Requirement
39
55
  none: false
40
- requirements:
41
- - - ! '>='
42
- - !ruby/object:Gem::Version
43
- version: '0'
56
+ requirements:
57
+ - - ">="
58
+ - !ruby/object:Gem::Version
59
+ hash: 3
60
+ segments:
61
+ - 0
62
+ version: "0"
44
63
  requirements: []
64
+
45
65
  rubyforge_project:
46
- rubygems_version: 1.8.11
66
+ rubygems_version: 1.6.2
47
67
  signing_key:
48
68
  specification_version: 3
49
69
  summary: Create and use aggregate columns in Rails applications
50
70
  test_files: []
71
+