Module: ViewModel::ActiveRecord::Controller

Extended by:
ActiveSupport::Concern
Includes:
CollectionNestedController, ControllerBase, SingularNestedController
Defined in:
lib/view_model/active_record/controller.rb

Overview

Controller for accessing an ViewModel::ActiveRecord Provides for the following routes: POST /models #create – create or update one or more models GET /models #index GET /models/:id #show DELETE /models/:id #destroy

Instance Method Summary collapse

Methods included from SingularNestedController

#create_associated, #destroy_associated, #show_associated

Methods included from CollectionNestedController

#append, #disassociate, #disassociate_all, #index_associated, #replace

Methods included from Controller

#prerender_json_view, #prerender_viewmodel, #render_error, #render_json_view, #render_viewmodel

Instance Method Details

#create(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context) ⇒ Object



42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/view_model/active_record/controller.rb', line 42

def create(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context)
  update_hash, refs = parse_viewmodel_updates

  view = nil
  pre_rendered = viewmodel_class.transaction do
    view = viewmodel_class.deserialize_from_view(update_hash, references: refs, deserialize_context: deserialize_context)
    ViewModel.preload_for_serialization(view, serialize_context: serialize_context)
    view = yield(view) if block_given?
    prerender_viewmodel(view, serialize_context: serialize_context)
  end
  render_json_string(pre_rendered)
  view
end

#destroy(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context) ⇒ Object



56
57
58
59
60
61
62
# File 'lib/view_model/active_record/controller.rb', line 56

def destroy(serialize_context: new_serialize_context, deserialize_context: new_deserialize_context)
  viewmodel_class.transaction do
    view = viewmodel_class.find(viewmodel_id, eager_include: false, serialize_context: serialize_context)
    view.destroy!(deserialize_context: deserialize_context)
  end
  render_viewmodel(nil)
end

#index(scope: nil, viewmodel_class: self.viewmodel_class, serialize_context: new_serialize_context(viewmodel_class: viewmodel_class)) ⇒ Object



31
32
33
34
35
36
37
38
39
40
# File 'lib/view_model/active_record/controller.rb', line 31

def index(scope: nil, viewmodel_class: self.viewmodel_class, serialize_context: new_serialize_context(viewmodel_class: viewmodel_class))
  views = nil
  pre_rendered = viewmodel_class.transaction do
    views = viewmodel_class.load(scope: scope, serialize_context: serialize_context)
    views = yield(views) if block_given?
    prerender_viewmodel(views, serialize_context: serialize_context)
  end
  render_json_string(pre_rendered)
  views
end

#show(scope: nil, viewmodel_class: self.viewmodel_class, serialize_context: new_serialize_context(viewmodel_class: viewmodel_class)) ⇒ Object



20
21
22
23
24
25
26
27
28
29
# File 'lib/view_model/active_record/controller.rb', line 20

def show(scope: nil, viewmodel_class: self.viewmodel_class, serialize_context: new_serialize_context(viewmodel_class: viewmodel_class))
  view = nil
  pre_rendered = viewmodel_class.transaction do
    view = viewmodel_class.find(viewmodel_id, scope: scope, serialize_context: serialize_context)
    view = yield(view) if block_given?
    prerender_viewmodel(view, serialize_context: serialize_context)
  end
  render_json_string(pre_rendered)
  view
end