module ActiveRecord::RelationExtender

Adding functionality to ActiveRecord::Relation to make

optars method available for all relations,
returning array of `OAR`s which we generate

Constants

DEFAULT_QUERY_OPTIONS

Public Instance Methods

opt_ar_objects(options = {})
Alias for: optars
optars(options = {}) click to toggle source
# File lib/opt_ar/core_ext/active_record/relation.rb, line 15
def optars(options = {})
  attrs = options[:attrs] || []
  validate_columns(attrs)
  select_attrs = ([primary_key] + attrs).uniq
  sql_query = except(:select).select(select_attrs).to_sql
  fetch_objects(sql_query, select_attrs)
end
Also aliased as: opt_ar_objects

Private Instance Methods

fetch_objects(query, requested_attributes) click to toggle source
# File lib/opt_ar/core_ext/active_record/relation.rb, line 27
def fetch_objects(query, requested_attributes)
  res = fetch_sql_rows(query, DEFAULT_QUERY_OPTIONS)
  res.map do |row|
    OptAR::OAR.init_manual(row, klass, requested_attributes)
  end
end
fetch_sql_rows(query, options) click to toggle source
# File lib/opt_ar/core_ext/active_record/relation.rb, line 34
def fetch_sql_rows(query, options)
  client = connection.raw_connection
  connection.send(:log, query, "OptAR - #{klass.name}") do
    client.query(query, options)
  end
end
validate_columns(attrs) click to toggle source
# File lib/opt_ar/core_ext/active_record/relation.rb, line 41
def validate_columns(attrs)
  klass_attrs = klass.column_names.map(&:to_sym)
  valid = (attrs - klass_attrs).empty?
  raise OptAR::Errors::UnknownARColumnError unless valid
end