4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
|
# File 'lib/dynamic_controller/instance_methods.rb', line 4
def self.included(base)
base.rescue_from StandardError, with: :handle_error
if base.include_action?(:index)
base.send :define_method, :index do
if parent_model
model = parent_model.send(controller_name)
else
model = resource_class
end
empty_collection = model.where('1=2').page(params[:page])
if search_query_valid?
begin
self.collection = model.search(search_query).result(distinct: true).page(params[:page])
self.collection.all rescue ActiveRecord::StatementInvalid => ex
Rails.logger.debug "Invalid search query: #{params[:q]} | Error: #{ex.message}"
self.collection = empty_collection
end
else
self.collection = empty_collection
end
Responder.new(self).index
end
end
if base.include_action?(:show)
base.send :define_method, :show do
if parent_model
self.model = parent_model.send(controller_name).find(params[:id])
else
self.model = resource_class.find(params[:id])
end
Responder.new(self).show
end
end
if base.include_action?(:new)
base.send :define_method, :new do
if parent_model
self.model = parent_model.send(controller_name).build
else
self.model = resource_class.new
end
Responder.new(self).new
end
end
if base.include_action?(:edit)
base.send :define_method, :edit do
if parent_model
self.model = parent_model.send(controller_name).find(params[:id])
else
self.model = resource_class.find(params[:id])
end
Responder.new(self).edit
end
end
if base.include_action?(:create)
base.send :define_method, :create do
if parent_model
self.model = parent_model.send(controller_name).build(params[controller_name.singularize])
else
self.model = resource_class.new(params[controller_name.singularize])
end
if model.save
flash_message = "#{resource_class.model_name.human} successfully created"
if params[:save_and_new]
flash[:success] = flash_message
redirect_to action: :new
else
flash.now[:success] = flash_message
Responder.new(self).create
end
else
respond_to do |format|
format.html { render :new }
format.json { render json: model.errors, status: :unprocessable_entity }
end
end
end
end
if base.include_action?(:update)
base.send :define_method, :update do
if parent_model
self.model = parent_model.send(controller_name).find(params[:id])
else
self.model = resource_class.find(params[:id])
end
if model.update_attributes(params[controller_name.singularize])
flash.now[:success] = "#{resource_class.model_name.human} successfully updated"
Responder.new(self).update
else
respond_to do |format|
format.html { render :edit }
format.json { render json: model.errors, status: :unprocessable_entity }
end
end
end
end
if base.include_action?(:destroy)
base.send :define_method, :destroy do
if parent_model
self.model = parent_model.send(controller_name).find(params[:id])
else
self.model = resource_class.find(params[:id])
end
if model.destroy
flash[:warning] = "#{resource_class.model_name.human} successfully removed"
Responder.new(self).destroy
else
flash[:danger] = "#{resource_class.model_name.human} could not be deleted"
respond_to do |format|
format.html { redirect_to action: :index }
format.json { render json: model.errors, status: :unprocessable_entity }
end
end
end
end
end
|