module Traits::Utilities

Public Instance Methods

active_record_collection?(obj) click to toggle source
# File lib/traits/utilities.rb, line 42
def active_record_collection?(obj)
  obj.kind_of?(ActiveRecord::Relation)
end
active_record_descendant?(obj) click to toggle source
# File lib/traits/utilities.rb, line 38
def active_record_descendant?(obj)
  obj.kind_of?(Class) && obj < ActiveRecord::Base
end
active_record_instance?(obj) click to toggle source
# File lib/traits/utilities.rb, line 46
def active_record_instance?(obj)
  obj.kind_of?(ActiveRecord::Base)
end
retrieve_active_record(obj) click to toggle source
# File lib/traits/utilities.rb, line 6
def retrieve_active_record(obj)
  if active_record_descendant?(obj)
    obj

  elsif active_record_instance?(obj)
    obj.class

  elsif active_record_collection?(obj)
    obj.model

  else
    case obj
      when String, Symbol
        str = (obj.kind_of?(Symbol) ? obj.to_s : obj).underscore.singularize
        kls = str.camelize.safe_constantize || str.tr('_', '/').camelize.safe_constantize
        kls if active_record_descendant?(kls)

      when Traits::Model, Traits::Attribute
        obj.active_record

      when Traits::Association
        obj.from_active_record
    end
  end
end
retrieve_active_record!(obj) click to toggle source
# File lib/traits/utilities.rb, line 32
def retrieve_active_record!(obj)
  retrieve_active_record(obj) || begin
    raise ActiveRecordRetrieveError, "#{obj.inspect} is not a valid ActiveRecord reference"
  end
end