active_record_distinct_on 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 55b22baddc27dc7d8703e27b79e676f06284b702
4
+ data.tar.gz: 5dcbffedd0f0bfe507b89b65b1169953eceed123
5
+ SHA512:
6
+ metadata.gz: a8e645316a95be4eb16d5fe415547b06781a37bb10a86a64c70e9efd963e46141e02dd363bb482e7d000e32d878620afe0f86633b4141db07677d56c97957ce3
7
+ data.tar.gz: 6041dd0613643a47121e7ca99122d7777fe3ec7d7d49ad6381df7b8bf66bd2d83fa7c1fd14c94660d309c5009c5d74714a62f1621e8e644b1a5a32292a88f6bd
@@ -0,0 +1,14 @@
1
+ require 'active_record_distinct_on/version'
2
+
3
+ require 'active_record'
4
+
5
+ module ActiveRecordDistinctOn
6
+ autoload :DistinctOnQueryMethods, 'active_record_distinct_on/distinct_on_query_methods'
7
+
8
+ def self.install
9
+ ActiveRecord::Relation.include DistinctOnQueryMethods
10
+ ActiveRecord::Querying.delegate :distinct_on, to: :all
11
+ end
12
+ end
13
+
14
+ require 'active_record_distinct_on/railtie' if defined?(Rails)
@@ -0,0 +1,47 @@
1
+ require 'active_record_distinct_on'
2
+
3
+ module ActiveRecordDistinctOn
4
+ module DistinctOnQueryMethods
5
+ extend ActiveSupport::Concern
6
+
7
+ FROZEN_EMPTY_ARRAY = [].freeze
8
+
9
+ included do
10
+ self::MULTI_VALUE_METHODS << :distinct_on
11
+ self::INVALID_METHODS_FOR_DELETE_ALL << :distinct_on
12
+ self::VALUE_METHODS << :distinct_on
13
+ end
14
+
15
+ def distinct_on_values
16
+ @values[:distinct_on] || FROZEN_EMPTY_ARRAY
17
+ end
18
+
19
+ def distinct_on_values=(values)
20
+ @values[:distinct_on] = values
21
+ end
22
+
23
+ def distinct_on(*fields)
24
+ raise ArgumentError, 'Call this with at least one field' if fields.empty?
25
+ spawn.distinct_on!(*fields)
26
+ end
27
+
28
+ def distinct_on!(*fields)
29
+ fields.flatten!
30
+ fields.map! { |field| klass.attribute_alias?(field) ? klass.attribute_alias(field).to_sym : field }
31
+ self.distinct_on_values += fields
32
+ self
33
+ end
34
+
35
+ private
36
+
37
+ def build_arel
38
+ super.tap do |arel|
39
+ build_distinct_on(arel, distinct_on_values)
40
+ end
41
+ end
42
+
43
+ def build_distinct_on(arel, columns)
44
+ arel.distinct_on arel_columns columns unless columns.empty?
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,11 @@
1
+ require 'active_record_distinct_on'
2
+
3
+ module ActiveRecordDistinctOn
4
+ class Railtie < ::Rails::Railtie
5
+ initializer 'active_record_distinct_on.monkey_patch_active_record' do
6
+ ActiveSupport.on_load(:active_record) do
7
+ ActiveRecordDistinctOn.install
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,3 @@
1
+ module ActiveRecordDistinctOn
2
+ VERSION = '0.1.0'
3
+ end
metadata ADDED
@@ -0,0 +1,146 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_record_distinct_on
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Alec Larsen
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-08-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activerecord
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">"
18
+ - !ruby/object:Gem::Version
19
+ version: 4.2.1
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">"
25
+ - !ruby/object:Gem::Version
26
+ version: 4.2.1
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">"
32
+ - !ruby/object:Gem::Version
33
+ version: 4.2.1
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">"
39
+ - !ruby/object:Gem::Version
40
+ version: 4.2.1
41
+ - !ruby/object:Gem::Dependency
42
+ name: arel
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">"
46
+ - !ruby/object:Gem::Version
47
+ version: 2.1.0
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">"
53
+ - !ruby/object:Gem::Version
54
+ version: 2.1.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: pry
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ description: Adds ActiveRecord::Relation#distinct_on and ActiveRecord::Querying#distinct_on
112
+ email:
113
+ - aleclarsen42@gmail.com
114
+ executables: []
115
+ extensions: []
116
+ extra_rdoc_files: []
117
+ files:
118
+ - lib/active_record_distinct_on.rb
119
+ - lib/active_record_distinct_on/distinct_on_query_methods.rb
120
+ - lib/active_record_distinct_on/railtie.rb
121
+ - lib/active_record_distinct_on/version.rb
122
+ homepage: https://github.com/anarchocurious/active_record_distinct_on
123
+ licenses:
124
+ - MIT
125
+ metadata: {}
126
+ post_install_message:
127
+ rdoc_options: []
128
+ require_paths:
129
+ - lib
130
+ required_ruby_version: !ruby/object:Gem::Requirement
131
+ requirements:
132
+ - - ">="
133
+ - !ruby/object:Gem::Version
134
+ version: '0'
135
+ required_rubygems_version: !ruby/object:Gem::Requirement
136
+ requirements:
137
+ - - ">="
138
+ - !ruby/object:Gem::Version
139
+ version: '0'
140
+ requirements: []
141
+ rubyforge_project:
142
+ rubygems_version: 2.5.1
143
+ signing_key:
144
+ specification_version: 4
145
+ summary: Adds support for `DISTINCT ON` statements when querying with ActiveRecord
146
+ test_files: []