Class: Carnival::BaseAdminPresenter

Inherits:
Object
  • Object
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

#initialize(params) ⇒ BaseAdminPresenter

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_execObject

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

#actionsObject



23
24
25
# File 'app/presenters/carnival/base_admin_presenter.rb', line 23

def actions
  @@actions[presenter_class_name]
end

#actions_for_pageObject



31
32
33
# File 'app/presenters/carnival/base_admin_presenter.rb', line 31

def actions_for_page
  filter_actions([:new], :page)
end

#actions_for_recordObject



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_fieldsObject



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_queryObject



12
13
14
# File 'app/presenters/carnival/base_admin_presenter.rb', line 12

def base_query
  @base_query
end

#controller_nameObject



112
113
114
115
116
117
118
119
# File 'app/presenters/carnival/base_admin_presenter.rb', line 112

def controller_name
  namespace = extract_namespace
  if namespace.present?
    "#{extract_namespace.downcase}/#{@@controller.controller_name}"
  else
    @@controller.controller_name
  end
end

#date_filter_fieldObject



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_scopeObject



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_directionObject



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_fieldObject



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

#fieldsObject



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

#form_for(action) ⇒ Object



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_nameObject



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

Returns:

  • (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_classObject



196
197
198
# File 'app/presenters/carnival/base_admin_presenter.rb', line 196

def model_class
  full_model_name.classify.constantize
end

#model_nameObject



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, 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

Returns:

  • (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
  "#{extract_namespace}::#{field.name.singularize.classify}Presenter".constantize.send("new", :controller => @@controller)
end

#relation_field?(field) ⇒ Boolean

Returns:

  • (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 = "#{extract_namespace.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

#scopesObject



45
46
47
# File 'app/presenters/carnival/base_admin_presenter.rb', line 45

def scopes
  @@scopes[presenter_class_name]
end

#scopes_countersObject



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_fieldsObject



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_fieldsObject



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_nameObject



121
122
123
# File 'app/presenters/carnival/base_admin_presenter.rb', line 121

def table_name
  model_class.send("table_name")
end