Module: Nativepluck
- Defined in:
- lib/nativepluck/version.rb,
lib/nativepluck.rb
Overview
Copyright 2018 Ohad Dahan, Al Chou
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing and
limitations under the License.
Defined Under Namespace
Modules: InstanceMethods
Constant Summary collapse
- VERSION =
"0.2.1"
Class Attribute Summary collapse
-
.nativepluck_init ⇒ Object
Returns the value of attribute nativepluck_init.
-
.nativepluck_type_map_for_queries ⇒ Object
Returns the value of attribute nativepluck_type_map_for_queries.
-
.nativepluck_type_map_for_results ⇒ Object
Returns the value of attribute nativepluck_type_map_for_results.
-
.original_type_map_for_queries ⇒ Object
Returns the value of attribute original_type_map_for_queries.
-
.original_type_map_for_results ⇒ Object
Returns the value of attribute original_type_map_for_results.
-
.override_pluck ⇒ Object
Returns the value of attribute override_pluck.
Class Method Summary collapse
- .init_nativepluck ⇒ Object
- .nativepluck(input) ⇒ Object
- .return_original_casters ⇒ Object
- .set_override_pluck(selection) ⇒ Object
- .set_pg_native_casters ⇒ Object
Class Attribute Details
.nativepluck_init ⇒ Object
Returns the value of attribute nativepluck_init.
23 24 25 |
# File 'lib/nativepluck.rb', line 23 def nativepluck_init @nativepluck_init end |
.nativepluck_type_map_for_queries ⇒ Object
Returns the value of attribute nativepluck_type_map_for_queries.
21 22 23 |
# File 'lib/nativepluck.rb', line 21 def nativepluck_type_map_for_queries @nativepluck_type_map_for_queries end |
.nativepluck_type_map_for_results ⇒ Object
Returns the value of attribute nativepluck_type_map_for_results.
21 22 23 |
# File 'lib/nativepluck.rb', line 21 def nativepluck_type_map_for_results @nativepluck_type_map_for_results end |
.original_type_map_for_queries ⇒ Object
Returns the value of attribute original_type_map_for_queries.
22 23 24 |
# File 'lib/nativepluck.rb', line 22 def original_type_map_for_queries @original_type_map_for_queries end |
.original_type_map_for_results ⇒ Object
Returns the value of attribute original_type_map_for_results.
22 23 24 |
# File 'lib/nativepluck.rb', line 22 def original_type_map_for_results @original_type_map_for_results end |
.override_pluck ⇒ Object
Returns the value of attribute override_pluck.
23 24 25 |
# File 'lib/nativepluck.rb', line 23 def override_pluck @override_pluck end |
Class Method Details
.init_nativepluck ⇒ Object
28 29 30 31 32 33 34 35 |
# File 'lib/nativepluck.rb', line 28 def self.init_nativepluck return if @nativepluck_init @nativepluck_type_map_for_results = PG::BasicTypeMapForResults.new ActiveRecord::Base.connection.raw_connection @nativepluck_type_map_for_queries = PG::BasicTypeMapForQueries.new ActiveRecord::Base.connection.raw_connection @original_type_map_for_results = ActiveRecord::Base.connection.raw_connection.type_map_for_results @original_type_map_for_queries = ActiveRecord::Base.connection.raw_connection.type_map_for_queries @nativepluck_init = true end |
.nativepluck(input) ⇒ Object
49 50 51 52 53 54 55 56 57 58 59 60 61 |
# File 'lib/nativepluck.rb', line 49 def self.nativepluck(input) out = [] begin sql = input.respond_to?(:to_sql) ? input.to_sql : input Nativepluck.set_pg_native_casters results = ActiveRecord::Base.connection.raw_connection.async_exec(sql) results.nfields == 1 ? out = results.column_values(0) : out = results.values ensure results.try(:clear) Nativepluck.return_original_casters end return out end |
.return_original_casters ⇒ Object
43 44 45 46 47 |
# File 'lib/nativepluck.rb', line 43 def self.return_original_casters init_nativepluck ActiveRecord::Base.connection.raw_connection.type_map_for_results = Nativepluck.original_type_map_for_results ActiveRecord::Base.connection.raw_connection.type_map_for_queries = Nativepluck.original_type_map_for_queries end |
.set_override_pluck(selection) ⇒ Object
94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 |
# File 'lib/nativepluck.rb', line 94 def self.set_override_pluck(selection) raise ArgumentError.new("#{__method__}:: Input should be true/false and not #{selection.class}") unless (selection.is_a?(TrueClass) || selection.is_a?(FalseClass)) if selection ::ActiveRecord::Calculations.class_eval do alias_method :orig_pluck, :pluck alias_method :pluck, :nativepluck end ::ActiveRecord::.class_eval do alias_method :orig_pluck, :pluck alias_method :pluck, :nativepluck end else unless Nativepluck.override_pluck raise ArgumentError.new("#{__method__}:: Cannot turn off pluck overriding since it wasn't set yet") end ::ActiveRecord::Calculations.class_eval do alias_method :pluck, :orig_pluck end ::ActiveRecord::.class_eval do alias_method :pluck, :orig_pluck end end Nativepluck.override_pluck = selection end |
.set_pg_native_casters ⇒ Object
37 38 39 40 41 |
# File 'lib/nativepluck.rb', line 37 def self.set_pg_native_casters init_nativepluck ActiveRecord::Base.connection.raw_connection.type_map_for_results = Nativepluck.nativepluck_type_map_for_results ActiveRecord::Base.connection.raw_connection.type_map_for_queries = Nativepluck.nativepluck_type_map_for_queries end |