Module: Traits::Utilities

Included in:
Traits
Defined in:
lib/traits/utilities.rb

Instance Method Summary collapse

Instance Method Details

#active_record_collection?(obj) ⇒ Boolean

Returns:

  • (Boolean)


42
43
44
# File 'lib/traits/utilities.rb', line 42

def active_record_collection?(obj)
  obj.kind_of?(ActiveRecord::Relation)
end

#active_record_descendant?(obj) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/traits/utilities.rb', line 38

def active_record_descendant?(obj)
  obj.kind_of?(Class) && obj < ActiveRecord::Base
end

#active_record_instance?(obj) ⇒ Boolean

Returns:

  • (Boolean)


46
47
48
# File 'lib/traits/utilities.rb', line 46

def active_record_instance?(obj)
  obj.kind_of?(ActiveRecord::Base)
end

#retrieve_active_record(obj) ⇒ Object



6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
# 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) ⇒ Object



32
33
34
35
36
# 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