module Ransack::Nodes::Bindable

def attr

def attr
  @attr ||= get_arel_attribute
end

def bound?

def bound?
  attr_name.present? && parent.present?
end

def get_arel_attribute

def get_arel_attribute
  if ransacker
    ransacker.attr_from(self)
  else
    get_attribute
  end
end

def get_attribute

def get_attribute
  if is_alias_attribute?
    context.table_for(parent)[parent.base_klass.attribute_aliases[attr_name]]
  else
    context.table_for(parent)[attr_name]
  end
end

def is_alias_attribute?

def is_alias_attribute?
  Ransack::SUPPORTS_ATTRIBUTE_ALIAS &&
  parent.base_klass.attribute_aliases.key?(attr_name)
end

def klass

def klass
  @klass ||= context.klassify(parent)
end

def ransacker

def ransacker
  klass._ransackers[attr_name]
end

def reset_binding!

def reset_binding!
  @parent = @attr_name = @attr = @klass = nil
end