Module: SimpleCrud::ActionLambdas

Included in:
SimpleCrudController
Defined in:
lib/simple_crud/action_lambdas.rb

Overview

Builds the lambda installed as each action declared with simple_crud_for.

Instance Method Summary collapse

Instance Method Details

#crud_lambda_for_create(klass, parameters = {}, &block) ⇒ Object



45
46
47
48
49
50
51
52
53
54
55
56
# File 'lib/simple_crud/action_lambdas.rb', line 45

def crud_lambda_for_create(klass, parameters = {}, &block)
  lambda do
    authenticate_user! if parameters[:authenticate]
    permitted_params = send("#{self.class.simple_crud_controller_model.to_s.underscore}_params")
    record = SimpleCrudController.build_record(self, klass, parameters)
    record.assign_attributes(permitted_params)
    SimpleCrudController.maybe_authorize(self, record, parameters)
    persist = ->(bang:) { bang ? record.save! : record.save }
    options = { status: :created, failure_template: :new }
    SimpleCrudController.save_and_render(self, record, parameters, options, persist, &block)
  end
end

#crud_lambda_for_destroy(klass, parameters = {}, &block) ⇒ Object



70
71
72
73
74
75
76
77
78
79
# File 'lib/simple_crud/action_lambdas.rb', line 70

def crud_lambda_for_destroy(klass, parameters = {}, &block)
  lambda do
    authenticate_user! if parameters[:authenticate]
    requested = SimpleCrudController.find_record(klass, self, parameters)
    SimpleCrudController.maybe_authorize(self, requested, parameters)
    options = { status: :ok, failure_template: :show, redirect: parameters[:redirect] || klass }
    persist = ->(bang:) { bang ? requested.destroy! : requested.destroy }
    SimpleCrudController.persist_and_render(self, requested, parameters, options, persist, &block)
  end
end

#crud_lambda_for_edit(klass, parameters = {}, &block) ⇒ Object

The find-instead-of-build twin of :new.



27
28
29
30
31
32
33
34
# File 'lib/simple_crud/action_lambdas.rb', line 27

def crud_lambda_for_edit(klass, parameters = {}, &block)
  lambda do
    authenticate_user! if parameters[:authenticate]
    requested = SimpleCrudController.find_record(klass, self, parameters)
    SimpleCrudController.maybe_authorize(self, requested, parameters)
    SimpleCrudController.render_edit(self, requested, parameters, &block)
  end
end

#crud_lambda_for_index(klass, parameters = {}, &block) ⇒ Object



36
37
38
39
40
41
42
43
# File 'lib/simple_crud/action_lambdas.rb', line 36

def crud_lambda_for_index(klass, parameters = {}, &block)
  lambda do
    authenticate_user! if parameters[:authenticate]
    SimpleCrudController.maybe_authorize(self, klass, parameters)
    options = {}.merge(each_serializer: parameters[:serializer]).compact
    SimpleCrudController.render_index(self, klass, options, parameters, &block)
  end
end

#crud_lambda_for_new(klass, parameters = {}, &block) ⇒ Object



17
18
19
20
21
22
23
24
# File 'lib/simple_crud/action_lambdas.rb', line 17

def crud_lambda_for_new(klass, parameters = {}, &block)
  lambda do
    authenticate_user! if parameters[:authenticate]
    record = SimpleCrudController.build_record(self, klass, parameters)
    SimpleCrudController.maybe_authorize(self, record, parameters)
    SimpleCrudController.render_new(self, record, parameters, &block)
  end
end

#crud_lambda_for_show(klass, parameters = {}, &block) ⇒ Object



6
7
8
9
10
11
12
13
14
15
# File 'lib/simple_crud/action_lambdas.rb', line 6

def crud_lambda_for_show(klass, parameters = {}, &block)
  lambda do
    authenticate_user! if parameters[:authenticate]
    requested = SimpleCrudController.find_record(klass, self, parameters)

    options = {}.merge(serializer: parameters[:serializer]).compact
    SimpleCrudController.maybe_authorize(self, requested, parameters)
    SimpleCrudController.render_show(self, requested, options, parameters, &block)
  end
end

#crud_lambda_for_update(klass, parameters = {}, &block) ⇒ Object



58
59
60
61
62
63
64
65
66
67
68
# File 'lib/simple_crud/action_lambdas.rb', line 58

def crud_lambda_for_update(klass, parameters = {}, &block)
  lambda do
    authenticate_user! if parameters[:authenticate]
    requested = SimpleCrudController.find_record(klass, self, parameters)
    SimpleCrudController.maybe_authorize(self, requested, parameters)
    permitted_params = send("#{self.class.simple_crud_controller_model.to_s.underscore}_params")
    persist = ->(bang:) { bang ? requested.update!(permitted_params) : requested.update(permitted_params) }
    options = { status: :ok, failure_template: :edit }
    SimpleCrudController.save_and_render(self, requested, parameters, options, persist, &block)
  end
end