Class: Avromatic::ModelRegistry
- Inherits:
-
Object
- Object
- Avromatic::ModelRegistry
- Defined in:
- lib/avromatic/model_registry.rb
Overview
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.
Instance Method Summary collapse
- #[](fullname) ⇒ Object (also: #fetch)
- #clear ⇒ Object
- #ensure_registered_model(model) ⇒ Object
-
#initialize(remove_namespace_prefix: nil) ⇒ ModelRegistry
constructor
A new instance of ModelRegistry.
- #model_fullname(model) ⇒ Object
- #register(model) ⇒ Object
- #registered?(fullname) ⇒ Boolean
- #remove_prefix(name) ⇒ Object
Constructor Details
#initialize(remove_namespace_prefix: nil) ⇒ ModelRegistry
Returns a new instance of ModelRegistry.
9 10 11 12 |
# File 'lib/avromatic/model_registry.rb', line 9 def initialize(remove_namespace_prefix: nil) @prefix = remove_namespace_prefix @hash = Hash.new end |
Instance Method Details
#[](fullname) ⇒ Object Also known as: fetch
18 19 20 |
# File 'lib/avromatic/model_registry.rb', line 18 def [](fullname) @hash.fetch(fullname) end |
#clear ⇒ Object
14 15 16 |
# File 'lib/avromatic/model_registry.rb', line 14 def clear @hash.clear end |
#ensure_registered_model(model) ⇒ Object
39 40 41 42 43 44 45 46 47 48 |
# File 'lib/avromatic/model_registry.rb', line 39 def ensure_registered_model(model) name = model_fullname(model) if registered?(name) unless fetch(name).equal?(model) raise "attempted to replace existing model #{fetch(name)} with new model #{model} as '#{name}'" end else register(model) end end |
#model_fullname(model) ⇒ Object
34 35 36 37 |
# File 'lib/avromatic/model_registry.rb', line 34 def model_fullname(model) name = model.avro_schema.fullname remove_prefix(name) end |
#register(model) ⇒ Object
23 24 25 26 27 28 |
# File 'lib/avromatic/model_registry.rb', line 23 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) ⇒ Boolean
30 31 32 |
# File 'lib/avromatic/model_registry.rb', line 30 def registered?(fullname) @hash.key?(fullname) end |
#remove_prefix(name) ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/avromatic/model_registry.rb', line 50 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 |