Class: ModelBase::MetaModel

Inherits:
Object
  • Object
show all
Defined in:
lib/model_base/meta_model.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(name) ⇒ MetaModel

Returns a new instance of MetaModel.



7
8
9
# File 'lib/model_base/meta_model.rb', line 7

def initialize(name)
  @name = name
end

Instance Attribute Details

#nameObject (readonly) Also known as: class_name

Returns the value of attribute name.



6
7
8
# File 'lib/model_base/meta_model.rb', line 6

def name
  @name
end

Instance Method Details

#active_record?Boolean

Returns:

  • (Boolean)


41
42
43
# File 'lib/model_base/meta_model.rb', line 41

def active_record?
  defined?(ActiveRecord) == "constant" && ActiveRecord.class == Module && model_class < ActiveRecord::Base
end

#columnsObject



33
34
35
# File 'lib/model_base/meta_model.rb', line 33

def columns
  @columns ||= retrieve_columns.reject {|c| excluded?(c.name) }
end

#display_columnsObject



70
71
72
73
# File 'lib/model_base/meta_model.rb', line 70

def display_columns
  @dispaly_columns ||=
    title_column ? columns : [new_attribute(:id, :integer, true)] + columns
end

#excluded?(name) ⇒ Boolean

Returns:

  • (Boolean)


61
62
63
# File 'lib/model_base/meta_model.rb', line 61

def excluded?(name)
  ModelBase.config.excluded_columns.any?{|c| c === name}
end

#full_resource_nameObject



25
26
27
# File 'lib/model_base/meta_model.rb', line 25

def full_resource_name
  name.underscore.gsub('/', '_').sub(/\A_/, '')
end

#model_classObject



37
38
39
# File 'lib/model_base/meta_model.rb', line 37

def model_class
  @model_class ||= name.constantize
end

#plural_full_resource_nameObject



29
30
31
# File 'lib/model_base/meta_model.rb', line 29

def plural_full_resource_name
  full_resource_name.pluralize
end

#plural_nameObject



13
14
15
# File 'lib/model_base/meta_model.rb', line 13

def plural_name
  name.pluralize
end

#plural_resource_nameObject



21
22
23
# File 'lib/model_base/meta_model.rb', line 21

def plural_resource_name
  resource_name.pluralize
end

#resource_nameObject



17
18
19
# File 'lib/model_base/meta_model.rb', line 17

def resource_name
  name.demodulize.underscore
end

#retrieve_columnsObject



45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/model_base/meta_model.rb', line 45

def retrieve_columns
  raw_cols = active_record? ? model_class.columns : model_class.fields.map {|c| c[1] }
  belongs_to_refs = model_class.reflections.values.select{|ref| ref.is_a?(ActiveRecord::Reflection::BelongsToReflection) }
  cols = raw_cols.map do |col|
    ref = belongs_to_refs.detect{|ref| ref.foreign_key == col.name}
    ColumnAttribute.new(self, col.name, col.type, reference: ref)
  end
  @title_column = nil
  ModelBase.config.title_column_candidates.each do |tcc|
    @title_column = cols.detect{|col| tcc === col.name}
    break if @title_column
  end
  @title_column.linkable = true if @title_column
  cols
end

#title_columnObject



65
66
67
68
# File 'lib/model_base/meta_model.rb', line 65

def title_column
  retrieve_columns unless defined?(@title_column)
  @title_column
end