Class: Noiseless::ModelRegistry
- Inherits:
-
Object
- Object
- Noiseless::ModelRegistry
- Includes:
- Singleton
- Defined in:
- lib/noiseless/model_registry.rb
Instance Method Summary collapse
- #all_indexes ⇒ Object
- #all_models ⇒ Object
- #clear! ⇒ Object
- #find_model(name_or_class) ⇒ Object
-
#initialize ⇒ ModelRegistry
constructor
A new instance of ModelRegistry.
- #models_for_index(index_name) ⇒ Object
- #register(model_class, options = {}) ⇒ Object
- #searchable_models ⇒ Object
- #unregister(model_class) ⇒ Object
Constructor Details
#initialize ⇒ ModelRegistry
Returns a new instance of ModelRegistry.
7 8 9 10 |
# File 'lib/noiseless/model_registry.rb', line 7 def initialize @models = {} @models_by_index = {} end |
Instance Method Details
#all_indexes ⇒ Object
56 57 58 |
# File 'lib/noiseless/model_registry.rb', line 56 def all_indexes @models_by_index.keys.map(&:to_s) end |
#all_models ⇒ Object
38 39 40 |
# File 'lib/noiseless/model_registry.rb', line 38 def all_models @models.values.map { |entry| entry[:class] } end |
#clear! ⇒ Object
66 67 68 69 |
# File 'lib/noiseless/model_registry.rb', line 66 def clear! @models.clear @models_by_index.clear end |
#find_model(name_or_class) ⇒ Object
42 43 44 45 46 47 48 49 50 |
# File 'lib/noiseless/model_registry.rb', line 42 def find_model(name_or_class) case name_or_class when String, Symbol entry = @models[name_or_class.to_sym] entry ? entry[:class] : nil when Class @models.find { |_, entry| entry[:class] == name_or_class }&.last&.fetch(:class) end end |
#models_for_index(index_name) ⇒ Object
52 53 54 |
# File 'lib/noiseless/model_registry.rb', line 52 def models_for_index(index_name) @models_by_index[index_name.to_sym] || [] end |
#register(model_class, options = {}) ⇒ Object
12 13 14 15 16 17 18 19 20 21 22 23 24 25 |
# File 'lib/noiseless/model_registry.rb', line 12 def register(model_class, = {}) model_name = model_class.name.to_sym @models[model_name] = { class: model_class, options: } # Index models by their search index names index_names = Array(model_class.search_index || default_index_name(model_class)) index_names.each do |index_name| @models_by_index[index_name.to_sym] ||= [] @models_by_index[index_name.to_sym] << model_class end end |
#searchable_models ⇒ Object
60 61 62 63 64 |
# File 'lib/noiseless/model_registry.rb', line 60 def searchable_models @models.reject { |_, entry| entry[:options][:searchable] == false } .values .map { |entry| entry[:class] } end |
#unregister(model_class) ⇒ Object
27 28 29 30 31 32 33 34 35 36 |
# File 'lib/noiseless/model_registry.rb', line 27 def unregister(model_class) model_name = model_class.name.to_sym @models.delete(model_name) # Remove from index mapping @models_by_index.each do |index_name, models| models.delete(model_class) @models_by_index.delete(index_name) if models.empty? end end |