active_median 0.0.1 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: e6c1c8d191ba4ab10a5068885e41d72c423d25c2
4
- data.tar.gz: 0621d24b182e8fc23dd2873c26ab4229f34a73e3
3
+ metadata.gz: cd1078e7f04565325bc6055502adad0c3703eec5
4
+ data.tar.gz: 02266f10162a9dec2779790bb926adc0e95ae696
5
5
  SHA512:
6
- metadata.gz: b1e9ddd636a01f252edda5d7c07a43a4cd13f78de766eeb335e7318558fc986997b5ebec6dd4a5572acd9ecb9efe64af1d9d1a5e927b11c07a056adf3b597378
7
- data.tar.gz: cca8d23759fb830b2033070eed56f57b2a0a68f9155ef0b8ba949665e5538e048e78ce82016c131ccc527f3e507f54e848ee04a37d136e0a012af25f27f23613
6
+ metadata.gz: 99455884b48f4b78a35524fc95c8912a33cec9e3b92745577ce6583ba7acc70d4e70beddf2c9173dfc7756f79eb5a335a75d5ca36a54cdad23ceec44bf767157
7
+ data.tar.gz: 147c1b11f376a34407407ccc7b901a1533b4f8b1312f9142e51eab3e3d2b3ef4e21ab108f226772d7c22f2354242193fdd3b9ce4e308c4acd4897d1d204bc70a
data/README.md CHANGED
@@ -1,10 +1,6 @@
1
1
  # ActiveMedian
2
2
 
3
- Median for ActiveRecord
4
-
5
- **PostgreSQL only**
6
-
7
- ## Usage
3
+ Median for ActiveRecord - PostgreSQL only at the moment
8
4
 
9
5
  ```ruby
10
6
  Item.median(:price)
@@ -10,7 +10,7 @@ Gem::Specification.new do |spec|
10
10
  spec.email = ["acekane1@gmail.com"]
11
11
  spec.description = %q{Median for ActiveRecord}
12
12
  spec.summary = %q{Median for ActiveRecord}
13
- spec.homepage = ""
13
+ spec.homepage = "https://github.com/ankane/active_median"
14
14
  spec.license = "MIT"
15
15
 
16
16
  spec.files = `git ls-files`.split($/)
data/lib/active_median.rb CHANGED
@@ -35,6 +35,21 @@ module ActiveMedian
35
35
  FINALFUNC=array_median
36
36
  );
37
37
  SQL
38
+ ActiveRecord::Base.connection.execute <<-SQL
39
+ CREATE OR REPLACE FUNCTION array_median(double precision[])
40
+ RETURNS double precision AS
41
+ $$
42
+ SELECT array_median($1::numeric[])::double precision;
43
+ $$
44
+ LANGUAGE SQL;
45
+
46
+ DROP AGGREGATE IF EXISTS median(double precision);
47
+ CREATE AGGREGATE median(double precision) (
48
+ SFUNC=array_append,
49
+ STYPE=double precision[],
50
+ FINALFUNC=array_median
51
+ );
52
+ SQL
38
53
  true
39
54
  end
40
55
  end
@@ -49,7 +64,7 @@ end
49
64
 
50
65
  module ActiveRecord
51
66
  module Querying
52
- delegate :median, :to => :scoped
67
+ delegate :median, :to => (Gem::Version.new(Arel::VERSION) >= Gem::Version.new("4.0.1") ? :all : :scoped)
53
68
  end
54
69
  end
55
70
 
@@ -70,9 +85,14 @@ end
70
85
  module Arel
71
86
  module Visitors
72
87
  class ToSql
73
- def visit_Arel_Nodes_Median o
74
- "MEDIAN(#{o.distinct ? 'DISTINCT ' : ''}#{o.expressions.map { |x|
88
+ def visit_Arel_Nodes_Median o, a=nil
89
+ if a
90
+ "AVG(#{o.distinct ? 'DISTINCT ' : ''}#{o.expressions.map { |x|
91
+ visit x, a }.join(', ')})#{o.alias ? " AS #{visit o.alias, a}" : ''}"
92
+ else
93
+ "MEDIAN(#{o.distinct ? 'DISTINCT ' : ''}#{o.expressions.map { |x|
75
94
  visit x }.join(', ')})#{o.alias ? " AS #{visit o.alias}" : ''}"
95
+ end
76
96
  end
77
97
  end
78
98
  end
@@ -1,3 +1,3 @@
1
1
  module ActiveMedian
2
- VERSION = "0.0.1"
2
+ VERSION = "0.1.0"
3
3
  end
metadata CHANGED
@@ -1,41 +1,41 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: active_median
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Kane
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-08-03 00:00:00.000000000 Z
11
+ date: 2014-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ~>
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
19
  version: '1.3'
20
20
  type: :development
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ~>
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
26
  version: '1.3'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: rake
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0'
41
41
  description: Median for ActiveRecord
@@ -45,7 +45,7 @@ executables: []
45
45
  extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
- - .gitignore
48
+ - ".gitignore"
49
49
  - Gemfile
50
50
  - LICENSE.txt
51
51
  - README.md
@@ -53,7 +53,7 @@ files:
53
53
  - active_median.gemspec
54
54
  - lib/active_median.rb
55
55
  - lib/active_median/version.rb
56
- homepage: ''
56
+ homepage: https://github.com/ankane/active_median
57
57
  licenses:
58
58
  - MIT
59
59
  metadata: {}
@@ -63,17 +63,17 @@ require_paths:
63
63
  - lib
64
64
  required_ruby_version: !ruby/object:Gem::Requirement
65
65
  requirements:
66
- - - '>='
66
+ - - ">="
67
67
  - !ruby/object:Gem::Version
68
68
  version: '0'
69
69
  required_rubygems_version: !ruby/object:Gem::Requirement
70
70
  requirements:
71
- - - '>='
71
+ - - ">="
72
72
  - !ruby/object:Gem::Version
73
73
  version: '0'
74
74
  requirements: []
75
75
  rubyforge_project:
76
- rubygems_version: 2.0.0
76
+ rubygems_version: 2.2.0
77
77
  signing_key:
78
78
  specification_version: 4
79
79
  summary: Median for ActiveRecord