pluck_all 2.0.3 → 2.3.1

Sign up to get free protection for your applications and to get access to all the features.
data/Rakefile CHANGED
@@ -1,22 +1,22 @@
1
- require "bundler/gem_tasks"
2
- require "rake/testtask"
3
-
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList['test/**/*_test.rb']
8
- end
9
-
10
- Rake::TestTask.new(:test_active_record) do |t|
11
- t.libs << "test"
12
- t.libs << "lib"
13
- t.test_files = FileList['test/active_record/**/*_test.rb']
14
- end
15
-
16
- Rake::TestTask.new(:test_mongoid) do |t|
17
- t.libs << "test"
18
- t.libs << "lib"
19
- t.test_files = FileList['test/mongoid/**/*_test.rb']
20
- end
21
-
22
- task :default => :test
1
+ require 'bundler/gem_tasks'
2
+ require 'rake/testtask'
3
+
4
+ Rake::TestTask.new(:test) do |t|
5
+ t.libs << 'test'
6
+ t.libs << 'lib'
7
+ t.test_files = FileList['test/**/*_test.rb']
8
+ end
9
+
10
+ Rake::TestTask.new(:test_active_record) do |t|
11
+ t.libs << 'test'
12
+ t.libs << 'lib'
13
+ t.test_files = FileList['test/active_record/**/*_test.rb']
14
+ end
15
+
16
+ Rake::TestTask.new(:test_mongoid) do |t|
17
+ t.libs << 'test'
18
+ t.libs << 'lib'
19
+ t.test_files = FileList['test/mongoid/**/*_test.rb']
20
+ end
21
+
22
+ task default: :test
data/bin/console CHANGED
@@ -1,14 +1,14 @@
1
- #!/usr/bin/env ruby
2
-
3
- require "bundler/setup"
4
- require "pluck_all"
5
-
6
- # You can add fixtures and/or initialization code here to make experimenting
7
- # with your gem easier. You can also use a different console, if you like.
8
-
9
- # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
12
-
13
- require "irb"
14
- IRB.start
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'bundler/setup'
4
+ require 'pluck_all'
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ # (If you use this, don't forget to add pry to your Gemfile!)
10
+ # require "pry"
11
+ # Pry.start
12
+
13
+ require 'irb'
14
+ IRB.start
data/bin/setup CHANGED
@@ -1,8 +1,8 @@
1
- #!/usr/bin/env bash
2
- set -euo pipefail
3
- IFS=$'\n\t'
4
- set -vx
5
-
6
- bundle install --gemfile=gemfiles/4.2.gemfile
7
-
8
- # Do any other automated setup that you need to do here
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install --gemfile=gemfiles/active_record_42.gemfile
7
+
8
+ # Do any other automated setup that you need to do here
@@ -1,14 +1,16 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in pluck_all.gemspec
4
-
5
- gem "sqlite3", "~> 1.3.0"
6
- gem "activerecord", "~> 3.2.0"
7
- gem "carrierwave", "~> 0.11.0"
8
-
9
- group :test do
10
- gem "simplecov"
11
- end
12
-
13
- gemspec :path => "../"
14
-
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'sqlite3', '~> 1.3.0'
6
+ gem 'activerecord', '~> 3.2.0'
7
+ gem 'rails_compatibility', '~> 0.0.7'
8
+
9
+ gem 'carrierwave', '~> 0.11.0'
10
+ gem 'mimemagic', '< 0.4.3' # Used by carrierwave gem
11
+
12
+ group :test do
13
+ gem 'simplecov', '< 0.18'
14
+ end
15
+
16
+ gemspec path: '../'
@@ -1,14 +1,18 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in pluck_all.gemspec
4
-
5
- gem "sqlite3", "~> 1.3.0"
6
- gem "activerecord", "~> 4.2.0"
7
- gem "carrierwave", "~> 0.11.0"
8
-
9
- group :test do
10
- gem "simplecov"
11
- end
12
-
13
- gemspec :path => "../"
14
-
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'sqlite3', '~> 1.3.0'
6
+ gem 'activerecord', '~> 4.2.0'
7
+ gem 'rails_compatibility', '~> 0.0.7'
8
+
9
+ gem 'carrierwave', '~> 0.11.0'
10
+ gem 'mimemagic', '< 0.4.3' # Used by carrierwave gem
11
+
12
+ gem 'globalize'
13
+
14
+ group :test do
15
+ gem 'simplecov', '< 0.18'
16
+ end
17
+
18
+ gemspec path: '../'
@@ -1,14 +1,18 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in pluck_all.gemspec
4
-
5
- gem "sqlite3", "~> 1.3.0"
6
- gem "activerecord", "~> 5.0.0"
7
- gem "carrierwave", "~> 0.11.0"
8
-
9
- group :test do
10
- gem "simplecov"
11
- end
12
-
13
- gemspec :path => "../"
14
-
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'sqlite3', '~> 1.3.0'
6
+ gem 'activerecord', '~> 5.0.0'
7
+ gem 'rails_compatibility', '~> 0.0.7'
8
+
9
+ gem 'carrierwave', '~> 0.11.0'
10
+ gem 'mimemagic', '< 0.4.3' # Used by carrierwave gem
11
+
12
+ gem 'globalize'
13
+
14
+ group :test do
15
+ gem 'simplecov', '< 0.18'
16
+ end
17
+
18
+ gemspec path: '../'
@@ -1,14 +1,18 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in pluck_all.gemspec
4
-
5
- gem "sqlite3", "~> 1.3.0"
6
- gem "activerecord", "~> 5.1.0"
7
- gem "carrierwave", "~> 0.11.0"
8
-
9
- group :test do
10
- gem "simplecov"
11
- end
12
-
13
- gemspec :path => "../"
14
-
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'sqlite3', '~> 1.3.0'
6
+ gem 'activerecord', '~> 5.1.0'
7
+ gem 'rails_compatibility', '~> 0.0.7'
8
+
9
+ gem 'carrierwave', '~> 0.11.0'
10
+ gem 'mimemagic', '< 0.4.3' # Used by carrierwave gem
11
+
12
+ gem 'globalize'
13
+
14
+ group :test do
15
+ gem 'simplecov', '< 0.18'
16
+ end
17
+
18
+ gemspec path: '../'
@@ -1,14 +1,18 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in pluck_all.gemspec
4
-
5
- gem "sqlite3", "~> 1.3.0"
6
- gem "activerecord", "~> 5.2.0"
7
- gem "carrierwave", "~> 0.11.0"
8
-
9
- group :test do
10
- gem "simplecov"
11
- end
12
-
13
- gemspec :path => "../"
14
-
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'sqlite3', '~> 1.3.0'
6
+ gem 'activerecord', '~> 5.2.0'
7
+ gem 'rails_compatibility', '~> 0.0.7'
8
+
9
+ gem 'carrierwave', '~> 0.11.0'
10
+ gem 'mimemagic', '< 0.4.3' # Used by carrierwave gem
11
+
12
+ gem 'globalize'
13
+
14
+ group :test do
15
+ gem 'simplecov', '< 0.18'
16
+ end
17
+
18
+ gemspec path: '../'
@@ -0,0 +1,18 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'sqlite3', '~> 1.4.1'
6
+ gem 'activerecord', '~> 6.0.0'
7
+ gem 'rails_compatibility', '~> 0.0.7'
8
+
9
+ gem 'carrierwave', '~> 0.11.0'
10
+ gem 'mimemagic', '< 0.4.3' # Used by carrierwave gem
11
+
12
+ gem 'globalize'
13
+
14
+ group :test do
15
+ gem 'simplecov', '< 0.18'
16
+ end
17
+
18
+ gemspec path: '../'
@@ -0,0 +1,18 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'sqlite3', '~> 1.4.1'
6
+ gem 'activerecord', '~> 6.1.0'
7
+ gem 'rails_compatibility', '~> 0.0.7'
8
+
9
+ gem 'carrierwave', '~> 0.11.0'
10
+ gem 'mimemagic', '< 0.4.3' # Used by carrierwave gem
11
+
12
+ gem 'globalize'
13
+
14
+ group :test do
15
+ gem 'simplecov', '< 0.18'
16
+ end
17
+
18
+ gemspec path: '../'
@@ -1,12 +1,11 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in pluck_all.gemspec
4
-
5
- gem "mongoid", "~> 5.4.0"
6
-
7
- group :test do
8
- gem "simplecov"
9
- end
10
-
11
- gemspec :path => "../"
12
-
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'mongoid', '~> 5.4.0'
6
+
7
+ group :test do
8
+ gem 'simplecov', '< 0.18'
9
+ end
10
+
11
+ gemspec path: '../'
@@ -1,12 +1,11 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in pluck_all.gemspec
4
-
5
- gem "mongoid", "~> 6.4.0"
6
-
7
- group :test do
8
- gem "simplecov"
9
- end
10
-
11
- gemspec :path => "../"
12
-
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'mongoid', '~> 6.4.0'
6
+
7
+ group :test do
8
+ gem 'simplecov', '< 0.18'
9
+ end
10
+
11
+ gemspec path: '../'
@@ -1,12 +1,11 @@
1
- source 'https://rubygems.org'
2
-
3
- # Specify your gem's dependencies in pluck_all.gemspec
4
-
5
- gem "mongoid", "~> 7.0.0"
6
-
7
- group :test do
8
- gem "simplecov"
9
- end
10
-
11
- gemspec :path => "../"
12
-
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in pluck_all.gemspec
4
+
5
+ gem 'mongoid', '~> 7.0.0'
6
+
7
+ group :test do
8
+ gem 'simplecov', '< 0.18'
9
+ end
10
+
11
+ gemspec path: '../'
data/lib/pluck_all.rb CHANGED
@@ -1,4 +1,3 @@
1
- # frozen_string_literal: true
2
- require "pluck_all/version"
3
- require "pluck_all/hooks"
4
-
1
+ # frozen_string_literal: true
2
+ require 'pluck_all/version'
3
+ require 'pluck_all/hooks'
@@ -1,21 +1,21 @@
1
- module PluckAll
2
- class Hooks
3
- def self.init
4
- # ActiveRecord
5
- begin
6
- require 'active_record'
7
- require 'pluck_all/models/active_record_extension'
8
- rescue LoadError, Gem::LoadError
9
- end
10
-
11
- # Mongoid
12
- begin
13
- require 'mongoid'
14
- require 'pluck_all/models/mongoid_extension'
15
- rescue LoadError, Gem::LoadError
16
- end
17
- end
18
- end
19
- end
20
-
21
- PluckAll::Hooks.init
1
+ module PluckAll
2
+ class Hooks
3
+ class << self
4
+ def init
5
+ require 'pluck_all/models/active_record_extension' if require_if_exists('active_record')
6
+ require 'pluck_all/models/mongoid_extension' if require_if_exists('mongoid')
7
+ end
8
+
9
+ private
10
+
11
+ def require_if_exists(path)
12
+ require path
13
+ return true
14
+ rescue LoadError, Gem::LoadError
15
+ return false
16
+ end
17
+ end
18
+ end
19
+ end
20
+
21
+ PluckAll::Hooks.init
@@ -1,142 +1,138 @@
1
- class ActiveRecord::Base
2
- if !defined?(attribute_types) && defined?(column_types)
3
- class << self
4
- # column_types was changed to attribute_types in Rails 5
5
- alias_method :attribute_types, :column_types
6
- end
7
- end
8
- end
9
-
10
- module ActiveRecord
11
- [
12
- *([Type::Value, Type::Integer, Type::Serialized] if defined?(Type::Value)),
13
- *([Enum::EnumType] if defined?(Enum::EnumType)),
14
- ].each do |s|
15
- s.class_eval do
16
- if !method_defined?(:deserialize) && method_defined?(:type_cast_from_database)
17
- # column_types was changed to attribute_types in Rails 5
18
- alias deserialize type_cast_from_database
19
- end
20
- end
21
- end
22
- end
23
-
24
- class ActiveRecord::Relation
25
- def cast_need_columns(column_names, _klass = nil)
26
- @pluck_all_cast_need_columns = column_names.map(&:to_s)
27
- @pluck_all_cast_klass = _klass
28
- return self
29
- end
30
-
31
- def select_all(*column_names)
32
- relation = clone
33
- return klass.connection.select_all(relation.select(column_names).to_sql)
34
- end
35
-
36
- if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new('4.0.0')
37
- def pluck_all(*column_names, cast_uploader_url: true)
38
- column_names.map!(&to_sql_column_name)
39
- result = select_all(*column_names)
40
- result.map! do |attributes| # This map! behaves different to array#map!
41
- initialized_attributes = klass.initialize_attributes(attributes)
42
- attributes.each do |key, attribute|
43
- attributes[key] = klass.type_cast_attribute(key, initialized_attributes) #TODO 現在AS過後的type cast會有一點問題
44
- end
45
- cast_carrier_wave_uploader_url(attributes) if cast_uploader_url
46
- next attributes
47
- end
48
- end
49
-
50
- private
51
-
52
- def to_sql_column_name
53
- proc do |column_name|
54
- if column_name.is_a?(Symbol) && column_names.include?(column_name.to_s)
55
- "#{connection.quote_table_name(table_name)}.#{connection.quote_column_name(column_name)}"
56
- else
57
- column_name.to_s
58
- end
59
- end
60
- end
61
- else
62
- def pluck_all(*column_names, cast_uploader_url: true)
63
- column_names.map!(&to_sql_column_name)
64
- return construct_relation_for_association_calculations.pluck_all(*column_names) if has_include?(column_names.first)
65
- result = select_all(*column_names)
66
- attribute_types = klass.attribute_types
67
- result.map! do |attributes| # This map! behaves different to array#map!
68
- attributes.each do |key, attribute|
69
- attributes[key] = result.send(:column_type, key, attribute_types).deserialize(attribute) #TODO 現在AS過後的type cast會有一點問題,但似乎原生的pluck也有此問題
70
- end
71
- cast_carrier_wave_uploader_url(attributes) if cast_uploader_url
72
- next attributes
73
- end
74
- end
75
-
76
- private
77
-
78
- def to_sql_column_name
79
- proc do |column_name|
80
- if column_name.is_a?(Symbol) && attribute_alias?(column_name)
81
- attribute_alias(column_name)
82
- else
83
- column_name.to_s
84
- end
85
- end
86
- end
87
- end
88
-
89
- # ----------------------------------------------------------------
90
- # Support casting CarrierWave url
91
- # ----------------------------------------------------------------
92
- def cast_carrier_wave_uploader_url(attributes)
93
- if defined?(CarrierWave) && klass.respond_to?(:uploaders)
94
- @pluck_all_cast_klass ||= klass
95
- @pluck_all_uploaders ||= @pluck_all_cast_klass.uploaders.select{|key, uploader| attributes.key?(key.to_s) }
96
- @pluck_all_uploaders.each do |key, uploader|
97
- {}.tap do |hash|
98
- @pluck_all_cast_need_columns.each{|k| hash[k] = attributes[k] } if @pluck_all_cast_need_columns
99
- obj = @pluck_all_cast_klass.new(hash)
100
- obj[key] = attributes[key_s = key.to_s]
101
- #https://github.com/carrierwaveuploader/carrierwave/blob/87c37b706c560de6d01816f9ebaa15ce1c51ed58/lib/carrierwave/mount.rb#L142
102
- attributes[key_s] = obj.send(key)
103
- end
104
- end
105
- end
106
- return attributes
107
- end
108
- end
109
-
110
- class ActiveRecord::Relation
111
- if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new('4.0.2')
112
- def pluck_array(*args)
113
- return pluck_all(*args, cast_uploader_url: false).map{|hash|
114
- result = hash.values #P.S. 這裡是相信ruby 1.9以後,hash.values的順序跟insert的順序一樣。
115
- next (args.one? ? result.first : result)
116
- }
117
- end
118
- else
119
- alias_method :pluck_array, :pluck if not method_defined?(:pluck_array)
120
- end
121
- end
122
-
123
-
124
- class << ActiveRecord::Base
125
- def cast_need_columns(*args)
126
- where(nil).cast_need_columns(*args)
127
- end
128
-
129
- def pluck_all(*args)
130
- where(nil).pluck_all(*args)
131
- end
132
-
133
- def pluck_array(*args)
134
- where(nil).pluck_array(*args)
135
- end
136
- end
137
-
138
- module ActiveRecord::NullRelation
139
- def pluck_all(*args)
140
- []
141
- end
142
- end
1
+ require 'rails_compatibility/attribute_types'
2
+ require 'rails_compatibility/has_include'
3
+ require 'rails_compatibility/apply_join_dependency'
4
+ require_relative 'patches/deserialize'
5
+
6
+ class ActiveRecord::Relation
7
+ def cast_need_columns(column_names, _klass = nil)
8
+ @pluck_all_cast_need_columns = column_names.map(&:to_s)
9
+ @pluck_all_cast_klass = _klass
10
+ return self
11
+ end
12
+
13
+ def select_all(column_names)
14
+ relation = clone
15
+
16
+ # See: https://github.com/globalize/globalize/pull/707
17
+ if respond_to?(:translated_attribute_names) && (parsed = parse_translated_columns(column_names))
18
+ relation = relation.join_translations
19
+ column_names = parsed
20
+ end
21
+
22
+ relation.select_values = [].freeze # cannot use `unscope(:select)` in Rails 3
23
+
24
+ sql = relation.select(column_names.map(&to_sql_column_name)).to_sql
25
+ return klass.connection.select_all(sql)
26
+ end
27
+
28
+ if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new('4.0.0')
29
+ def pluck_all(*column_names, cast_uploader_url: true)
30
+ result = select_all(column_names)
31
+ result.map! do |attributes| # This map! behaves different to array#map!
32
+ initialized_attributes = klass.initialize_attributes(attributes)
33
+ attributes.each do |key, _attribute|
34
+ attributes[key] = klass.type_cast_attribute(key, initialized_attributes) # TODO: 現在AS過後的type cast會有一點問題
35
+ end
36
+ cast_carrier_wave_uploader_url(attributes) if cast_uploader_url
37
+ next attributes
38
+ end
39
+ end
40
+
41
+ private
42
+
43
+ def to_sql_column_name
44
+ proc do |column_name|
45
+ if column_name.is_a?(Arel::Attributes::Attribute)
46
+ "#{column_name.relation.name}.#{column_name.name}"
47
+ elsif column_name.is_a?(Symbol) && column_names.include?(column_name.to_s)
48
+ "#{connection.quote_table_name(table_name)}.#{connection.quote_column_name(column_name)}"
49
+ else
50
+ column_name.to_s
51
+ end
52
+ end
53
+ end
54
+ else
55
+ def pluck_all(*column_names, cast_uploader_url: true)
56
+ has_include = RailsCompatibility.has_include?(self, column_names.first)
57
+ return RailsCompatibility.apply_join_dependency(self).pluck_all(*column_names) if has_include
58
+
59
+ result = select_all(column_names)
60
+ attribute_types = RailsCompatibility.attribute_types(klass)
61
+ result.map do |attributes| # This map behaves different to array#map
62
+ attributes.each do |key, attribute|
63
+ attributes[key] = result.send(:column_type, key, attribute_types).deserialize(attribute) # TODO: 現在AS過後的type cast會有一點問題,但似乎原生的pluck也有此問題
64
+ end
65
+ cast_carrier_wave_uploader_url(attributes) if cast_uploader_url
66
+ next attributes
67
+ end
68
+ end
69
+
70
+ private
71
+
72
+ def to_sql_column_name
73
+ proc do |column_name|
74
+ if column_name.is_a?(Arel::Attributes::Attribute)
75
+ "#{column_name.relation.name}.#{column_name.name}"
76
+ elsif column_name.is_a?(Symbol) && attribute_alias?(column_name)
77
+ attribute_alias(column_name)
78
+ else
79
+ column_name.to_s
80
+ end
81
+ end
82
+ end
83
+ end
84
+
85
+ # ----------------------------------------------------------------
86
+ # ● Support casting CarrierWave url
87
+ # ----------------------------------------------------------------
88
+ def cast_carrier_wave_uploader_url(attributes)
89
+ if defined?(CarrierWave) && klass.respond_to?(:uploaders)
90
+ @pluck_all_cast_need_columns ||= nil
91
+ @pluck_all_cast_klass ||= klass
92
+ @pluck_all_uploaders ||= @pluck_all_cast_klass.uploaders.select{|key, _uploader| attributes.key?(key.to_s) }
93
+ @pluck_all_uploaders.each do |key, _uploader|
94
+ {}.tap do |hash|
95
+ @pluck_all_cast_need_columns.each{|k| hash[k] = attributes[k] } if @pluck_all_cast_need_columns
96
+ obj = @pluck_all_cast_klass.instantiate(hash)
97
+ obj[key] = attributes[key_s = key.to_s]
98
+ # https://github.com/carrierwaveuploader/carrierwave/blob/87c37b706c560de6d01816f9ebaa15ce1c51ed58/lib/carrierwave/mount.rb#L142
99
+ attributes[key_s] = obj.send(key)
100
+ end
101
+ end
102
+ end
103
+ return attributes
104
+ end
105
+ end
106
+
107
+ class ActiveRecord::Relation
108
+ if Gem::Version.new(ActiveRecord::VERSION::STRING) < Gem::Version.new('4.0.2')
109
+ def pluck_array(*args)
110
+ return pluck_all(*args, cast_uploader_url: false).map do |hash|
111
+ result = hash.values # P.S. 這裡是相信ruby 1.9以後,hash.values的順序跟insert的順序一樣。
112
+ next (args.one? ? result.first : result)
113
+ end
114
+ end
115
+ else
116
+ alias pluck_array pluck if not method_defined?(:pluck_array)
117
+ end
118
+ end
119
+
120
+ class << ActiveRecord::Base
121
+ def cast_need_columns(*args)
122
+ where(nil).cast_need_columns(*args)
123
+ end
124
+
125
+ def pluck_all(*args)
126
+ where(nil).pluck_all(*args)
127
+ end
128
+
129
+ def pluck_array(*args)
130
+ where(nil).pluck_array(*args)
131
+ end
132
+ end
133
+
134
+ module ActiveRecord::NullRelation
135
+ def pluck_all(*_args)
136
+ []
137
+ end
138
+ end