Class: Noiseless::ModelRegistry

Inherits:
Object
  • Object
show all
Includes:
Singleton
Defined in:
lib/noiseless/model_registry.rb

Instance Method Summary collapse

Constructor Details

#initializeModelRegistry

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_indexesObject



56
57
58
# File 'lib/noiseless/model_registry.rb', line 56

def all_indexes
  @models_by_index.keys.map(&:to_s)
end

#all_modelsObject



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, options = {})
  model_name = model_class.name.to_sym
  @models[model_name] = {
    class: model_class,
    options: 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_modelsObject



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