# File lib/priloo/preloaders/bm_injector_preloader.rb, line 50 def primary_key @primary_key ||= ar_class.primary_key.to_sym end
class Priloo::Preloaders::BmInjectorPreloader
This class implements preloading for Bannerman's custom ActiveRecord injectors
Attributes
ar_class[R]
name[R]
Public Class Methods
new(ar_class, name)
click to toggle source
Calls superclass method
Priloo::Preloaders::BasePreloader::new
# File lib/priloo/preloaders/bm_injector_preloader.rb, line 9 def initialize(ar_class, name) super([self.class, ar_class, name]) @name = name @ar_class = ar_class end
Public Instance Methods
extract(target)
click to toggle source
# File lib/priloo/preloaders/bm_injector_preloader.rb, line 36 def extract(target) target.instance_variable_get(:@attributes).[](name).value end
inject(target, value)
click to toggle source
# File lib/priloo/preloaders/bm_injector_preloader.rb, line 28 def inject(target, value) target._preloadable_target.send(:write_attribute_without_type_cast, name, value) end
injected?(target)
click to toggle source
# File lib/priloo/preloaders/bm_injector_preloader.rb, line 32 def injected?(target) target.has_attribute?(name) end
preload(ar_list)
click to toggle source
# File lib/priloo/preloaders/bm_injector_preloader.rb, line 16 def preload(ar_list) ids = ar_list.map { |ar| ar.send(primary_key) } injector_sql = ar_class.send("#{name}_sql") sql_query = Arel.sql <<~SQL #{quote_table_column(ar_class.table_name, primary_key)} AS id, (#{injector_sql}) AS val SQL fetched_data = ar_class.where(primary_key => ids.uniq).pluck(sql_query).to_h ar_list.map { |ar| fetched_data[ar.send(primary_key)] } end
Private Instance Methods
primary_key()
click to toggle source
quote_identifier(str)
click to toggle source
# File lib/priloo/preloaders/bm_injector_preloader.rb, line 42 def quote_identifier(str) ar_class.connection.quote_column_name str.to_s end
quote_table_column(table, column)
click to toggle source
# File lib/priloo/preloaders/bm_injector_preloader.rb, line 46 def quote_table_column(table, column) quote_identifier(table) + '.' + quote_identifier(column) end