rails_admin 1.0.0.rc → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of rails_admin might be problematic. Click here for more details.

Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +1 -2
  3. data/README.md +1 -14
  4. data/app/assets/javascripts/rails_admin/ra.filtering-multiselect.js +15 -10
  5. data/app/assets/javascripts/rails_admin/ra.filtering-select.js +205 -110
  6. data/app/assets/javascripts/rails_admin/ra.remote-form.js +1 -4
  7. data/app/controllers/rails_admin/application_controller.rb +5 -5
  8. data/app/controllers/rails_admin/main_controller.rb +2 -2
  9. data/app/helpers/rails_admin/application_helper.rb +2 -2
  10. data/app/helpers/rails_admin/form_builder.rb +9 -2
  11. data/app/helpers/rails_admin/main_helper.rb +1 -1
  12. data/app/views/layouts/rails_admin/application.html.haml +1 -0
  13. data/app/views/rails_admin/main/_delete_notice.html.haml +14 -9
  14. data/app/views/rails_admin/main/index.html.haml +2 -2
  15. data/config/initializers/active_record_extensions.rb +2 -2
  16. data/config/locales/rails_admin.en.yml +1 -0
  17. data/lib/rails_admin/abstract_model.rb +6 -7
  18. data/lib/rails_admin/adapters/active_record.rb +30 -11
  19. data/lib/rails_admin/adapters/mongoid.rb +2 -2
  20. data/lib/rails_admin/adapters/mongoid/association.rb +2 -2
  21. data/lib/rails_admin/adapters/mongoid/extension.rb +1 -1
  22. data/lib/rails_admin/adapters/mongoid/property.rb +1 -1
  23. data/lib/rails_admin/bootstrap-sass.rb +1 -3
  24. data/lib/rails_admin/bootstrap-sass/compass_functions.rb +1 -1
  25. data/lib/rails_admin/config.rb +12 -8
  26. data/lib/rails_admin/config/actions.rb +1 -1
  27. data/lib/rails_admin/config/actions/base.rb +3 -4
  28. data/lib/rails_admin/config/actions/bulk_delete.rb +1 -3
  29. data/lib/rails_admin/config/actions/index.rb +3 -5
  30. data/lib/rails_admin/config/configurable.rb +4 -6
  31. data/lib/rails_admin/config/fields/association.rb +1 -1
  32. data/lib/rails_admin/config/fields/base.rb +15 -26
  33. data/lib/rails_admin/config/fields/factories/carrierwave.rb +1 -1
  34. data/lib/rails_admin/config/fields/types.rb +1 -1
  35. data/lib/rails_admin/config/fields/types/active_record_enum.rb +17 -2
  36. data/lib/rails_admin/config/fields/types/file_upload.rb +1 -1
  37. data/lib/rails_admin/config/fields/types/has_many_association.rb +1 -1
  38. data/lib/rails_admin/config/fields/types/polymorphic_association.rb +1 -1
  39. data/lib/rails_admin/config/fields/types/string.rb +6 -5
  40. data/lib/rails_admin/config/fields/types/text.rb +3 -3
  41. data/lib/rails_admin/config/hideable.rb +1 -1
  42. data/lib/rails_admin/config/inspectable.rb +39 -0
  43. data/lib/rails_admin/config/model.rb +4 -17
  44. data/lib/rails_admin/config/sections/base.rb +4 -17
  45. data/lib/rails_admin/engine.rb +3 -2
  46. data/lib/rails_admin/extension.rb +4 -4
  47. data/lib/rails_admin/extensions/paper_trail/auditing_adapter.rb +10 -2
  48. data/lib/rails_admin/extensions/pundit/authorization_adapter.rb +11 -1
  49. data/lib/rails_admin/support/datetime.rb +1 -1
  50. data/lib/rails_admin/version.rb +1 -1
  51. metadata +7 -6
@@ -91,10 +91,7 @@
91
91
  dialog.find('.modal-body').html(data.responseText);
92
92
  widget._bindFormEvents();
93
93
  } else {
94
- // responseText may contain redundant try-catch clause added by remotipart
95
- // https://github.com/JangoSteve/remotipart/blob/c08d61137ee18e0e78eb3cd9ca3030479fd101f1/lib/remotipart/render_overrides.rb#L17
96
- var responseText = data.responseText.replace(/^try{[^}]+}catch\(err\){[^}]+}/, '');
97
- var json = $.parseJSON(responseText);
94
+ var json = $.parseJSON(data.responseText);
98
95
  var option = '<option value="' + json.id + '" selected>' + json.label + '</option>';
99
96
  var select = widget.element.find('select').filter(":hidden");
100
97
 
@@ -21,13 +21,13 @@ module RailsAdmin
21
21
 
22
22
  def get_model
23
23
  @model_name = to_model_name(params[:model_name])
24
- fail(RailsAdmin::ModelNotFound) unless (@abstract_model = RailsAdmin::AbstractModel.new(@model_name))
25
- fail(RailsAdmin::ModelNotFound) if (@model_config = @abstract_model.config).excluded?
24
+ raise(RailsAdmin::ModelNotFound) unless (@abstract_model = RailsAdmin::AbstractModel.new(@model_name))
25
+ raise(RailsAdmin::ModelNotFound) if (@model_config = @abstract_model.config).excluded?
26
26
  @properties = @abstract_model.properties
27
27
  end
28
28
 
29
29
  def get_object
30
- fail(RailsAdmin::ObjectNotFound) unless (@object = @abstract_model.get(params[:id]))
30
+ raise(RailsAdmin::ObjectNotFound) unless (@object = @abstract_model.get(params[:id]))
31
31
  end
32
32
 
33
33
  def to_model_name(param)
@@ -56,8 +56,8 @@ module RailsAdmin
56
56
  instance_eval(&RailsAdmin::Config.audit_with)
57
57
  end
58
58
 
59
- def user_for_paper_trail
60
- _current_user.try(:id) || _current_user
59
+ def rails_admin_controller?
60
+ true
61
61
  end
62
62
 
63
63
  rescue_from RailsAdmin::ObjectNotFound do
@@ -93,7 +93,7 @@ module RailsAdmin
93
93
  return unless target_params.present?
94
94
  fields = visible_fields(action, model_config)
95
95
  allowed_methods = fields.collect(&:allowed_methods).flatten.uniq.collect(&:to_s) << 'id' << '_destroy'
96
- fields.each { |field| field.parse_input(target_params) }
96
+ fields.each { |field| field.parse_input(target_params) }
97
97
  target_params.slice!(*allowed_methods)
98
98
  target_params.permit! if target_params.respond_to?(:permit!)
99
99
  fields.select(&:nested_form).each do |association|
@@ -110,7 +110,7 @@ module RailsAdmin
110
110
 
111
111
  respond_to do |format|
112
112
  format.html { render whereto, status: :not_acceptable }
113
- format.js { render whereto, layout: false, status: :not_acceptable }
113
+ format.js { render whereto, layout: false, status: :not_acceptable }
114
114
  end
115
115
  end
116
116
 
@@ -47,8 +47,8 @@ module RailsAdmin
47
47
  if defined?(Devise)
48
48
  scope = Devise::Mapping.find_scope!(_current_user)
49
49
  main_app.send("destroy_#{scope}_session_path") rescue false
50
- else
51
- main_app.logout_path if main_app.respond_to?(:logout_path)
50
+ elsif main_app.respond_to?(:logout_path)
51
+ main_app.logout_path
52
52
  end
53
53
  end
54
54
 
@@ -20,10 +20,17 @@ module RailsAdmin
20
20
  end
21
21
 
22
22
  def fieldset_for(fieldset, nested_in)
23
- return unless (fields = fieldset.with(form: self, object: @object, view: @template, controller: @template.controller).visible_fields).length > 0
23
+ fields = fieldset.with(
24
+ form: self,
25
+ object: @object,
26
+ view: @template,
27
+ controller: @template.controller,
28
+ ).visible_fields
29
+ return if fields.empty?
30
+
24
31
  @template.content_tag :fieldset do
25
32
  contents = []
26
- contents << @template.content_tag(:legend, %(<i class="icon-chevron-#{(fieldset.active? ? 'down' : 'right')}"></i> #{fieldset.label}).html_safe, style: "#{fieldset.name == :default ? 'display:none' : ''}")
33
+ contents << @template.content_tag(:legend, %(<i class="icon-chevron-#{(fieldset.active? ? 'down' : 'right')}"></i> #{fieldset.label}).html_safe, style: fieldset.name == :default ? 'display:none' : '')
27
34
  contents << @template.content_tag(:p, fieldset.help) if fieldset.help.present?
28
35
  contents << fields.collect { |field| field_wrapper_for(field, nested_in) }.join
29
36
  contents.join.html_safe
@@ -63,7 +63,7 @@ module RailsAdmin
63
63
  filter_name = filter_for_field.keys.first
64
64
  filter_hash = filter_for_field.values.first
65
65
  unless (field = filterable_fields.find { |f| f.name == filter_name.to_sym })
66
- fail "#{filter_name} is not currently filterable; filterable fields are #{filterable_fields.map(&:name).join(', ')}"
66
+ raise "#{filter_name} is not currently filterable; filterable fields are #{filterable_fields.map(&:name).join(', ')}"
67
67
  end
68
68
  case field.type
69
69
  when :enum
@@ -3,6 +3,7 @@
3
3
  %head
4
4
  %meta{content: "IE=edge", "http-equiv" => "X-UA-Compatible"}
5
5
  %meta{content: "text/html; charset=utf-8", "http-equiv" => "Content-Type"}
6
+ %meta{content: "width=device-width, initial-scale=1", name: "viewport; charset=utf-8"}
6
7
  %meta{content: "NONE,NOARCHIVE", name: "robots"}
7
8
  = csrf_meta_tag
8
9
  = stylesheet_link_tag "rails_admin/rails_admin.css", media: :all
@@ -8,12 +8,17 @@
8
8
  - else
9
9
  = wording
10
10
  %ul
11
- - @abstract_model.each_associated_children(object) do |association, child|
12
- %li
13
- - child_config = RailsAdmin.config(child)
14
- = @abstract_model.model.human_attribute_name association.name
15
- - wording = child.send(child_config.object_label_method)
16
- - if child.id && (show_action = action(:show, child_config.abstract_model, child))
17
- = link_to(wording, url_for(action: show_action.action_name, model_name: child_config.abstract_model.to_param, id: child.id), class: 'pjax')
18
- - else
19
- = wording
11
+ - @abstract_model.each_associated_children(object) do |association, children|
12
+ - humanized_association = @abstract_model.model.human_attribute_name association.name
13
+ - limit = children.count > 12 ? 10 : children.count
14
+ - children.first(limit).each do |child|
15
+ = content_tag :li, class: dom_class(child) do
16
+ - child_config = RailsAdmin.config(child)
17
+ = humanized_association.singularize
18
+ - wording = child.send(child_config.object_label_method)
19
+ - if child.id && (show_action = action(:show, child_config.abstract_model, child))
20
+ = link_to(wording, url_for(action: show_action.action_name, model_name: child_config.abstract_model.to_param, id: child.id), class: 'pjax')
21
+ - else
22
+ = wording
23
+ - if children.count > limit
24
+ %li= t('admin.misc.more', count: children.count - limit, models_name: humanized_association)
@@ -51,9 +51,9 @@
51
51
  .input-group
52
52
  %input.form-control.input-small{name: "query", type: "search", value: query, placeholder: t("admin.misc.filter")}
53
53
  %span.input-group-btn
54
- %button.btn.btn-primary{type: "submit", :'data-disable-with' => "<i class='icon-white icon-refresh'></i> ".html_safe + t("admin.misc.refresh")}
54
+ %button.btn.btn-primary{type: 'submit', :'data-disable-with' => '<i class="icon-white icon-refresh"></i> '.html_safe + t('admin.misc.refresh')}
55
55
  %i.icon-white.icon-refresh
56
- = t("admin.misc.refresh")
56
+ = t('admin.misc.refresh')
57
57
  %button#remove_filter.btn.btn-info{title: "Reset filters"}
58
58
  %i.icon-white.icon-remove
59
59
  - if export_action
@@ -6,11 +6,11 @@ if defined?(::ActiveRecord)
6
6
  end
7
7
 
8
8
  def rails_admin_default_object_label_method
9
- self.new_record? ? "new #{self.class}" : "#{self.class} ##{id}"
9
+ new_record? ? "new #{self.class}" : "#{self.class} ##{id}"
10
10
  end
11
11
 
12
12
  def safe_send(value)
13
- if self.has_attribute?(value)
13
+ if has_attribute?(value)
14
14
  read_attribute(value)
15
15
  else
16
16
  send(value)
@@ -44,6 +44,7 @@ en:
44
44
  navigation_static_label: "Links"
45
45
  log_out: "Log out"
46
46
  ago: "ago"
47
+ more: "Plus %{count} more %{models_name}"
47
48
  flash:
48
49
  successful: "%{name} successfully %{action}"
49
50
  error: "%{name} failed to be %{action}"
@@ -87,12 +87,11 @@ module RailsAdmin
87
87
  case association.type
88
88
  when :has_one
89
89
  if child = object.send(association.name)
90
- yield(association, child)
90
+ yield(association, [child])
91
91
  end
92
92
  when :has_many
93
- object.send(association.name).each do |child| # rubocop:disable ShadowingOuterLocalVariable
94
- yield(association, child)
95
- end
93
+ children = object.send(association.name)
94
+ yield(association, Array.new(children))
96
95
  end
97
96
  end
98
97
  end
@@ -147,7 +146,7 @@ module RailsAdmin
147
146
  end
148
147
 
149
148
  def build_statement_for_type
150
- fail('You must override build_statement_for_type in your StatementBuilder')
149
+ raise('You must override build_statement_for_type in your StatementBuilder')
151
150
  end
152
151
 
153
152
  def build_statement_for_integer_decimal_or_float
@@ -185,11 +184,11 @@ module RailsAdmin
185
184
  end
186
185
 
187
186
  def unary_operators
188
- fail('You must override unary_operators in your StatementBuilder')
187
+ raise('You must override unary_operators in your StatementBuilder')
189
188
  end
190
189
 
191
190
  def range_filter(_min, _max)
192
- fail('You must override range_filter in your StatementBuilder')
191
+ raise('You must override range_filter in your StatementBuilder')
193
192
  end
194
193
 
195
194
  class FilteringDuration
@@ -6,7 +6,7 @@ require 'rails_admin/adapters/active_record/property'
6
6
  module RailsAdmin
7
7
  module Adapters
8
8
  module ActiveRecord
9
- DISABLED_COLUMN_TYPES = [:tsvector, :blob, :binary, :spatial, :hstore, :geometry]
9
+ DISABLED_COLUMN_TYPES = [:tsvector, :blob, :binary, :spatial, :hstore, :geometry].freeze
10
10
 
11
11
  def new(params = {})
12
12
  AbstractObject.new(model.new(params))
@@ -56,8 +56,8 @@ module RailsAdmin
56
56
  def properties
57
57
  columns = model.columns.reject do |c|
58
58
  c.type.blank? ||
59
- DISABLED_COLUMN_TYPES.include?(c.type.to_sym) ||
60
- c.try(:array)
59
+ DISABLED_COLUMN_TYPES.include?(c.type.to_sym) ||
60
+ c.try(:array)
61
61
  end
62
62
  columns.collect do |property|
63
63
  Property.new(property, model)
@@ -99,11 +99,12 @@ module RailsAdmin
99
99
 
100
100
  def add(field, value, operator)
101
101
  field.searchable_columns.flatten.each do |column_infos|
102
- if value.is_a?(Array)
103
- value = value.map { |v| field.parse_value(v) }
104
- else
105
- value = field.parse_value(value)
106
- end
102
+ value =
103
+ if value.is_a?(Array)
104
+ value.map { |v| field.parse_value(v) }
105
+ else
106
+ field.parse_value(value)
107
+ end
107
108
  statement, value1, value2 = StatementBuilder.new(column_infos[:column], column_infos[:type], value, operator).to_statement
108
109
  @statements << statement if statement.present?
109
110
  @values << value1 unless value1.nil?
@@ -115,7 +116,7 @@ module RailsAdmin
115
116
 
116
117
  def build
117
118
  scope = @scope.where(@statements.join(' OR '), *@values)
118
- scope = scope.references(*(@tables.uniq)) if @tables.any?
119
+ scope = scope.references(*@tables.uniq) if @tables.any?
119
120
  scope
120
121
  end
121
122
  end
@@ -154,6 +155,17 @@ module RailsAdmin
154
155
  protected
155
156
 
156
157
  def unary_operators
158
+ case @type
159
+ when :boolean
160
+ boolean_unary_operators
161
+ else
162
+ generic_unary_operators
163
+ end
164
+ end
165
+
166
+ private
167
+
168
+ def generic_unary_operators
157
169
  {
158
170
  '_blank' => ["(#{@column} IS NULL OR #{@column} = '')"],
159
171
  '_present' => ["(#{@column} IS NOT NULL AND #{@column} != '')"],
@@ -164,7 +176,14 @@ module RailsAdmin
164
176
  }
165
177
  end
166
178
 
167
- private
179
+ def boolean_unary_operators
180
+ generic_unary_operators.merge(
181
+ '_blank' => ["(#{@column} IS NULL)"],
182
+ '_empty' => ["(#{@column} IS NULL)"],
183
+ '_present' => ["(#{@column} IS NOT NULL)"],
184
+ '_not_empty' => ["(#{@column} IS NOT NULL)"],
185
+ )
186
+ end
168
187
 
169
188
  def range_filter(min, max)
170
189
  if min && max
@@ -211,7 +230,7 @@ module RailsAdmin
211
230
  when 'ends_with'
212
231
  "%#{@value.downcase}"
213
232
  when 'is', '='
214
- "#{@value.downcase}"
233
+ @value.downcase
215
234
  else
216
235
  return
217
236
  end
@@ -8,7 +8,7 @@ require 'rails_admin/adapters/mongoid/bson'
8
8
  module RailsAdmin
9
9
  module Adapters
10
10
  module Mongoid
11
- DISABLED_COLUMN_TYPES = %w(Range Moped::BSON::Binary BSON::Binary Mongoid::Geospatial::Point)
11
+ DISABLED_COLUMN_TYPES = %w(Range Moped::BSON::Binary BSON::Binary Mongoid::Geospatial::Point).freeze
12
12
 
13
13
  def parse_object_id(value)
14
14
  Bson.parse_object_id(value)
@@ -190,7 +190,7 @@ module RailsAdmin
190
190
  when String
191
191
  field_name, collection_name = options[:sort].split('.').reverse
192
192
  if collection_name && collection_name != table_name
193
- fail('sorting by associated model column is not supported in Non-Relational databases')
193
+ raise('sorting by associated model column is not supported in Non-Relational databases')
194
194
  end
195
195
  when Symbol
196
196
  field_name = options[:sort].to_s
@@ -28,7 +28,7 @@ module RailsAdmin
28
28
  when :has_and_belongs_to_many, :references_and_referenced_in_many
29
29
  :has_and_belongs_to_many
30
30
  else
31
- fail("Unknown association type: #{macro.inspect}")
31
+ raise("Unknown association type: #{macro.inspect}")
32
32
  end
33
33
  end
34
34
 
@@ -83,7 +83,7 @@ module RailsAdmin
83
83
  def nested_options
84
84
  nested = nested_attributes_options.try { |o| o[name] }
85
85
  if !nested && [:embeds_one, :embeds_many].include?(macro.to_sym) && !association.cyclic
86
- fail <<-MSG.gsub(/^\s+/, '')
86
+ raise <<-MSG.gsub(/^\s+/, '')
87
87
  Embbeded association without accepts_nested_attributes_for can't be handled by RailsAdmin,
88
88
  because embedded model doesn't have top-level access.
89
89
  Please add `accepts_nested_attributes_for :#{association.name}' line to `#{model}' model.
@@ -16,7 +16,7 @@ module RailsAdmin
16
16
  end
17
17
 
18
18
  def rails_admin_default_object_label_method
19
- self.new_record? ? "new #{self.class}" : "#{self.class} ##{id}"
19
+ new_record? ? "new #{self.class}" : "#{self.class} ##{id}"
20
20
  end
21
21
 
22
22
  def safe_send(value)
@@ -2,7 +2,7 @@ module RailsAdmin
2
2
  module Adapters
3
3
  module Mongoid
4
4
  class Property
5
- STRING_TYPE_COLUMN_NAMES = [:name, :title, :subject]
5
+ STRING_TYPE_COLUMN_NAMES = [:name, :title, :subject].freeze
6
6
  attr_reader :property, :model
7
7
 
8
8
  def initialize(property, model)
@@ -14,15 +14,13 @@ module RailsAdmin
14
14
  require 'sass-rails' if rails?
15
15
 
16
16
  unless rails? || compass?
17
- fail(Bootstrap::FrameworkNotFound.new('bootstrap-sass requires either Rails > 3.1 or Compass, neither of which are loaded'))
17
+ raise(Bootstrap::FrameworkNotFound.new('bootstrap-sass requires either Rails > 3.1 or Compass, neither of which are loaded'))
18
18
  end
19
19
 
20
20
  stylesheets = File.expand_path(File.join('..', 'vendor', 'assets', 'stylesheets'))
21
21
  ::Sass.load_paths << stylesheets
22
22
  end
23
23
 
24
- private
25
-
26
24
  def self.asset_pipeline?
27
25
  defined?(::Sprockets)
28
26
  end
@@ -8,7 +8,7 @@ module Sass
8
8
  image_url(source, Sass::Script::Bool.new(true))
9
9
  else
10
10
  # Revert to the old compass-agnostic path determination
11
- asset_sans_quotes = source.value.gsub('"', '')
11
+ asset_sans_quotes = source.value.delete('"')
12
12
  Sass::Script::String.new("/images/#{asset_sans_quotes}", :string)
13
13
  end
14
14
  end
@@ -110,11 +110,13 @@ module RailsAdmin
110
110
  def audit_with(*args, &block)
111
111
  extension = args.shift
112
112
  if extension
113
+ klass = RailsAdmin::AUDITING_ADAPTERS[extension]
114
+ klass.setup if klass.respond_to? :setup
113
115
  @audit = proc do
114
- @auditing_adapter = RailsAdmin::AUDITING_ADAPTERS[extension].new(*([self] + args).compact)
116
+ @auditing_adapter = klass.new(*([self] + args).compact)
115
117
  end
116
- else
117
- @audit = block if block
118
+ elsif block
119
+ @audit = block
118
120
  end
119
121
  @audit || DEFAULT_AUDIT
120
122
  end
@@ -145,11 +147,13 @@ module RailsAdmin
145
147
  def authorize_with(*args, &block)
146
148
  extension = args.shift
147
149
  if extension
150
+ klass = RailsAdmin::AUTHORIZATION_ADAPTERS[extension]
151
+ klass.setup if klass.respond_to? :setup
148
152
  @authorize = proc do
149
- @authorization_adapter = RailsAdmin::AUTHORIZATION_ADAPTERS[extension].new(*([self] + args).compact)
153
+ @authorization_adapter = klass.new(*([self] + args).compact)
150
154
  end
151
- else
152
- @authorize = block if block
155
+ elsif block
156
+ @authorize = block
153
157
  end
154
158
  @authorize || DEFAULT_AUTHORIZE
155
159
  end
@@ -193,7 +197,7 @@ module RailsAdmin
193
197
  if %w(default like starts_with ends_with is =).include? operator
194
198
  @default_search_operator = operator
195
199
  else
196
- fail(ArgumentError.new("Search operator '#{operator}' not supported"))
200
+ raise(ArgumentError.new("Search operator '#{operator}' not supported"))
197
201
  end
198
202
  end
199
203
 
@@ -283,7 +287,7 @@ module RailsAdmin
283
287
  @show_gravatar = true
284
288
  @navigation_static_links = {}
285
289
  @navigation_static_label = nil
286
- @parent_controller = '::ApplicationController'
290
+ @parent_controller = '::ActionController::Base'
287
291
  RailsAdmin::Config::Actions.reset
288
292
  end
289
293
 
@@ -96,7 +96,7 @@ module RailsAdmin
96
96
  action.instance_eval(&block) if block
97
97
  @@actions ||= []
98
98
  if action.custom_key.in?(@@actions.collect(&:custom_key))
99
- fail "Action #{action.custom_key} already exists. Please change its custom key."
99
+ raise "Action #{action.custom_key} already exists. Please change its custom key."
100
100
  else
101
101
  @@actions << action
102
102
  end
@@ -115,12 +115,11 @@ module RailsAdmin
115
115
 
116
116
  # Breadcrumb parent
117
117
  register_instance_option :breadcrumb_parent do
118
- case
119
- when root?
118
+ if root?
120
119
  [:dashboard]
121
- when collection?
120
+ elsif collection?
122
121
  [:index, bindings[:abstract_model]]
123
- when member?
122
+ elsif member?
124
123
  [:show, bindings[:abstract_model], bindings[:object]]
125
124
  end
126
125
  end