module RequiredQueryAttributes::Relation

Public Instance Methods

load(*) click to toggle source

Intercepts calls to 'load', validating for required attributes before execution

Calls superclass method
# File lib/required_query_attributes/relation.rb, line 8
def load(*)
  required_query_attributes = @klass.required_query_attributes
  check_required_query_attributes(required_query_attributes) if required_query_attributes
  super
end

Private Instance Methods

check_required_query_attributes(required_query_attributes) click to toggle source
# File lib/required_query_attributes/relation.rb, line 16
def check_required_query_attributes(required_query_attributes)
  predicate_attributes = where_clause.send(:predicates).
    select { |node| node.left.relation.name == table_name }.
    map { |node| node.left.name }

  missing_names = required_query_attributes - predicate_attributes

  if missing_names.present?
    raise RequiredAttributeMissing,
          "Required attributes #{missing_names} missing from query: #{to_sql.truncate(200)}"
  end
end