Class: RailsAdmin::AbstractModel

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_admin/abstract_model.rb

Defined Under Namespace

Classes: StatementBuilder

Constant Summary collapse

@@polymorphic_parents =
{}

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_or_model_name) ⇒ AbstractModel

Returns a new instance of AbstractModel.



48
49
50
51
52
53
54
55
56
# File 'lib/rails_admin/abstract_model.rb', line 48

def initialize(model_or_model_name)
  @model_name = model_or_model_name.to_s
  ancestors = model.ancestors.collect(&:to_s)
  if ancestors.include?('ActiveRecord::Base') && !model.abstract_class? && model.table_exists?
    initialize_active_record
  elsif ancestors.include?('Mongoid::Document')
    initialize_mongoid
  end
end

Instance Attribute Details

#adapterObject (readonly)

Returns the value of attribute adapter.



8
9
10
# File 'lib/rails_admin/abstract_model.rb', line 8

def adapter
  @adapter
end

#model_nameObject (readonly)

Returns the value of attribute model_name.



8
9
10
# File 'lib/rails_admin/abstract_model.rb', line 8

def model_name
  @model_name
end

Class Method Details

.all(adapter = nil) ⇒ Object



15
16
17
18
# File 'lib/rails_admin/abstract_model.rb', line 15

def all(adapter = nil)
  @@all ||= Config.models_pool.collect { |m| new(m) }.compact
  adapter ? @@all.select { |m| m.adapter == adapter } : @@all
end

.new(m) ⇒ Object



21
22
23
24
25
26
27
# File 'lib/rails_admin/abstract_model.rb', line 21

def new(m)
  m = m.constantize unless m.is_a?(Class)
  (am = old_new(m)).model && am.adapter ? am : nil
rescue *([LoadError, NameError] + (defined?(ActiveRecord) ? ['ActiveRecord::NoDatabaseError'.constantize, 'ActiveRecord::ConnectionNotEstablished'.constantize] : []))
  puts "[RailsAdmin] Could not load model #{m}, assuming model is non existing. (#{$ERROR_INFO})" unless Rails.env.test?
  nil
end

.old_newObject



20
# File 'lib/rails_admin/abstract_model.rb', line 20

alias_method :old_new, :new

.polymorphic_parents(adapter, model_name, name) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/rails_admin/abstract_model.rb', line 31

def polymorphic_parents(adapter, model_name, name)
  @@polymorphic_parents[adapter.to_sym] ||= {}.tap do |hash|
    all(adapter).each do |am|
      am.associations.select(&:as).each do |association|
        (hash[[association.klass.to_s.underscore, association.as].join('_').to_sym] ||= []) << am.model
      end
    end
  end
  @@polymorphic_parents[adapter.to_sym][[model_name.to_s.underscore, name].join('_').to_sym]
end

.resetObject



11
12
13
# File 'lib/rails_admin/abstract_model.rb', line 11

def reset
  @@all = nil
end

.reset_polymorphic_parentsObject

For testing



43
44
45
# File 'lib/rails_admin/abstract_model.rb', line 43

def reset_polymorphic_parents
  @@polymorphic_parents = {}
end

Instance Method Details

#configObject



67
68
69
# File 'lib/rails_admin/abstract_model.rb', line 67

def config
  Config.model self
end

#each_associated_children(object) ⇒ Object



87
88
89
90
91
92
93
94
95
96
97
98
# File 'lib/rails_admin/abstract_model.rb', line 87

def each_associated_children(object)
  associations.each do |association|
    case association.type
    when :has_one
      child = object.send(association.name)
      yield(association, [child]) if child
    when :has_many
      children = object.send(association.name)
      yield(association, Array.new(children))
    end
  end
end

#modelObject

do not store a reference to the model, does not play well with ActiveReload/Rails3.2



59
60
61
# File 'lib/rails_admin/abstract_model.rb', line 59

def model
  @model_name.constantize
end

#param_keyObject



75
76
77
# File 'lib/rails_admin/abstract_model.rb', line 75

def param_key
  @model_name.split('::').collect(&:underscore).join('_')
end

#pretty_nameObject



79
80
81
# File 'lib/rails_admin/abstract_model.rb', line 79

def pretty_name
  model.model_name.human
end

#to_paramObject



71
72
73
# File 'lib/rails_admin/abstract_model.rb', line 71

def to_param
  @model_name.split('::').collect(&:underscore).join('~')
end

#to_sObject



63
64
65
# File 'lib/rails_admin/abstract_model.rb', line 63

def to_s
  model.to_s
end

#where(conditions) ⇒ Object



83
84
85
# File 'lib/rails_admin/abstract_model.rb', line 83

def where(conditions)
  model.where(conditions)
end