Class: Carnival::BaseAdminPresenter
- Inherits:
-
Object
- Object
- Carnival::BaseAdminPresenter
- Defined in:
- app/presenters/carnival/base_admin_presenter.rb
Constant Summary collapse
- @@index_as =
{}
- @@actions =
{}
- @@batch_actions =
{}
- @@items_per_page =
{}
- @@model_names =
{}
- @@fields =
{}
- @@scopes =
{}
- @@forms =
{}
Class Method Summary collapse
- .action(name, params = {}) ⇒ Object
- .batch_action(name, params = {}) ⇒ Object
- .index_as(type) ⇒ Object
- .items_per_page(per_page) ⇒ Object
Instance Method Summary collapse
- #actions ⇒ Object
- #actions_for_page ⇒ Object
- #actions_for_record ⇒ Object
- #advanced_search_fields ⇒ Object
- #batch_actions ⇒ Object
- #build_relation_field(field, model_object) ⇒ Object
- #controller_class_name ⇒ Object
- #controller_name ⇒ Object
- #controller_to_field(field) ⇒ Object
- #controller_to_field_sym(field) ⇒ Object
- #date_filter_field ⇒ Object
- #default_scope ⇒ Object
- #default_sort_direction ⇒ Object
- #default_sortable_field ⇒ Object
- #field_type(field) ⇒ Object
- #fields ⇒ Object
- #fields_for_action(action) ⇒ Object
- #form_for(action) ⇒ Object
- #full_model_name ⇒ Object
- #get_association(association) ⇒ Object
- #get_association_from_field(field) ⇒ Object
- #get_class_for(field) ⇒ Object
- #get_field(field) ⇒ Object
- #get_related_class(relation_name) ⇒ Object
- #get_related_class_for_field(field_name) ⇒ Object
- #has_action?(action) ⇒ Boolean
- #has_batch_actions? ⇒ Boolean
- #index_as ⇒ Object
- #index_as_grid? ⇒ Boolean
- #index_as_list? ⇒ Boolean
- #index_as_table? ⇒ Boolean
-
#initialize(params) ⇒ BaseAdminPresenter
constructor
A new instance of BaseAdminPresenter.
- #is_from_carnival? ⇒ Boolean
- #is_one_to_one_relation?(field_name) ⇒ Boolean
- #is_relation_belongs_to?(field) ⇒ Boolean
- #is_relation_has_many?(field) ⇒ Boolean
- #items_per_page ⇒ Object
- #join_tables ⇒ Object
- #load_dependent_select_options_path ⇒ Object
- #model_class ⇒ Object
- #model_name ⇒ Object
- #model_params(params) ⇒ Object
- #model_path(action, extra_params = nil) ⇒ Object
- #must_render_field?(nested_in, field, model_object) ⇒ Boolean
- #parse_advanced_search(records, search_syntax) ⇒ Object
- #presenter_name ⇒ Object
- #presenter_to_field(field, record) ⇒ Object
- #presenter_to_field_sym(field) ⇒ Object
- #relation_field?(field_name) ⇒ Boolean
- #relation_model(field) ⇒ Object
- #relation_path(field, record) ⇒ Object
- #relation_type(sym) ⇒ Object
- #render_action?(record, record_action, action = nil) ⇒ Boolean
- #render_field?(field, action = nil) ⇒ Boolean
- #scopes ⇒ Object
- #searchable_fields ⇒ Object
- #sortable_fields ⇒ Object
- #table_name ⇒ Object
- #validates ⇒ Object
Constructor Details
#initialize(params) ⇒ BaseAdminPresenter
Returns a new instance of BaseAdminPresenter.
6 7 8 9 10 11 12 13 14 15 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 6 def initialize(params) @controller = params[:controller] if model_class.present? @klass_service = KlassService.new model_class @advanced_search_parser = Presenters::AdvancedSearchParser.new(@klass_service) @validators = [Carnival::PresenterValidators::FieldValidator] validates end end |
Class Method Details
.action(name, params = {}) ⇒ Object
33 34 35 36 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 33 def self.action(name, params = {}) @@actions[presenter_class_name] ||= {} @@actions[presenter_class_name][name] = Carnival::Action.new(name, params) end |
.batch_action(name, params = {}) ⇒ Object
39 40 41 42 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 39 def self.batch_action(name, params = {}) @@batch_actions[presenter_class_name] ||= {} @@batch_actions[presenter_class_name][name] = Carnival::BatchAction.new(self.new({}), name, params) end |
.index_as(type) ⇒ Object
28 29 30 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 28 def self.index_as(type) @@index_as[presenter_class_name] = type end |
.items_per_page(per_page) ⇒ Object
53 54 55 56 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 53 def self.items_per_page(per_page) @@items_per_page[presenter_class_name] ||= {} @@items_per_page[presenter_class_name][:items_per_page] = per_page end |
Instance Method Details
#actions ⇒ Object
82 83 84 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 82 def actions @@actions[presenter_class_name] end |
#actions_for_page ⇒ Object
94 95 96 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 94 def actions_for_page filter_actions([:new], :page) end |
#actions_for_record ⇒ Object
90 91 92 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 90 def actions_for_record filter_actions([:show, :edit, :destroy], :record) end |
#advanced_search_fields ⇒ Object
278 279 280 281 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 278 def advanced_search_fields fields = @@fields[presenter_class_name] @advanced_search_parser.get_advanced_search_fields fields end |
#batch_actions ⇒ Object
86 87 88 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 86 def batch_actions @@batch_actions[presenter_class_name] end |
#build_relation_field(field, model_object) ⇒ Object
226 227 228 229 230 231 232 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 226 def build_relation_field(field, model_object) if is_relation_belongs_to?(field.name) model_object.send("#{field.name}_build") else model_object.send(field.name).build end end |
#controller_class_name ⇒ Object
180 181 182 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 180 def controller_class_name @controller.class.name end |
#controller_name ⇒ Object
184 185 186 187 188 189 190 191 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 184 def controller_name namespace = extract_namespace if namespace.present? "#{extract_namespace.downcase}/#{@controller.controller_name}" else @controller.controller_name end end |
#controller_to_field(field) ⇒ Object
393 394 395 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 393 def controller_to_field field "#{extract_namespace}::#{field.name.to_s.classify.pluralize}Controller".constantize.send("new") end |
#controller_to_field_sym(field) ⇒ Object
397 398 399 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 397 def controller_to_field_sym field "#{extract_namespace}::#{field.to_s.classify.pluralize}Controller".constantize.send("new") end |
#date_filter_field ⇒ Object
283 284 285 286 287 288 289 290 291 292 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 283 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
248 249 250 251 252 253 254 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 248 def default_scope return if scopes.empty? @@scopes[presenter_class_name].each do |key, scope| return scope if scope.default? end @@scopes[presenter_class_name].values.first end |
#default_sort_direction ⇒ Object
266 267 268 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 266 def default_sort_direction default_sortable_field.default_sort_direction end |
#default_sortable_field ⇒ Object
256 257 258 259 260 261 262 263 264 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 256 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 |
#field_type(field) ⇒ Object
325 326 327 328 329 330 331 332 333 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 325 def field_type(field) type = model_class.columns_hash[field.to_s].try(:type) if relation_field?(field.to_sym) then :relation elsif type == :date || type == :datetime then type elsif type == :number || type == :float then :number elsif type == :integer and model_class.const_defined? field.upcase and field != :id then :enum else type end end |
#fields ⇒ Object
111 112 113 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 111 def fields @@fields[presenter_class_name] end |
#fields_for_action(action) ⇒ Object
123 124 125 126 127 128 129 130 131 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 123 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 |
#form_for(action) ⇒ Object
133 134 135 136 137 138 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 133 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
168 169 170 171 172 173 174 175 176 177 178 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 168 def full_model_name if Carnival::Config.use_full_model_name == false and !is_from_carnival? return model_name end if @@model_names[presenter_class_name].nil? self.class.to_s.gsub("Presenter", "").underscore else @@model_names[presenter_class_name] end end |
#get_association(association) ⇒ Object
307 308 309 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 307 def get_association(association) @klass_service.get_association(association) end |
#get_association_from_field(field) ⇒ Object
368 369 370 371 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 368 def get_association_from_field(field) field = get_field(field) field.specified_association? ? field.association_name : field.name end |
#get_class_for(field) ⇒ Object
377 378 379 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 377 def get_class_for field @klass_service. field end |
#get_field(field) ⇒ Object
115 116 117 118 119 120 121 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 115 def get_field(field) if field.respond_to? :to_sym @@fields[presenter_class_name][field.to_sym] else field end end |
#get_related_class(relation_name) ⇒ Object
373 374 375 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 373 def relation_name @klass_service. relation_name end |
#get_related_class_for_field(field_name) ⇒ Object
364 365 366 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 364 def (field_name) get_association_from_field(field_name) end |
#has_action?(action) ⇒ Boolean
98 99 100 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 98 def has_action?(action) @@actions[presenter_class_name].present? && @@actions[presenter_class_name][action].present? end |
#has_batch_actions? ⇒ Boolean
44 45 46 47 48 49 50 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 44 def has_batch_actions? if @@batch_actions[presenter_class_name].present? @@batch_actions[presenter_class_name].keys.size > 0 else false end end |
#index_as ⇒ Object
78 79 80 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 78 def index_as @@index_as[presenter_class_name] ||= :table end |
#index_as_grid? ⇒ Boolean
74 75 76 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 74 def index_as_grid? index_as == :grid end |
#index_as_list? ⇒ Boolean
70 71 72 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 70 def index_as_list? index_as == :list end |
#index_as_table? ⇒ Boolean
66 67 68 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 66 def index_as_table? index_as == :table end |
#is_from_carnival? ⇒ Boolean
164 165 166 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 164 def is_from_carnival? self.class.to_s.include? 'Carnival::' end |
#is_one_to_one_relation?(field_name) ⇒ Boolean
340 341 342 343 344 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 340 def is_one_to_one_relation?(field_name) field = get_field(field_name) @klass_service.is_a_belongs_to_relation?(field.association_name) || @klass_service.is_a_has_one_relation?(field.association_name) end |
#is_relation_belongs_to?(field) ⇒ Boolean
315 316 317 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 315 def is_relation_belongs_to?(field) model_class.reflect_on_association(field.to_sym).macro == :belongs_to end |
#is_relation_has_many?(field) ⇒ Boolean
319 320 321 322 323 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 319 def is_relation_has_many?(field) field = get_field(field) association = @klass_service.relation_type(field.association_name || field.name) association.to_s.include? 'many' end |
#items_per_page ⇒ Object
58 59 60 61 62 63 64 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 58 def items_per_page @@items_per_page[presenter_class_name] ||= {} unless @@items_per_page[presenter_class_name][:items_per_page].present? and @@items_per_page[presenter_class_name][:items_per_page] > 0 @@items_per_page[presenter_class_name][:items_per_page] = Carnival::Config.items_per_page end @@items_per_page[presenter_class_name][:items_per_page] end |
#join_tables ⇒ Object
210 211 212 213 214 215 216 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 210 def join_tables joins = [] @@fields[presenter_class_name].each do |key, field| joins << field.association_name if relation_field? key.to_sym end joins end |
#load_dependent_select_options_path ⇒ Object
400 401 402 403 404 405 406 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 400 def if extract_namespace.present? "/#{extract_namespace.downcase}/carnival-base/load_dependent_select_options" else "/carnival-base/load_dependent_select_options" end end |
#model_class ⇒ Object
294 295 296 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 294 def model_class full_model_name.classify.constantize rescue nil end |
#model_name ⇒ Object
141 142 143 144 145 146 147 148 149 150 151 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 141 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_params(params) ⇒ Object
153 154 155 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 153 def model_params(params) params.select{|key, value| key != "action" && key != "controller"} end |
#model_path(action, extra_params = nil) ⇒ Object
157 158 159 160 161 162 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 157 def model_path(action, extra_params=nil) params = {controller: controller_name, action: action} params = params.merge(extra_params) if extra_params.present? params = params.merge(:only_path => true) url_for(params) end |
#must_render_field?(nested_in, field, model_object) ⇒ Boolean
234 235 236 237 238 239 240 241 242 243 244 245 246 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 234 def must_render_field?(nested_in, field, model_object) must_render = true if nested_in.present? if field.as == :partial must_render = true elsif 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
381 382 383 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 381 def parse_advanced_search records, search_syntax @advanced_search_parser.parse_advanced_search @@fields[presenter_class_name], records, search_syntax end |
#presenter_name ⇒ Object
23 24 25 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 23 def presenter_name self.class.to_s end |
#presenter_to_field(field, record) ⇒ Object
385 386 387 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 385 def presenter_to_field field, record "#{extract_namespace}::#{field.name.to_s.singularize.classify}Presenter".constantize.send("new", :controller => controller_to_field(field)) end |
#presenter_to_field_sym(field) ⇒ Object
389 390 391 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 389 def presenter_to_field_sym field "#{extract_namespace}::#{field.to_s.singularize.classify}Presenter".constantize.send("new", :controller => controller_to_field_sym(field)) end |
#relation_field?(field_name) ⇒ Boolean
298 299 300 301 302 303 304 305 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 298 def relation_field?(field_name) field = get_field(field_name) if field.present? field.specified_association? or @klass_service.relation?(field.name) else false end end |
#relation_model(field) ⇒ Object
335 336 337 338 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 335 def relation_model(field) field = get_field(field) @klass_service.get_association(field.association_name).klass end |
#relation_path(field, record) ⇒ Object
346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 346 def relation_path(field, record) field = get_field(field) return nil if !relation_field?(field) relation_name = (field) = record.send(field.association_name) unless .nil? if is_one_to_one_relation?(field) params = {:controller => "#{extract_namespace.downcase}/#{relation_name}", :action => :show, :id => .id} else params = {:controller => "#{extract_namespace.downcase}/#{get_association_from_field(field)}", :action => :index, :advanced_search => (field.name, record)} end params = params.merge(:only_path => true) return generate_route_path params else '#' end end |
#relation_type(sym) ⇒ Object
311 312 313 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 311 def relation_type sym @klass_service.relation_type sym end |
#render_action?(record, record_action, action = nil) ⇒ Boolean
222 223 224 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 222 def render_action?(record, record_action, action = nil) return true end |
#render_field?(field, action = nil) ⇒ Boolean
218 219 220 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 218 def render_field?(field, action = nil) return true end |
#scopes ⇒ Object
107 108 109 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 107 def scopes @@scopes[presenter_class_name] || {} end |
#searchable_fields ⇒ Object
197 198 199 200 201 202 203 204 205 206 207 208 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 197 def searchable_fields searchable_fields = {} @@fields[presenter_class_name].each do |key, field| if relation_field? key field_name = "#{field.name.pluralize}.name" else field_name = "#{self.table_name}.#{field.name}" end searchable_fields[field_name] = field if field.searchable? end searchable_fields end |
#sortable_fields ⇒ Object
270 271 272 273 274 275 276 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 270 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
193 194 195 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 193 def table_name model_class.table_name end |
#validates ⇒ Object
17 18 19 20 21 |
# File 'app/presenters/carnival/base_admin_presenter.rb', line 17 def validates @validators.each do |validator| validator.new(self).validates end end |