active_median 0.0.1 → 0.1.0

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.
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