Class: RailsLens::ModelDetector
- Inherits:
-
Object
- Object
- RailsLens::ModelDetector
- Defined in:
- lib/rails_lens/model_detector.rb
Class Method Summary collapse
- .abstract_models ⇒ Object
- .concrete_models ⇒ Object
- .detect_models(options = {}) ⇒ Object
- .model_for_table(table_name) ⇒ Object
- .sti_base_models ⇒ Object
- .sti_child_models ⇒ Object
- .table_backed_models ⇒ Object
- .view_backed_models ⇒ Object
- .view_exists?(model_class) ⇒ Boolean
Class Method Details
.abstract_models ⇒ Object
22 23 24 |
# File 'lib/rails_lens/model_detector.rb', line 22 def abstract_models detect_models.select(&:abstract_class?) end |
.concrete_models ⇒ Object
26 27 28 |
# File 'lib/rails_lens/model_detector.rb', line 26 def concrete_models detect_models.reject(&:abstract_class?) end |
.detect_models(options = {}) ⇒ Object
6 7 8 9 10 11 12 13 14 15 16 |
# File 'lib/rails_lens/model_detector.rb', line 6 def detect_models( = {}) # Always eager load all models eager_load_models # Find all ActiveRecord models (always use ActiveRecord::Base as it's always defined) models = find_descendants_of(ActiveRecord::Base) # Filter and sort models models = filter_models(models, ) models.sort_by { |model| model.name || '' } end |
.model_for_table(table_name) ⇒ Object
18 19 20 |
# File 'lib/rails_lens/model_detector.rb', line 18 def model_for_table(table_name) detect_models.find { |model| model.table_name == table_name } end |
.sti_base_models ⇒ Object
30 31 32 |
# File 'lib/rails_lens/model_detector.rb', line 30 def sti_base_models concrete_models.select { |model| has_sti_column?(model) } end |
.sti_child_models ⇒ Object
34 35 36 |
# File 'lib/rails_lens/model_detector.rb', line 34 def sti_child_models concrete_models.select { |model| model.superclass != ActiveRecord::Base && concrete_models.include?(model.superclass) } end |
.table_backed_models ⇒ Object
42 43 44 |
# File 'lib/rails_lens/model_detector.rb', line 42 def table_backed_models detect_models.reject { |model| view_exists?(model) } end |
.view_backed_models ⇒ Object
38 39 40 |
# File 'lib/rails_lens/model_detector.rb', line 38 def view_backed_models detect_models.select { |model| view_exists?(model) } end |
.view_exists?(model_class) ⇒ Boolean
46 47 48 49 50 51 52 53 54 55 56 57 |
# File 'lib/rails_lens/model_detector.rb', line 46 def view_exists?(model_class) return false if model_class.abstract_class? return false unless model_class.table_name # Cache view existence checks for performance @view_cache ||= {} cache_key = "#{model_class.connection.object_id}_#{model_class.table_name}" return @view_cache[cache_key] if @view_cache.key?(cache_key) @view_cache[cache_key] = check_view_existence(model_class) end |