Class: RailsLens::ModelDetector

Inherits:
Object
  • Object
show all
Defined in:
lib/rails_lens/model_detector.rb

Class Method Summary collapse

Class Method Details

.abstract_modelsObject



22
23
24
# File 'lib/rails_lens/model_detector.rb', line 22

def abstract_models
  detect_models.select(&:abstract_class?)
end

.concrete_modelsObject



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(options = {})
  # 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, options)
  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_modelsObject



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_modelsObject



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_modelsObject



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_modelsObject



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

Returns:

  • (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