class ViewModel::Registry
Constants
- DEFERRED_NAME
Public Class Methods
new()
click to toggle source
# File lib/view_model/registry.rb, line 14 def initialize @lock = Monitor.new @viewmodel_classes_by_name = {} @deferred_viewmodel_classes = [] end
Public Instance Methods
all()
click to toggle source
# File lib/view_model/registry.rb, line 37 def all @lock.synchronize do resolve_deferred_classes @viewmodel_classes_by_name.values end end
clear_removed_classes!()
click to toggle source
For Rails hot code loading: ditch any classes that are not longer present at their constant
# File lib/view_model/registry.rb, line 64 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)
click to toggle source
# File lib/view_model/registry.rb, line 54 def default_view_name(model_class_name) model_class_name.gsub('::', '.') end
for_view_name(name)
click to toggle source
# File lib/view_model/registry.rb, line 20 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)
click to toggle source
# File lib/view_model/registry.rb, line 58 def infer_model_class_name(view_name) view_name.gsub('.', '::') end
register(viewmodel, as: DEFERRED_NAME)
click to toggle source
# File lib/view_model/registry.rb, line 48 def register(viewmodel, as: DEFERRED_NAME) @lock.synchronize do @deferred_viewmodel_classes << [viewmodel, as] end end
roots()
click to toggle source
# File lib/view_model/registry.rb, line 44 def roots all.select { |c| c.root? } end
Private Instance Methods
resolve_deferred_classes()
click to toggle source
# File lib/view_model/registry.rb, line 75 def resolve_deferred_classes until @deferred_viewmodel_classes.empty? vm, view_name = @deferred_viewmodel_classes.pop if vm.should_register? view_name = vm.view_name if view_name == DEFERRED_NAME @viewmodel_classes_by_name[view_name] = vm end end end