active_record_distinct_on 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 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: []