Class: Carnival::BaseAdminPresenter
- Inherits:
-
Object
- Object
- Carnival::BaseAdminPresenter
show all
- Defined in:
- app/presenters/carnival/base_admin_presenter.rb
Constant Summary
collapse
- @@actions =
New implementation starts here
{}
- @@model_names =
{}
- @@fields =
{}
- @@scopes =
{}
- @@forms =
{}
- @@presenters =
[]
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
Returns a new instance of BaseAdminPresenter.
7
8
9
10
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 7
def initialize(params)
@@controller = params[:controller]
@special_scopes_to_exec = nil
end
|
Instance Attribute Details
#special_scope_to_exec ⇒ Object
Returns the value of attribute special_scope_to_exec.
5
6
7
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 5
def special_scope_to_exec
@special_scope_to_exec
end
|
Class Method Details
.action(name, params = {}) ⇒ Object
18
19
20
21
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 18
def self.action(name, params = {})
@@actions[presenter_class_name] = {} if @@actions[presenter_class_name].nil?
@@actions[presenter_class_name][name] = Carnival::Action.new(self.new({}), name, params)
end
|
Instance Method Details
#actions ⇒ Object
23
24
25
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 23
def actions
@@actions[presenter_class_name]
end
|
#actions_for_page ⇒ Object
31
32
33
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 31
def actions_for_page
filter_actions([:new], :page)
end
|
#actions_for_record ⇒ Object
27
28
29
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 27
def actions_for_record
filter_actions([:show, :edit, :destroy], :record)
end
|
#advanced_search_fields ⇒ Object
177
178
179
180
181
182
183
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 177
def advanced_search_fields
advanced_search_fields = {}
@@fields[presenter_class_name].each do |key, field|
advanced_search_fields[key] = field if field.advanced_searchable?
end
advanced_search_fields
end
|
#base_query ⇒ Object
12
13
14
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 12
def base_query
@base_query
end
|
#controller_name ⇒ Object
112
113
114
115
116
117
118
119
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 112
def controller_name
namespace =
if namespace.present?
"#{.downcase}/#{@@controller.controller_name}"
else
@@controller.controller_name
end
end
|
#date_filter_field ⇒ Object
185
186
187
188
189
190
191
192
193
194
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 185
def date_filter_field
date_field = nil
@@fields[presenter_class_name].each do |key, field|
if field.date_filter?
date_field = field
break
end
end
date_field
end
|
#default_scope ⇒ Object
145
146
147
148
149
150
151
152
153
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 145
def default_scope
default_scope = nil
@@scopes[presenter_class_name].each do |key, scope|
default_scope = scope if scope.default?
break
end
default_scope = @@scopes[presenter_class_name].first[1] if default_scope.nil?
default_scope
end
|
#default_sort_direction ⇒ Object
165
166
167
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 165
def default_sort_direction
default_sortable_field.default_sort_direction
end
|
#default_sortable_field ⇒ Object
155
156
157
158
159
160
161
162
163
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 155
def default_sortable_field
default_field = nil
@@fields[presenter_class_name].each do |key, field|
default_field = field if field.default_sortable?
break
end
default_field = @@fields[presenter_class_name].first[1] if default_field.nil?
default_field
end
|
#fields ⇒ Object
63
64
65
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 63
def fields
@@fields[presenter_class_name]
end
|
#fields_for_action(action) ⇒ Object
67
68
69
70
71
72
73
74
75
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 67
def fields_for_action(action)
fields_action = {}
@@fields[presenter_class_name].each do |key, field|
if field.valid_for_action?(action)
fields_action[key] = field
end
end
fields_action
end
|
77
78
79
80
81
82
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 77
def form_for(action)
form = Carnival::Form.new(action)
form = @@forms[presenter_class_name][action] if @@forms[presenter_class_name].present? and @@forms[presenter_class_name][action].present?
form.fields = fields_for_action(action)
form
end
|
#full_model_name ⇒ Object
104
105
106
107
108
109
110
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 104
def full_model_name
if @@model_names[presenter_class_name].nil?
self.class.to_s.gsub("Presenter", "").underscore
else
@@model_names[presenter_class_name]
end
end
|
#has_action?(action) ⇒ Boolean
35
36
37
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 35
def has_action?(action)
@@actions[presenter_class_name].present? && @@actions[presenter_class_name][action].present?
end
|
#model_class ⇒ Object
196
197
198
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 196
def model_class
full_model_name.classify.constantize
end
|
#model_name ⇒ Object
85
86
87
88
89
90
91
92
93
94
95
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 85
def model_name
if @@model_names[presenter_class_name].nil?
self.class.to_s.split("::").last().gsub("Presenter", "").underscore
else
if @@model_names[presenter_class_name].include?("/")
@@model_names[presenter_class_name].split("/").last
else
@@model_names[presenter_class_name]
end
end
end
|
#model_path(action, extra_params = nil) ⇒ Object
97
98
99
100
101
102
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 97
def model_path(action, =nil)
params = {controller: controller_name, action: action}
params = params.merge() if .present?
params = params.merge(:only_path => true)
url_for(params)
end
|
#must_render_field?(nested_in, field, model_object) ⇒ Boolean
133
134
135
136
137
138
139
140
141
142
143
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 133
def must_render_field?(nested_in, field, model_object)
must_render = true
if nested_in.present?
if nested_in.class == model_object.send(field.name).class
must_render = false
elsif nested_in.class.name.underscore.split("/").last == field.name
must_render = false
end
end
return must_render
end
|
#parse_advanced_search(records, search_syntax) ⇒ Object
240
241
242
243
244
245
246
247
248
249
250
251
252
253
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 240
def parse_advanced_search records, search_syntax
search = JSON.parse(search_syntax)
search.keys.each do |key|
search_field = key
search_field = key.split(".").last if key.include?(".")
search_field = search_field.gsub("_id", "") if search_field.ends_with?("_id")
if @@fields[presenter_class_name].keys.include? search_field.to_sym
if @@fields[presenter_class_name][search_field.to_sym].advanced_searchable?
records = parse_advanced_search_field(search_field, search[key], records)
end
end
end
records
end
|
#presenter_to_field(field, record) ⇒ Object
255
256
257
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 255
def presenter_to_field field, record
"#{}::#{field.name.singularize.classify}Presenter".constantize.send("new", :controller => @@controller)
end
|
#relation_field?(field) ⇒ Boolean
200
201
202
203
204
205
206
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 200
def relation_field?(field)
if model_class.reflect_on_association(field)
true
else
false
end
end
|
#relation_label(field, record) ⇒ Object
208
209
210
211
212
213
214
215
216
217
218
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 208
def relation_label(field, record)
if relation_field?(field)
if model_class.reflect_on_association(field).macro == :belongs_to
return record.send(field)
else
return I18n.t("activerecord.attibutes.#{full_model_name}.#{field}")
end
end
raise
return ""
end
|
#relation_path(field, record) ⇒ Object
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 220
def relation_path(field, record)
if relation_field?(field)
if is_namespaced? and !model_class.reflect_on_association(field).klass.name.pluralize.underscore.include?("/")
related_class = "#{.downcase}/#{model_class.reflect_on_association(field).klass.name.pluralize.underscore}"
else
related_class = model_class.reflect_on_association(field).klass.name.pluralize.underscore
end
if model_class.reflect_on_association(field).macro == :belongs_to
id = -1
id = record.send(model_class.reflect_on_association(field).foreign_key) if record.send(model_class.reflect_on_association(field).foreign_key).present?
params = {:controller => related_class, :action => :show, :id => id}
else
params = {:controller => related_class, :action => :index, :advanced_search => make_relation_advanced_query_url_options(field, record)}
end
params = params.merge(:only_path => true)
return url_for(params)
end
return nil
end
|
#scopes ⇒ Object
45
46
47
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 45
def scopes
@@scopes[presenter_class_name]
end
|
#scopes_counters ⇒ Object
49
50
51
52
53
54
55
56
57
58
59
60
61
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 49
def scopes_counters
scopes = {}
if @@scopes[presenter_class_name].present?
@@scopes[presenter_class_name].each do |key, scope|
if base_query.present?
scopes[scope.name] = base_query.send(scope.name).count
else
scopes[scope.name] = model_class.send(scope.name).count
end
end
end
scopes
end
|
#searchable_fields ⇒ Object
125
126
127
128
129
130
131
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 125
def searchable_fields
searchable_fields = {}
@@fields[presenter_class_name].each do |key, field|
searchable_fields[key] = field if field.searchable?
end
searchable_fields
end
|
#sortable_fields ⇒ Object
169
170
171
172
173
174
175
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 169
def sortable_fields
sortable_fields = {}
@@fields[presenter_class_name].each do |key, field|
sortable_fields[key] = field if field.sortable?
end
sortable_fields
end
|
#table_name ⇒ Object
121
122
123
|
# File 'app/presenters/carnival/base_admin_presenter.rb', line 121
def table_name
model_class.send("table_name")
end
|