carnival 0.2.7 → 0.2.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (75) hide show
  1. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-regular-webfont.eot +0 -0
  2. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-regular-webfont.svg +0 -0
  3. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-regular-webfont.ttf +0 -0
  4. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-regular-webfont.woff +0 -0
  5. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-semibold-webfont.eot +0 -0
  6. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-semibold-webfont.svg +0 -0
  7. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-semibold-webfont.ttf +0 -0
  8. data/app/assets/{images/carnival/fonts → fonts/carnival}/opensans-semibold-webfont.woff +0 -0
  9. data/app/assets/{images/carnival/fonts → fonts/carnival}/up-not.png +0 -0
  10. data/app/assets/javascripts/carnival/{vizir_admin.js → vizir_admin.js.erb} +44 -18
  11. data/app/assets/stylesheets/carnival/actions.css.scss +3 -7
  12. data/app/assets/stylesheets/carnival/carnival-table.css.scss +12 -3
  13. data/app/assets/stylesheets/carnival/forms.css.scss +1 -0
  14. data/app/assets/stylesheets/carnival/menu.css.scss +3 -3
  15. data/app/assets/stylesheets/carnival/period.css.scss +1 -1
  16. data/app/assets/stylesheets/carnival/search.css.scss +9 -6
  17. data/app/assets/stylesheets/carnival/structure.css.scss +10 -10
  18. data/app/controllers/carnival/base_admin_controller.rb +37 -57
  19. data/app/helpers/carnival/base_admin_helper.rb +52 -70
  20. data/app/inputs/admin_date_input.rb +2 -1
  21. data/app/models/carnival/batch_action.rb +1 -2
  22. data/app/models/carnival/field.rb +3 -2
  23. data/app/presenters/carnival/base_admin_presenter.rb +47 -192
  24. data/app/presenters/carnival/dsl.rb +55 -0
  25. data/app/services/carnival/klass_service.rb +5 -1
  26. data/app/services/carnival/presenters/advanced_search_parser.rb +4 -5
  27. data/app/services/carnival/query_service.rb +15 -24
  28. data/app/view_objects/carnival/paginator.rb +10 -12
  29. data/app/view_objects/carnival/thead_renderer.rb +11 -18
  30. data/app/views/carnival/base_admin/_index_as_table.html.haml +6 -4
  31. data/app/views/carnival/base_admin/index.html.haml +8 -4
  32. data/app/views/carnival/shared/_advanced_search.html.haml +6 -5
  33. data/app/views/carnival/shared/form/_form.html.haml +3 -2
  34. data/config/locales/carnival.en.yml +13 -5
  35. data/config/locales/carnival.pt-br.yml +1 -1
  36. data/lib/carnival.rb +10 -12
  37. data/lib/carnival/engine.rb +3 -2
  38. data/lib/carnival/routes.rb +4 -4
  39. data/lib/carnival/version.rb +1 -1
  40. data/spec/dummy/app/controllers/admin/todo_lists_controller.rb +7 -0
  41. data/spec/dummy/app/controllers/admin/todos_controller.rb +7 -0
  42. data/spec/dummy/app/models/todo.rb +7 -0
  43. data/spec/dummy/app/models/todo_list.rb +4 -0
  44. data/spec/dummy/app/presenters/admin/todo_list_presenter.rb +13 -0
  45. data/spec/dummy/app/presenters/admin/todo_presenter.rb +32 -0
  46. data/spec/dummy/config/application.rb +3 -0
  47. data/spec/dummy/config/database.yml +1 -1
  48. data/spec/dummy/config/environments/development.rb +2 -0
  49. data/spec/dummy/config/initializers/carnival_initializer.rb +25 -0
  50. data/spec/dummy/config/locales/carnival.en.yml +28 -0
  51. data/spec/dummy/config/locales/carnival.pt-br.yml +259 -0
  52. data/spec/dummy/config/routes.rb +7 -52
  53. data/spec/dummy/db/migrate/20150316021645_create_todos.rb +10 -0
  54. data/spec/dummy/db/migrate/20150408165317_create_todo_lists.rb +8 -0
  55. data/spec/dummy/db/migrate/20150408165333_add_todo_list_relation_to_todos.rb +5 -0
  56. data/spec/dummy/db/schema.rb +32 -0
  57. data/spec/factories/todo_lists_factory.rb +5 -0
  58. data/spec/factories/todos_factory.rb +18 -0
  59. data/spec/features/create_spec.rb +28 -0
  60. data/spec/features/destroy_spec.rb +11 -0
  61. data/spec/features/index/basic_index_spec.rb +14 -0
  62. data/spec/features/index/pagination_spec.rb +19 -0
  63. data/spec/features/index/scope_spec.rb +29 -0
  64. data/spec/features/index/search_spec.rb +28 -0
  65. data/spec/features/show_spec.rb +15 -0
  66. data/spec/features/update_spec.rb +26 -0
  67. data/spec/rails_helper.rb +25 -5
  68. data/spec/support/features/index_helpers.rb +15 -0
  69. metadata +386 -284
  70. checksums.yaml +0 -7
  71. data/app/views/carnival/base_admin/index.pdf.haml +0 -13
  72. data/app/views/carnival/shared/_header.pdf.haml +0 -13
  73. data/app/views/carnival/shared/_list_cel.pdf.haml +0 -9
  74. data/app/views/carnival/shared/_report.pdf.haml +0 -21
  75. data/config/initializers/wicked_pdf.rb +0 -5
@@ -1,7 +1,7 @@
1
1
  module Carnival
2
2
  module BaseAdminHelper
3
3
  def set_resource_actived_if_current(path)
4
- (request.fullpath == path)? 'actived' : ''
4
+ (request.fullpath == path) ? 'actived' : ''
5
5
  end
6
6
 
7
7
  def show_messages
@@ -18,38 +18,36 @@ module Carnival
18
18
  ''
19
19
  end
20
20
 
21
- def caminho_modelo(action, extra_params=nil)
22
- params = {controller: controller.controller_name, action: action}
21
+ def caminho_modelo(action, extra_params = nil)
22
+ params = { controller: controller.controller_name, action: action }
23
23
  params = params.merge(extra_params) if extra_params.present?
24
24
  url_for(params)
25
25
  end
26
26
 
27
- def carnival_render_if_exist partial_path
28
- if partial_exist?(partial_path)
29
- return render partial_path
30
- end
27
+ def carnival_render_if_exist(partial_path)
28
+ render partial_path if partial_exist?(partial_path)
31
29
  end
32
30
 
33
- def partial_exist? partial_path
34
- File.exists?(get_partial_path(partial_path))
31
+ def partial_exist?(partial_path)
32
+ File.exist?(get_partial_path(partial_path))
35
33
  end
36
34
 
37
- def has_many_relation? model, field
35
+ def has_many_relation?(model, field)
38
36
  klass = Carnival::KlassService.new model.class
39
37
  klass.is_a_has_many_relation?(field.to_sym)
40
38
  end
41
39
 
42
- def has_one_relation? model, field
40
+ def has_one_relation?(model, field)
43
41
  klass = Carnival::KlassService.new model.class
44
42
  klass.is_a_has_one_relation?(field.to_sym)
45
43
  end
46
44
 
47
- def many_to_many_relation? model, field
45
+ def many_to_many_relation?(model, field)
48
46
  klass = Carnival::KlassService.new model.class
49
47
  klass.is_a_many_to_many_relation?(field.to_sym)
50
48
  end
51
49
 
52
- def get_partial_path partial_path
50
+ def get_partial_path(partial_path)
53
51
  path = Rails.root.join('app', 'views')
54
52
  partial_path_array = partial_path.split('/')
55
53
  partial_path_array.each do |pp|
@@ -62,9 +60,9 @@ module Carnival
62
60
  path
63
61
  end
64
62
 
65
- def menu_link link
63
+ def menu_link(link)
66
64
  link.strip!
67
- if link.to_s.end_with?('_path') or link.to_s.end_with?('_url')
65
+ if link.to_s.end_with?('_path') || link.to_s.end_with?('_url')
68
66
  return eval link
69
67
  elsif link.index(/_path.+/) #path with arguments
70
68
  return eval link
@@ -87,7 +85,7 @@ module Carnival
87
85
  end
88
86
 
89
87
  def field_to_show(presenter, field_name, record, show_only_values=false)
90
- if presenter.fields[field_name].params[:as] == :partial
88
+ if presenter.fields[field_name].params[:as] == :partial
91
89
  raw(render field_name.to_s, record: record)
92
90
  else
93
91
  rendered = field_value_and_type presenter, field_name, record
@@ -96,49 +94,47 @@ module Carnival
96
94
 
97
95
  is_relation = presenter.relation_field?(field_name)
98
96
 
99
- unless value.nil?
97
+ if value.present?
100
98
  formatted_field = format_field(presenter, field_name, field_type, value)
101
- if is_relation and !show_only_values
99
+ if is_relation && !show_only_values
102
100
  link_to(formatted_field, presenter.relation_path(field_name, record))
103
101
  else
104
102
  formatted_field
105
103
  end
106
- else
107
- nil
108
104
  end
109
105
  end
110
106
  end
111
107
 
112
- def field_value_and_type presenter, field_name, record
108
+ def field_value_and_type(presenter, field_name, record)
113
109
  renderer = FieldRenderers::RendererCreator
114
- .create_field_renderer(presenter, field_name)
110
+ .create_field_renderer(presenter, field_name)
115
111
 
116
- rendered = renderer.render_field(record)
112
+ renderer.render_field(record)
117
113
  end
118
114
 
119
- def is_image? field_type, value
115
+ def is_image?(field_type, value)
120
116
  field_type.nil? and value.class.to_s == "Paperclip::Attachment" and value.content_type.include? "image"
121
117
  end
122
118
 
123
119
  def format_field(presenter, field_name, field_type, value)
124
120
  if is_image?(field_type, value)
125
- "<img class='attr' src='#{value.url(:thumb)}' alt='#{translate_field(presenter, field_name)}' />"
121
+ image_tag value.url(:thumb), alt: translate_field(presenter, field_name), class: 'attr'
126
122
  else
127
123
  case field_type
128
124
  when :datetime
129
125
  begin
130
126
  I18n.l(value, format: :long_date)
131
127
  rescue I18n::MissingTranslationData
132
- value.strftime("%d/%m/%y %H:%M:%S")
128
+ value.strftime('%d/%m/%y %H:%M:%S')
133
129
  end
134
130
  when :date
135
131
  begin
136
132
  I18n.l(value, format: :short_date)
137
133
  rescue I18n::MissingTranslationData
138
- value.strftime("%d/%m/%Y")
134
+ value.strftime('%d/%m/%Y')
139
135
  end
140
136
  when :number
141
- number_with_precision(value, :precision => 2, :separator => ",")
137
+ number_with_precision(value, precision: 2, separator: ',')
142
138
  when :enum
143
139
  presenter.model_class.const_get(field_name.upcase)[value]
144
140
  else
@@ -150,7 +146,7 @@ module Carnival
150
146
  def translate_field(presenter, field_name)
151
147
  field = presenter.get_field(field_name)
152
148
  field_key = field.name_for_translation
153
- presenter.full_model_name.classify.constantize.human_attribute_name field_key
149
+ presenter.model_class.human_attribute_name field_key
154
150
  end
155
151
 
156
152
  def list_cel(presenter, field, record, only_render_fields)
@@ -174,68 +170,54 @@ module Carnival
174
170
  "<div class='attr'><div class='label #{field}'>#{translate_field(presenter, field)}:</div><div class='field_value #{field}'>#{result}</div></div>"
175
171
  end
176
172
 
177
- def get_css_class presenter, field, record
173
+ def get_css_class(presenter, field, record)
178
174
  css_class = presenter.get_field(field).css_class
179
- return '' if !css_class
180
- return record.send(css_class[:method]) if css_class.is_a? Hash
181
- return css_class if css_class.is_a? String
182
- return ''
175
+ if css_class.is_a? Hash
176
+ record.send(css_class[:method])
177
+ else css_class
178
+ css_class.presence || ''
179
+ end
183
180
  end
184
181
 
185
182
  def list_buttons(presenter, record)
186
- result = ""
187
- presenter.actions_for_record.each do |key, record_action|
188
- if presenter.render_action?(record, record_action, params[:action])
189
- if record_action.show(record)
190
- if record_action.remote?
191
- result << button_action_remote(record_action, presenter, record)
192
- else
193
- result << button_action(record_action, presenter, record)
194
- end
183
+ if presenter.actions_for_record.any?
184
+ presenter.actions_for_record.map do |_, record_action|
185
+ next unless presenter.render_action?(record, record_action, params[:action])
186
+ next unless record_action.show(record)
187
+ if record_action.remote?
188
+ button_action_remote(record_action, presenter, record)
189
+ else
190
+ button_action(record_action, presenter, record)
195
191
  end
196
- end
192
+ end.reject(&:nil?).inject(:+)
193
+ else
194
+ ""
197
195
  end
198
- result
199
196
  end
200
197
 
201
198
  def button_action(action, presenter, record)
202
199
  label = t("#{presenter.model_name.underscore}.#{action.name}", default: t("carnival.#{action.name}"))
203
- path = action.path(presenter, :id => record.id)
200
+ path = action.path(presenter, id: record.id)
201
+
204
202
  if action.default_partial == :default
205
- "<a class='carnival-action-link #{label.parameterize}' href='#{path}'>#{label}</a>"
203
+ link_to label, path, class: "carnival-action-link #{label.parameterize}"
206
204
  elsif action.default_partial == :delete
207
- confirm = I18n.t("are_you_sure")
208
- "<a class='carnival-action-link apagar' data-confirm='#{confirm}' data-method='delete' href='#{path}' rel='nofollow'>#{label}</a>"
205
+ link_to label, path, class: 'carnival-action-link apagar', method: :delete, data: { confirm: I18n.t('are_you_sure') }
209
206
  end
210
207
  end
211
208
 
212
209
  def button_action_remote(action, presenter, record)
213
- name = action.name
214
210
  params = action.params
215
211
  label = t("#{presenter.model_name}.#{action.name}", default: t("carnival.#{action.name}"))
216
- path = action.path(presenter, :id => record.id)
212
+ path = action.path(presenter, id: record.id)
217
213
 
218
- success_callback = "#{name}_success_callback"
219
- if params[:success]
220
- success_callback = params[:success]
221
- end
222
-
223
- error_callback = "#{name}_error_callback"
224
- if params[:error]
225
- error_callback = params[:error]
226
- end
214
+ success_callback = params[:success] || "#{action.name}_success_callback"
215
+ error_callback = params[:error] || "#{action.name}_error_callback"
216
+ params[:show_overlay] = params[:show_overlay].presence || false
227
217
 
228
- data_overlay = ''
229
- if params[:show_overlay]
230
- data_overlay = 'data-carnival-show-overlay=true'
231
- end
218
+ remote_function = "Carnival.remoteFunction('#{path}', '#{success_callback}', '#{error_callback}', '#{params[:method]}', {} , #{params[:show_overlay]})"
232
219
 
233
- params[:show_overlay] = false if params[:show_overlay].nil?
234
-
235
- remote_function = "Carnival.remoteFunction(\"#{path}\", \"#{success_callback}\", \"#{error_callback}\", \"#{params[:method]}\", {} ,#{params[:show_overlay]})"
236
-
237
- "<a class='carnival-action-link editar' href='javascript:#{remote_function}'>#{label}</a>"
220
+ link_to label, "javascript: #{remote_function}", class: 'carnival-action-link editar'
238
221
  end
239
-
240
222
  end
241
223
  end
@@ -3,7 +3,8 @@ class AdminDateInput < SimpleForm::Inputs::Base
3
3
  include AdminBaseInput
4
4
 
5
5
  def input(wrapper_options)
6
- format = if column.type == :datetime then '%Y/%m/%d %H:%M' else '%Y/%m/%d' end
6
+ f = I18n.t('date.formats.default')
7
+ format = if column.type == :datetime then "#{f} %H:%M" else "#{f}" end
7
8
  default_input_html_options = {class: "#{column.type}picker",
8
9
  value: @builder.object.send(attribute_name).nil? ? "" : @builder.object.send(attribute_name).strftime(format)}
9
10
  options = merge_options(default_input_html_options, input_html_options)
@@ -9,7 +9,6 @@ module Carnival
9
9
  @path = params[:path] if params[:path].present?
10
10
  end
11
11
 
12
-
13
12
  def params
14
13
  @params
15
14
  end
@@ -19,7 +18,7 @@ module Carnival
19
18
  end
20
19
 
21
20
  def to_label
22
- I18n.t("#{@presenter.model_name}.#{name}")
21
+ I18n.t("#{@presenter.model_name}.#{name}")
23
22
  end
24
23
 
25
24
  end
@@ -66,6 +66,7 @@ module Carnival
66
66
  }
67
67
  end
68
68
  end
69
+
69
70
  def default_sortable?
70
71
  @params[:sortable] && @params[:sortable].class == Hash && @params[:sortable][:default] == true
71
72
  end
@@ -157,8 +158,8 @@ module Carnival
157
158
  end
158
159
 
159
160
  def sort_name
160
- return @params[:related_to].to_s if @params[:related_to].present?
161
- @name.to_s
161
+ return @params[:related_to].to_s if @params[:related_to].present?
162
+ @name.to_s
162
163
  end
163
164
 
164
165
  private
@@ -1,6 +1,7 @@
1
1
  # -*- encoding : utf-8 -*-
2
2
  module Carnival
3
3
  class BaseAdminPresenter
4
+ include Dsl
4
5
  include Rails.application.routes.url_helpers
5
6
 
6
7
  def initialize(params)
@@ -24,23 +25,6 @@ module Carnival
24
25
  self.class.to_s
25
26
  end
26
27
 
27
- @@index_as = {}
28
- def self.index_as(type)
29
- @@index_as[presenter_class_name] = type
30
- end
31
-
32
- @@actions = {}
33
- def self.action(name, params = {})
34
- @@actions[presenter_class_name] ||= {}
35
- @@actions[presenter_class_name][name] = Carnival::Action.new(name, params)
36
- end
37
-
38
- @@batch_actions = {}
39
- def self.batch_action(name, params = {})
40
- @@batch_actions[presenter_class_name] ||= {}
41
- @@batch_actions[presenter_class_name][name] = Carnival::BatchAction.new(self.new({}), name, params)
42
- end
43
-
44
28
  def has_batch_actions?
45
29
  if @@batch_actions[presenter_class_name].present?
46
30
  @@batch_actions[presenter_class_name].keys.size > 0
@@ -49,12 +33,6 @@ module Carnival
49
33
  end
50
34
  end
51
35
 
52
- @@items_per_page = {}
53
- def self.items_per_page(per_page)
54
- @@items_per_page[presenter_class_name] ||= {}
55
- @@items_per_page[presenter_class_name][:items_per_page] = per_page
56
- end
57
-
58
36
  def items_per_page
59
37
  @@items_per_page[presenter_class_name] ||= {}
60
38
  unless @@items_per_page[presenter_class_name][:items_per_page].present? and @@items_per_page[presenter_class_name][:items_per_page] > 0
@@ -63,16 +41,10 @@ module Carnival
63
41
  @@items_per_page[presenter_class_name][:items_per_page]
64
42
  end
65
43
 
66
- def index_as_table?
67
- index_as == :table
68
- end
69
-
70
- def index_as_list?
71
- index_as == :list
72
- end
73
-
74
- def index_as_grid?
75
- index_as == :grid
44
+ [:table, :list, :grid].each do |index_type|
45
+ define_method "index_as_#{index_type}?" do
46
+ index_as == index_type
47
+ end
76
48
  end
77
49
 
78
50
  def index_as
@@ -99,11 +71,6 @@ module Carnival
99
71
  @@actions[presenter_class_name].present? && @@actions[presenter_class_name][action].present?
100
72
  end
101
73
 
102
- @@model_names = {}
103
- @@fields = {}
104
- @@scopes = {}
105
- @@forms = {}
106
-
107
74
  def scopes
108
75
  @@scopes[presenter_class_name] || {}
109
76
  end
@@ -131,13 +98,16 @@ module Carnival
131
98
  end
132
99
 
133
100
  def form_for(action)
134
- form = Carnival::Form.new(action)
135
- form = @@forms[presenter_class_name][action] if @@forms[presenter_class_name].present? and @@forms[presenter_class_name][action].present?
101
+ if @@forms[presenter_class_name].present? &&
102
+ @@forms[presenter_class_name][action].present?
103
+ form = @@forms[presenter_class_name][action]
104
+ else
105
+ form = Carnival::Form.new(action)
106
+ end
136
107
  form.fields = fields_for_action(action)
137
108
  form
138
109
  end
139
110
 
140
-
141
111
  def model_name
142
112
  if @@model_names[presenter_class_name].nil?
143
113
  self.class.to_s.split("::").last().gsub("Presenter", "").underscore
@@ -194,33 +164,18 @@ module Carnival
194
164
  model_class.table_name
195
165
  end
196
166
 
197
- def searchable_fields
198
- searchable_fields = {}
199
- @@fields[presenter_class_name].each do |key, field|
200
- if relation_field? key
201
- field_name = "#{field.name.pluralize}.name"
202
- else
203
- field_name = "#{self.table_name}.#{field.name}"
204
- end
205
- searchable_fields[field_name] = field if field.searchable?
206
- end
207
- searchable_fields
208
- end
209
-
210
167
  def join_tables
211
- joins = []
212
- @@fields[presenter_class_name].each do |key, field|
213
- joins << field.association_name if relation_field? key.to_sym
168
+ @@fields[presenter_class_name].map do |key, field|
169
+ field.association_name if relation_field? key.to_sym
214
170
  end
215
- joins
216
171
  end
217
172
 
218
173
  def render_field?(field, action = nil)
219
- return true
174
+ true
220
175
  end
221
176
 
222
177
  def render_action?(record, record_action, action = nil)
223
- return true
178
+ true
224
179
  end
225
180
 
226
181
  def build_relation_field(field, model_object)
@@ -232,49 +187,32 @@ module Carnival
232
187
  end
233
188
 
234
189
  def must_render_field?(nested_in, field, model_object)
235
- must_render = true
236
- if nested_in.present?
237
- if field.as == :partial
238
- must_render = true
239
- elsif nested_in.class == model_object.send(field.name).class
240
- must_render = false
241
- elsif nested_in.class.name.underscore.split("/").last == field.name
242
- must_render = false
243
- end
190
+ return true unless nested_in.present?
191
+ if field.as == :partial
192
+ true
193
+ elsif nested_in.class == model_object.send(field.name).class ||
194
+ nested_in.class.name.underscore.split('/').last == field.name
195
+ false
196
+ else
197
+ true
244
198
  end
245
- return must_render
246
199
  end
247
200
 
248
201
  def default_scope
249
202
  return if scopes.empty?
250
- @@scopes[presenter_class_name].each do |key, scope|
251
- return scope if scope.default?
252
- end
253
- @@scopes[presenter_class_name].values.first
203
+ @@scopes[presenter_class_name].values.find(&:default?) ||
204
+ @@scopes[presenter_class_name].values.first
254
205
  end
255
206
 
256
207
  def default_sortable_field
257
- default_field = nil
258
- @@fields[presenter_class_name].each do |key, field|
259
- default_field = field if field.default_sortable?
260
- break
261
- end
262
- default_field = @@fields[presenter_class_name].first[1] if default_field.nil?
263
- default_field
208
+ @@fields[presenter_class_name].values.find(&:default_sortable?) ||
209
+ @@fields[presenter_class_name].values.first
264
210
  end
265
211
 
266
212
  def default_sort_direction
267
213
  default_sortable_field.default_sort_direction
268
214
  end
269
215
 
270
- def sortable_fields
271
- sortable_fields = {}
272
- @@fields[presenter_class_name].each do |key, field|
273
- sortable_fields[key] = field if field.sortable?
274
- end
275
- sortable_fields
276
- end
277
-
278
216
  def advanced_search_fields
279
217
  fields = @@fields[presenter_class_name]
280
218
  @advanced_search_parser.get_advanced_search_fields fields
@@ -348,14 +286,14 @@ module Carnival
348
286
  return nil if !relation_field?(field)
349
287
  relation_name = get_related_class_for_field(field)
350
288
  related = record.send(field.association_name)
351
- unless related.nil?
289
+ if related.present?
352
290
  if is_one_to_one_relation?(field)
353
- params = {:controller => "#{extract_namespace.downcase}/#{relation_name}", :action => :show, :id => related.id}
291
+ params = { controller: "#{extract_namespace.downcase}/#{relation_name}", action: :show, id: related.id }
354
292
  else
355
- params = {:controller => "#{extract_namespace.downcase}/#{get_association_from_field(field)}", :action => :index, :advanced_search => make_relation_advanced_query_url_options(field.name, record)}
293
+ params = { controller: "#{extract_namespace.downcase}/#{get_association_from_field(field)}", action: :index, advanced_search: make_relation_advanced_query_url_options(field.name, record) }
356
294
  end
357
- params = params.merge(:only_path => true)
358
- return generate_route_path params
295
+ params = params.merge(only_path: true)
296
+ generate_route_path params
359
297
  else
360
298
  '#'
361
299
  end
@@ -397,142 +335,59 @@ module Carnival
397
335
  def controller_to_field_sym field
398
336
  "#{extract_namespace}::#{field.to_s.classify.pluralize}Controller".constantize.send("new")
399
337
  end
338
+
400
339
  def load_dependent_select_options_path
401
340
  if extract_namespace.present?
402
341
  "/#{extract_namespace.downcase}/carnival-base/load_dependent_select_options"
403
342
  else
404
- "/carnival-base/load_dependent_select_options"
343
+ '/carnival-base/load_dependent_select_options'
405
344
  end
406
345
  end
407
346
 
408
347
  protected
348
+
409
349
  def make_relation_advanced_query_url_options(field, record)
410
350
  relation_model = @klass_service.get_association(field).klass.name.pluralize.underscore.split("/").last
411
351
  relation_field = @klass_service.get_association(field).foreign_key
412
352
  relation_value = record.id
413
- {"#{relation_model}.#{relation_field}" => relation_value}
353
+ { "#{relation_model}.#{relation_field}" => relation_value }
414
354
  end
415
355
 
416
356
  def filter_actions(default_actions, target)
417
357
  actions = {}
418
- return actions if !@@actions[presenter_class_name]
358
+ return actions unless @@actions[presenter_class_name]
419
359
 
420
360
  @@actions[presenter_class_name].each do |key, action|
421
- if default_actions.include?(key) || (action.target == target && key != :new && key != :csv && key != :pdf)
361
+ if default_actions.include?(key) || (action.target == target && key != :new && key != :csv)
422
362
  actions[key] = action
423
363
  end
424
364
  end
425
365
  actions
426
366
  end
427
367
 
428
- def presenter_class_name
429
- if self.class.name == "Class"
430
- self.to_s
368
+ def self.presenter_class_name
369
+ if self.class.name == 'Class'
370
+ to_s
431
371
  else
432
372
  self.class.name
433
373
  end
434
374
  end
435
375
 
436
- def parse_advanced_search_field search_field, field_param, records
437
- return records if not field_param["value"].present?
438
- return records if field_param["value"] == ""
439
-
440
- if relation_field?(search_field.to_sym)
441
- related_model = model_class.reflect_on_association(search_field.to_sym).klass.name.underscore
442
- foreign_key = model_class.reflect_on_association(search_field.to_sym).foreign_key
443
- if model_class.reflect_on_association(search_field.to_sym).macro == :belongs_to
444
- records = records.joins(related_model.split("/").last.to_sym)
445
- else
446
- records = records.joins(related_model.split("/").last.pluralize)
447
- end
448
- table = related_model.split("/").last.pluralize
449
- column = "id"
450
- else
451
- table = table_name
452
- column = search_field
453
- end
454
- full_column_query = "#{table}.#{column}"
455
- where_clause = nil
456
-
457
- case field_param["operator"]
458
- when "equal"
459
- if field_param["value"] == "nil"
460
- where_clause = "#{full_column_query} is null"
461
- else
462
- where_clause = "#{full_column_query} = '#{advanced_search_field_value_for_query(field_param["value"])}'"
463
- end
464
- when "like"
465
- where_clause = "#{full_column_query} like '%#{field_param["value"]}%'"
466
- when "greater_than"
467
- where_clause = "#{full_column_query} >= '#{field_param["value"]}'"
468
- when "less_than"
469
- where_clause = "#{full_column_query} <= '#{field_param["value"]}'"
470
- when "between"
471
- where_clause = "#{full_column_query} between '#{field_param["value"]}' and '#{field_param["value2"]}'"
472
- else
473
- where_clause = "#{full_column_query} = #{advanced_search_field_value_for_query(field_param["value"])}"
474
- end
475
- records = records.where(where_clause) if where_clause.present?
476
- records
477
- end
478
-
479
- def advanced_search_field_value_for_query(value)
480
- if "true" == value.downcase
481
- return "'t'"
482
- elsif "false" == value.downcase
483
- return "'f'"
484
- else
485
- "#{value}"
486
- end
376
+ def presenter_class_name
377
+ self.class.presenter_class_name
487
378
  end
488
379
 
489
380
  def is_namespaced?
490
- self.class.to_s.split("::").size > 0
381
+ self.class.to_s.split('::').size > 0
491
382
  end
492
383
 
493
384
  def extract_namespace
494
- namespace = ""
495
- arr = self.class.to_s.split("::")
496
- namespace = arr[0] if arr.size > 1
497
- namespace
498
- end
499
-
500
- def self.instantiate_element(container, klass, name, params)
501
- container[presenter_class_name] ||= {}
502
- container[presenter_class_name][name] = klass.new(name, params)
503
- end
504
-
505
- def self.scope(name, params = {})
506
- self.instantiate_element(@@scopes, Carnival::Scope, name.to_sym, params)
507
- end
508
-
509
- def self.field(name, params = {})
510
- self.instantiate_element(@@fields, Carnival::Field, name.to_sym, params)
511
- end
512
-
513
- def self.form(action, params = {})
514
- self.instantiate_element(@@forms, Carnival::Form, name.to_sym, params)
515
- end
516
-
517
- def self.model_name(name)
518
- @@model_names[presenter_class_name] = name
385
+ module_and_class = self.class.to_s.split('::')
386
+ module_and_class.size > 1 ? module_and_class.first : ''
519
387
  end
520
388
 
521
- def generate_route_path params
389
+ def generate_route_path(params)
522
390
  url_for(params) rescue nil
523
391
  end
524
-
525
- def self.presenter_class_name
526
- if self.class.name == "Class"
527
- self.to_s
528
- else
529
- self.class.name
530
- end
531
- end
532
-
533
- def current_user
534
- return @controller.current_user if @controller.respond_to?(:current_user)
535
- nil
536
- end
537
392
  end
538
393
  end