class Avromatic::ModelRegistry
The ModelRegistry
class is used to store and fetch nested models by their fullname. An optional namespace prefix can be removed from the full name that is used to store and fetch models.
Public Class Methods
new(remove_namespace_prefix: nil)
click to toggle source
# File lib/avromatic/model_registry.rb, line 11 def initialize(remove_namespace_prefix: nil) @prefix = remove_namespace_prefix @hash = Hash.new end
Public Instance Methods
[](fullname)
click to toggle source
# File lib/avromatic/model_registry.rb, line 20 def [](fullname) @hash.fetch(fullname) end
Also aliased as: fetch
clear()
click to toggle source
# File lib/avromatic/model_registry.rb, line 16 def clear @hash.clear end
ensure_registered_model(model)
click to toggle source
# File lib/avromatic/model_registry.rb, line 44 def ensure_registered_model(model) name = model_fullname(model) if registered?(name) existing_model = fetch(name) unless existing_model.equal?(model) raise "Attempted to replace existing Avromatic model #{model_debug_name(existing_model)} with new model " \ "#{model_debug_name(model)} as '#{name}'. Perhaps '#{model_debug_name(model)}' needs to be eager loaded " \ 'via the Avromatic eager_load_models setting?' end else register(model) end end
model_fullname(model)
click to toggle source
# File lib/avromatic/model_registry.rb, line 39 def model_fullname(model) name = model.avro_schema.fullname remove_prefix(name) end
register(model)
click to toggle source
# File lib/avromatic/model_registry.rb, line 25 def register(model) raise 'models with a key schema are not supported' if model.key_avro_schema name = model_fullname(model) raise "'#{name}' has already been registered" if registered?(name) @hash[name] = model end
registered?(fullname_or_model)
click to toggle source
# File lib/avromatic/model_registry.rb, line 34 def registered?(fullname_or_model) fullname = fullname_or_model.is_a?(String) ? fullname_or_model : model_fullname(fullname_or_model) @hash.key?(fullname) end
remove_prefix(name)
click to toggle source
# File lib/avromatic/model_registry.rb, line 58 def remove_prefix(name) return name if @prefix.nil? value = case @prefix when String name.start_with?(@prefix) ? name.from(@prefix.length) : name when Regexp name.sub(@prefix, '') else raise "unsupported `remove_namespace_prefix` value: #{@prefix}" end value.start_with?('.') ? value.from(1) : value end
Private Instance Methods
model_debug_name(model)
click to toggle source
# File lib/avromatic/model_registry.rb, line 76 def model_debug_name(model) model.name || model.to_s end