Class: ViewModel::Registry
- Inherits:
-
Object
- Object
- ViewModel::Registry
- Includes:
- Singleton
- Defined in:
- lib/view_model/registry.rb
Constant Summary collapse
- DEFERRED_NAME =
Object.new
Instance Method Summary collapse
-
#clear_removed_classes! ⇒ Object
For Rails hot code loading: ditch any classes that are not longer present at their constant.
- #default_view_name(model_class_name) ⇒ Object
- #for_view_name(name) ⇒ Object
- #infer_model_class_name(view_name) ⇒ Object
-
#initialize ⇒ Registry
constructor
A new instance of Registry.
- #register(viewmodel, as: DEFERRED_NAME) ⇒ Object
Constructor Details
#initialize ⇒ Registry
Returns a new instance of Registry.
13 14 15 16 17 |
# File 'lib/view_model/registry.rb', line 13 def initialize @lock = Monitor.new @viewmodel_classes_by_name = {} @deferred_viewmodel_classes = [] end |
Instance Method Details
#clear_removed_classes! ⇒ Object
For Rails hot code loading: ditch any classes that are not longer present at their constant
52 53 54 55 56 57 58 59 |
# File 'lib/view_model/registry.rb', line 52 def clear_removed_classes! @lock.synchronize do resolve_deferred_classes @viewmodel_classes_by_name.delete_if do |_name, klass| !Kernel.const_defined?(klass.name) end end end |
#default_view_name(model_class_name) ⇒ Object
42 43 44 |
# File 'lib/view_model/registry.rb', line 42 def default_view_name(model_class_name) model_class_name.gsub('::', '.') end |
#for_view_name(name) ⇒ Object
19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 |
# File 'lib/view_model/registry.rb', line 19 def for_view_name(name) raise ViewModel::DeserializationError::InvalidSyntax.new('ViewModel name cannot be nil') if name.nil? @lock.synchronize do # Resolve names for any deferred viewmodel classes resolve_deferred_classes viewmodel_class = @viewmodel_classes_by_name[name] if viewmodel_class.nil? || !(viewmodel_class < ViewModel) raise ViewModel::DeserializationError::UnknownView.new(name) end viewmodel_class end end |
#infer_model_class_name(view_name) ⇒ Object
46 47 48 |
# File 'lib/view_model/registry.rb', line 46 def infer_model_class_name(view_name) view_name.gsub('.', '::') end |
#register(viewmodel, as: DEFERRED_NAME) ⇒ Object
36 37 38 39 40 |
# File 'lib/view_model/registry.rb', line 36 def register(viewmodel, as: DEFERRED_NAME) @lock.synchronize do @deferred_viewmodel_classes << [viewmodel, as] end end |