Class: ModelBase::MetaModel
- Inherits:
-
Object
- Object
- ModelBase::MetaModel
- Defined in:
- lib/model_base/meta_model.rb
Instance Attribute Summary collapse
-
#name ⇒ Object
(also: #class_name)
readonly
Returns the value of attribute name.
Instance Method Summary collapse
- #active_record? ⇒ Boolean
- #columns ⇒ Object
- #display_columns ⇒ Object
- #excluded?(name) ⇒ Boolean
- #full_resource_name ⇒ Object
-
#initialize(name) ⇒ MetaModel
constructor
A new instance of MetaModel.
- #model_class ⇒ Object
- #plural_full_resource_name ⇒ Object
- #plural_name ⇒ Object
- #plural_resource_name ⇒ Object
- #resource_name ⇒ Object
- #retrieve_columns ⇒ Object
- #title_column ⇒ Object
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
#name ⇒ Object (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
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 |
#columns ⇒ Object
33 34 35 |
# File 'lib/model_base/meta_model.rb', line 33 def columns @columns ||= retrieve_columns.reject {|c| excluded?(c.name) } end |
#display_columns ⇒ Object
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
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_name ⇒ Object
25 26 27 |
# File 'lib/model_base/meta_model.rb', line 25 def full_resource_name name.underscore.gsub('/', '_').sub(/\A_/, '') end |
#model_class ⇒ Object
37 38 39 |
# File 'lib/model_base/meta_model.rb', line 37 def model_class @model_class ||= name.constantize end |
#plural_full_resource_name ⇒ Object
29 30 31 |
# File 'lib/model_base/meta_model.rb', line 29 def plural_full_resource_name full_resource_name.pluralize end |
#plural_name ⇒ Object
13 14 15 |
# File 'lib/model_base/meta_model.rb', line 13 def plural_name name.pluralize end |
#plural_resource_name ⇒ Object
21 22 23 |
# File 'lib/model_base/meta_model.rb', line 21 def plural_resource_name resource_name.pluralize end |
#resource_name ⇒ Object
17 18 19 |
# File 'lib/model_base/meta_model.rb', line 17 def resource_name name.demodulize.underscore end |
#retrieve_columns ⇒ Object
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_column ⇒ Object
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 |