module ViewModel::ActiveRecord::ControllerBase

Protected Instance Methods

access_control() click to toggle source
# File lib/view_model/active_record/controller_base.rb, line 42
def access_control
  unless instance_variable_defined?(:@access_control)
    raise ArgumentError.new("AccessControl instance not set for Controller '#{self.name}'")
  end

  @access_control
end
access_control=(access_control) click to toggle source
# File lib/view_model/active_record/controller_base.rb, line 72
def access_control=(access_control)
  if instance_variable_defined?(:@access_control)
    raise ArgumentError.new("AccessControl class for Controller '#{self.name}' already set")
  end

  unless access_control.is_a?(Class) && access_control < ViewModel::AccessControl
    raise ArgumentError.new("'#{access_control.inspect}' is not a valid AccessControl")
  end

  @access_control = access_control
end
model_class() click to toggle source
# File lib/view_model/active_record/controller_base.rb, line 50
def model_class
  viewmodel_class.model_class
end
new_deserialize_context(viewmodel_class: self.viewmodel_class, access_control: self.access_control.new, **args) click to toggle source
# File lib/view_model/active_record/controller_base.rb, line 21
def new_deserialize_context(viewmodel_class: self.viewmodel_class, access_control: self.access_control.new, **args)
  viewmodel_class.new_deserialize_context(access_control: access_control, **args)
end
new_serialize_context(viewmodel_class: self.viewmodel_class, access_control: self.access_control.new, **args) click to toggle source
# File lib/view_model/active_record/controller_base.rb, line 25
def new_serialize_context(viewmodel_class: self.viewmodel_class, access_control: self.access_control.new, **args)
  viewmodel_class.new_serialize_context(access_control: access_control, **args)
end
prerender_viewmodel(viewmodel, serialize_context: new_serialize_context, **args) click to toggle source
# File lib/view_model/active_record/controller_base.rb, line 17
def prerender_viewmodel(viewmodel, serialize_context: new_serialize_context, **args)
  super(viewmodel, serialize_context: serialize_context, **args)
end
render_viewmodel(viewmodel, serialize_context: new_serialize_context, **args) click to toggle source

Override (pre)render_viewmodel to use the default serialization context from this controller.

Calls superclass method ViewModel::Controller#render_viewmodel
# File lib/view_model/active_record/controller_base.rb, line 13
def render_viewmodel(viewmodel, serialize_context: new_serialize_context, **args)
  super(viewmodel, serialize_context: serialize_context, **args)
end
viewmodel_class() click to toggle source
# File lib/view_model/active_record/controller_base.rb, line 30
def viewmodel_class
  unless instance_variable_defined?(:@viewmodel_class)
    # try to autodetect the viewmodel based on our name
    if (match = /(.*)Controller$/.match(self.name))
      self.viewmodel_name = match[1].singularize
    else
      raise ArgumentError.new("Could not auto-determine ViewModel from Controller name '#{self.name}'")
    end
  end
  @viewmodel_class
end
viewmodel_class=(type) click to toggle source
# File lib/view_model/active_record/controller_base.rb, line 60
def viewmodel_class=(type)
  if instance_variable_defined?(:@viewmodel_class)
    raise ArgumentError.new("ViewModel class for Controller '#{self.name}' already set")
  end

  unless type < ViewModel
    raise ArgumentError.new("'#{type.inspect}' is not a valid ViewModel")
  end

  @viewmodel_class = type
end
viewmodel_name=(name) click to toggle source
# File lib/view_model/active_record/controller_base.rb, line 56
def viewmodel_name=(name)
  self.viewmodel_class = ViewModel::Registry.for_view_name(name)
end