Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save danielbeardsley/404298 to your computer and use it in GitHub Desktop.
Save danielbeardsley/404298 to your computer and use it in GitHub Desktop.
Easily retrieve a list of all Models in your Ruby on Rails application
module ModelDiscovery
def self.models_hash
@active_record_classes ||= valid_active_record_classes.index_by do |model|
model.table_name
end
end
def self.model_file_names
@model_file_names ||= Dir['app/models/*.rb'].map {|f|
File.basename(f, '.*')
}
end
def self.model_classes
@model_classes ||= model_file_names.map {|f|
f.camelize.constantize rescue nil
}.compact
end
def self.valid_active_record_classes
@valid_active_record_classes ||= (model_classes.delete_if do |model|
!model.respond_to?(:table_exists?) || !model.table_exists?
end - models_to_exclude)
end
def self.models_to_exclude
[]
end
end
def self.all_models
ModelDiscovery.models_hash
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment