weighted_average 1.0.0 → 1.0.1

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.
@@ -1,3 +1,3 @@
1
1
  module WeightedAverage
2
- VERSION = '1.0.0'
2
+ VERSION = '1.0.1'
3
3
  end
@@ -48,7 +48,7 @@ module WeightedAverage
48
48
  [ quoted_table_name, connection.quote_column_name(data_column_name) ].join '.'
49
49
  end
50
50
 
51
- relation = select("(SUM((#{data_column_names.join(' + ')}) #{"/ #{disaggregate_by_column_name} " if disaggregate_by_column_name}* #{weighted_by_column_name}) / SUM(#{weighted_by_column_name})) AS weighted_average")
51
+ relation = select("(SUM(1.0 * (#{data_column_names.join(' + ')}) #{"/ #{disaggregate_by_column_name} " if disaggregate_by_column_name}* #{weighted_by_column_name}) / SUM(#{weighted_by_column_name})) AS weighted_average")
52
52
  data_column_names.each do |data_column_name|
53
53
  relation = relation.where("#{data_column_name} IS NOT NULL")
54
54
  end
@@ -48,14 +48,14 @@ describe WeightedAverage do
48
48
 
49
49
  it "does default weighting" do
50
50
  should_have_same_sql(
51
- "SELECT (SUM((airline_aircraft_seat_classes.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM airline_aircraft_seat_classes WHERE (airline_aircraft_seat_classes.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
51
+ "SELECT (SUM(1.0 * (airline_aircraft_seat_classes.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM airline_aircraft_seat_classes WHERE (airline_aircraft_seat_classes.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
52
52
  AirlineAircraftSeatClass.weighted_average_relation('seats')
53
53
  )
54
54
  end
55
55
 
56
56
  it "does custom weighting" do
57
57
  should_have_same_sql(
58
- "SELECT (SUM((segments.distance) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE (segments.distance IS NOT NULL) AND (segments.passengers > 0)",
58
+ "SELECT (SUM(1.0 * (segments.distance) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE (segments.distance IS NOT NULL) AND (segments.passengers > 0)",
59
59
  Segment.weighted_average_relation('distance', :weighted_by => 'passengers')
60
60
  )
61
61
  end
@@ -64,7 +64,7 @@ describe WeightedAverage do
64
64
 
65
65
  it "adds multiple columns before averaging" do
66
66
  should_have_same_sql(
67
- "SELECT (SUM((airline_aircraft_seat_classes.seats + airline_aircraft_seat_classes.pitch) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM airline_aircraft_seat_classes WHERE (airline_aircraft_seat_classes.seats IS NOT NULL) AND (airline_aircraft_seat_classes.pitch IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
67
+ "SELECT (SUM(1.0 * (airline_aircraft_seat_classes.seats + airline_aircraft_seat_classes.pitch) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM airline_aircraft_seat_classes WHERE (airline_aircraft_seat_classes.seats IS NOT NULL) AND (airline_aircraft_seat_classes.pitch IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
68
68
  AirlineAircraftSeatClass.weighted_average_relation(['seats', 'pitch'])
69
69
  )
70
70
  end
@@ -76,7 +76,7 @@ describe WeightedAverage do
76
76
  conditions = 'aircraft_id = 1'
77
77
 
78
78
  should_have_same_sql(
79
- "SELECT (SUM((airline_aircraft_seat_classes.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM airline_aircraft_seat_classes WHERE (#{conditions}) AND (airline_aircraft_seat_classes.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
79
+ "SELECT (SUM(1.0 * (airline_aircraft_seat_classes.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM airline_aircraft_seat_classes WHERE (#{conditions}) AND (airline_aircraft_seat_classes.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
80
80
  AirlineAircraftSeatClass.where(conditions).weighted_average_relation('seats')
81
81
  )
82
82
  end
@@ -85,7 +85,7 @@ describe WeightedAverage do
85
85
  it "does custom weighting with conditions" do
86
86
  conditions = '456 = 456'
87
87
  should_have_same_sql(
88
- "SELECT (SUM((segments.load_factor) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE (#{conditions}) AND (segments.load_factor IS NOT NULL) AND (segments.passengers > 0)",
88
+ "SELECT (SUM(1.0 * (segments.load_factor) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE (#{conditions}) AND (segments.load_factor IS NOT NULL) AND (segments.passengers > 0)",
89
89
  Segment.where(conditions).weighted_average_relation('load_factor', :weighted_by => 'passengers')
90
90
  )
91
91
  end
@@ -95,7 +95,7 @@ describe WeightedAverage do
95
95
  # fake! we would never calc seats this way
96
96
  it "does foreign default weighting" do
97
97
  should_have_same_sql(
98
- "SELECT (SUM((aircraft.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM aircraft INNER JOIN airline_aircraft_seat_classes ON airline_aircraft_seat_classes.aircraft_id = aircraft.id WHERE (aircraft.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
98
+ "SELECT (SUM(1.0 * (aircraft.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM aircraft INNER JOIN airline_aircraft_seat_classes ON airline_aircraft_seat_classes.aircraft_id = aircraft.id WHERE (aircraft.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
99
99
  Aircraft.weighted_average_relation('seats', :weighted_by => :airline_aircraft_seat_classes)
100
100
  )
101
101
  end
@@ -104,14 +104,14 @@ describe WeightedAverage do
104
104
  # a subquery used in Aircraft.update_all_m3s
105
105
  it "does foreign custom weighting" do
106
106
  should_have_same_sql(
107
- "SELECT (SUM((aircraft.m3) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM aircraft INNER JOIN segments ON segments.bts_aircraft_type = aircraft.bts_aircraft_type WHERE (aircraft.m3 IS NOT NULL) AND (segments.passengers > 0)",
107
+ "SELECT (SUM(1.0 * (aircraft.m3) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM aircraft INNER JOIN segments ON segments.bts_aircraft_type = aircraft.bts_aircraft_type WHERE (aircraft.m3 IS NOT NULL) AND (segments.passengers > 0)",
108
108
  Aircraft.weighted_average_relation(:m3, :weighted_by => [:segments, :passengers])
109
109
  )
110
110
  end
111
111
 
112
112
  it "does foreign custom weighting with custom join keys" do
113
113
  should_have_same_sql(
114
- "SELECT (SUM((aircraft_deux.m3) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM aircraft_deux INNER JOIN segments ON segments.bts_aircraft_type = aircraft_deux.my_bts_aircraft_type_code WHERE (aircraft_deux.m3 IS NOT NULL) AND (segments.passengers > 0)",
114
+ "SELECT (SUM(1.0 * (aircraft_deux.m3) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM aircraft_deux INNER JOIN segments ON segments.bts_aircraft_type = aircraft_deux.my_bts_aircraft_type_code WHERE (aircraft_deux.m3 IS NOT NULL) AND (segments.passengers > 0)",
115
115
  AircraftDeux.weighted_average_relation(:m3, :weighted_by => [:segments, :passengers])
116
116
  )
117
117
  end
@@ -121,7 +121,7 @@ describe WeightedAverage do
121
121
  it "does default weighting, scoped" do
122
122
  conditions = '456 = 456'
123
123
  should_have_same_sql(
124
- "SELECT (SUM((airline_aircraft_seat_classes.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM airline_aircraft_seat_classes WHERE (#{conditions}) AND (airline_aircraft_seat_classes.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
124
+ "SELECT (SUM(1.0 * (airline_aircraft_seat_classes.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM airline_aircraft_seat_classes WHERE (#{conditions}) AND (airline_aircraft_seat_classes.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
125
125
  AirlineAircraftSeatClass.scoped(:conditions => conditions).weighted_average_relation(:seats)
126
126
  )
127
127
  end
@@ -129,7 +129,7 @@ describe WeightedAverage do
129
129
  it "does custom weighting, scoped" do
130
130
  conditions = '999 = 999'
131
131
  should_have_same_sql(
132
- "SELECT (SUM((segments.load_factor) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE (#{conditions}) AND (segments.load_factor IS NOT NULL) AND (segments.passengers > 0)",
132
+ "SELECT (SUM(1.0 * (segments.load_factor) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE (#{conditions}) AND (segments.load_factor IS NOT NULL) AND (segments.passengers > 0)",
133
133
  Segment.scoped(:conditions => conditions).weighted_average_relation(:load_factor, :weighted_by => :passengers)
134
134
  )
135
135
  end
@@ -139,7 +139,7 @@ describe WeightedAverage do
139
139
  it "does foreign default weighting, scoped" do
140
140
  conditions = '454 != 999'
141
141
  should_have_same_sql(
142
- "SELECT (SUM((aircraft.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM aircraft INNER JOIN airline_aircraft_seat_classes ON airline_aircraft_seat_classes.aircraft_id = aircraft.id WHERE (454 != 999) AND (aircraft.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
142
+ "SELECT (SUM(1.0 * (aircraft.seats) * airline_aircraft_seat_classes.weighting) / SUM(airline_aircraft_seat_classes.weighting)) AS weighted_average FROM aircraft INNER JOIN airline_aircraft_seat_classes ON airline_aircraft_seat_classes.aircraft_id = aircraft.id WHERE (454 != 999) AND (aircraft.seats IS NOT NULL) AND (airline_aircraft_seat_classes.weighting > 0)",
143
143
  Aircraft.scoped(:conditions => conditions).weighted_average_relation(:seats, :weighted_by => :airline_aircraft_seat_classes)
144
144
  )
145
145
  end
@@ -147,7 +147,7 @@ describe WeightedAverage do
147
147
  it "does foreign custom weighting, scoped" do
148
148
  conditions = 'aircraft.m3 > 1'
149
149
  should_have_same_sql(
150
- "SELECT (SUM((aircraft.m3) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM aircraft INNER JOIN segments ON segments.bts_aircraft_type = aircraft.bts_aircraft_type WHERE (aircraft.m3 > 1) AND (aircraft.m3 IS NOT NULL) AND (segments.passengers > 0)",
150
+ "SELECT (SUM(1.0 * (aircraft.m3) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM aircraft INNER JOIN segments ON segments.bts_aircraft_type = aircraft.bts_aircraft_type WHERE (aircraft.m3 > 1) AND (aircraft.m3 IS NOT NULL) AND (segments.passengers > 0)",
151
151
  Aircraft.scoped(:conditions => conditions).weighted_average_relation(:m3, :weighted_by => [:segments, :passengers])
152
152
  )
153
153
  end
@@ -156,7 +156,7 @@ describe WeightedAverage do
156
156
 
157
157
  it "does custom weighting with disaggregation" do
158
158
  should_have_same_sql(
159
- "SELECT (SUM((segments.load_factor) / segments.departures_performed * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE (segments.load_factor IS NOT NULL) AND (segments.passengers > 0) AND (segments.departures_performed > 0)",
159
+ "SELECT (SUM(1.0 * (segments.load_factor) / segments.departures_performed * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE (segments.load_factor IS NOT NULL) AND (segments.passengers > 0) AND (segments.departures_performed > 0)",
160
160
  Segment.weighted_average_relation(:load_factor, :weighted_by => :passengers, :disaggregate_by => :departures_performed)
161
161
  )
162
162
  end
@@ -169,7 +169,7 @@ describe WeightedAverage do
169
169
  segment = Segment.arel_table
170
170
 
171
171
  should_have_same_sql(
172
- "SELECT (SUM((segments.seats) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments INNER JOIN aircraft ON aircraft.bts_aircraft_type = segments.bts_aircraft_type INNER JOIN aircraft_classes ON aircraft_classes.id = aircraft.aircraft_class_id WHERE aircraft.aircraft_class_id = aircraft_classes.id AND (segments.seats IS NOT NULL) AND (segments.passengers > 0)",
172
+ "SELECT (SUM(1.0 * (segments.seats) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments INNER JOIN aircraft ON aircraft.bts_aircraft_type = segments.bts_aircraft_type INNER JOIN aircraft_classes ON aircraft_classes.id = aircraft.aircraft_class_id WHERE aircraft.aircraft_class_id = aircraft_classes.id AND (segments.seats IS NOT NULL) AND (segments.passengers > 0)",
173
173
  Segment.joins(:aircraft => :aircraft_class).weighted_average_relation(:seats, :weighted_by => :passengers).where(aircraft[:aircraft_class_id].eq(aircraft_class[:id]))
174
174
  )
175
175
  end
@@ -179,7 +179,7 @@ describe WeightedAverage do
179
179
 
180
180
  it "does custom weighting, with a cohort" do
181
181
  should_have_same_sql(
182
- "SELECT (SUM((segments.load_factor) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE segments.payload = 5 AND (segments.load_factor IS NOT NULL) AND (segments.passengers > 0)",
182
+ "SELECT (SUM(1.0 * (segments.load_factor) * segments.passengers) / SUM(segments.passengers)) AS weighted_average FROM segments WHERE segments.payload = 5 AND (segments.load_factor IS NOT NULL) AND (segments.passengers > 0)",
183
183
  Segment.big_cohort(:payload => 5).weighted_average_relation(:load_factor, :weighted_by => :passengers)
184
184
  )
185
185
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: weighted_average
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -12,11 +12,11 @@ authors:
12
12
  autorequire:
13
13
  bindir: bin
14
14
  cert_chain: []
15
- date: 2011-09-23 00:00:00.000000000Z
15
+ date: 2011-09-28 00:00:00.000000000Z
16
16
  dependencies:
17
17
  - !ruby/object:Gem::Dependency
18
18
  name: activerecord
19
- requirement: &2153895000 !ruby/object:Gem::Requirement
19
+ requirement: &2154896080 !ruby/object:Gem::Requirement
20
20
  none: false
21
21
  requirements:
22
22
  - - ~>
@@ -24,10 +24,10 @@ dependencies:
24
24
  version: '3'
25
25
  type: :runtime
26
26
  prerelease: false
27
- version_requirements: *2153895000
27
+ version_requirements: *2154896080
28
28
  - !ruby/object:Gem::Dependency
29
29
  name: activesupport
30
- requirement: &2153894500 !ruby/object:Gem::Requirement
30
+ requirement: &2154895560 !ruby/object:Gem::Requirement
31
31
  none: false
32
32
  requirements:
33
33
  - - ~>
@@ -35,10 +35,10 @@ dependencies:
35
35
  version: '3'
36
36
  type: :runtime
37
37
  prerelease: false
38
- version_requirements: *2153894500
38
+ version_requirements: *2154895560
39
39
  - !ruby/object:Gem::Dependency
40
40
  name: arel
41
- requirement: &2153894040 !ruby/object:Gem::Requirement
41
+ requirement: &2154895060 !ruby/object:Gem::Requirement
42
42
  none: false
43
43
  requirements:
44
44
  - - ~>
@@ -46,10 +46,10 @@ dependencies:
46
46
  version: '2'
47
47
  type: :runtime
48
48
  prerelease: false
49
- version_requirements: *2153894040
49
+ version_requirements: *2154895060
50
50
  - !ruby/object:Gem::Dependency
51
51
  name: cohort_scope
52
- requirement: &2153893580 !ruby/object:Gem::Requirement
52
+ requirement: &2154894580 !ruby/object:Gem::Requirement
53
53
  none: false
54
54
  requirements:
55
55
  - - ! '>='
@@ -57,10 +57,10 @@ dependencies:
57
57
  version: 0.0.2
58
58
  type: :development
59
59
  prerelease: false
60
- version_requirements: *2153893580
60
+ version_requirements: *2154894580
61
61
  - !ruby/object:Gem::Dependency
62
62
  name: minitest
63
- requirement: &2153893200 !ruby/object:Gem::Requirement
63
+ requirement: &2154894160 !ruby/object:Gem::Requirement
64
64
  none: false
65
65
  requirements:
66
66
  - - ! '>='
@@ -68,10 +68,10 @@ dependencies:
68
68
  version: '0'
69
69
  type: :development
70
70
  prerelease: false
71
- version_requirements: *2153893200
71
+ version_requirements: *2154894160
72
72
  - !ruby/object:Gem::Dependency
73
73
  name: rake
74
- requirement: &2153892740 !ruby/object:Gem::Requirement
74
+ requirement: &2154893580 !ruby/object:Gem::Requirement
75
75
  none: false
76
76
  requirements:
77
77
  - - ! '>='
@@ -79,10 +79,10 @@ dependencies:
79
79
  version: '0'
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *2153892740
82
+ version_requirements: *2154893580
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: mysql
85
- requirement: &2153892320 !ruby/object:Gem::Requirement
85
+ requirement: &2154893020 !ruby/object:Gem::Requirement
86
86
  none: false
87
87
  requirements:
88
88
  - - ! '>='
@@ -90,10 +90,10 @@ dependencies:
90
90
  version: '0'
91
91
  type: :development
92
92
  prerelease: false
93
- version_requirements: *2153892320
93
+ version_requirements: *2154893020
94
94
  - !ruby/object:Gem::Dependency
95
95
  name: pg
96
- requirement: &2153891900 !ruby/object:Gem::Requirement
96
+ requirement: &2154892540 !ruby/object:Gem::Requirement
97
97
  none: false
98
98
  requirements:
99
99
  - - ! '>='
@@ -101,7 +101,7 @@ dependencies:
101
101
  version: '0'
102
102
  type: :development
103
103
  prerelease: false
104
- version_requirements: *2153891900
104
+ version_requirements: *2154892540
105
105
  description: Perform weighted averages, even across associations. Rails 3 only because
106
106
  it uses ARel.
107
107
  email: