app/controllers/dry_crud/nestable.rb in dry_crud-3.0.0 vs app/controllers/dry_crud/nestable.rb in dry_crud-5.0.0
- old
+ new
@@ -1,34 +1,31 @@
# encoding: UTF-8
module DryCrud
+
# Provides functionality to nest controllers/resources.
# If a controller is nested, the parent classes and namespaces
# may be defined as an array in the +nesting+ class attribute.
#
# For example, a cities controller, nested in country and a admin
# namespace, may define this attribute as follows:
# self.nesting = :admin, Country
module Nestable
- extend ActiveSupport::Concern
# Adds the :nesting class attribute and parent helper methods
# to the including controller.
- included do
- class_attribute :nesting
+ def self.prepended(klass)
+ klass.class_attribute :nesting
- helper_method :parent, :parents
-
- alias_method_chain :path_args, :nesting
- alias_method_chain :model_scope, :nesting
+ klass.helper_method :parent, :parents
end
private
# Returns the direct parent ActiveRecord of the current request, if any.
def parent
- parents.select { |p| p.is_a?(ActiveRecord::Base) }.last
+ parents.reverse.find { |p| p.is_a?(ActiveRecord::Base) }
end
# Returns the parent entries of the current request, if any.
# These are ActiveRecords or namespace symbols, corresponding
# to the defined nesting attribute.
@@ -47,24 +44,25 @@
def parent_entry(clazz)
model_ivar_set(clazz.find(params["#{clazz.name.underscore}_id"]))
end
# An array of objects used in url_for and related functions.
- def path_args_with_nesting(last)
+ def path_args(last)
parents + [last]
end
# Uses the parent entry (if any) to constrain the model scope.
- def model_scope_with_nesting
+ def model_scope
if parent.present?
parent_scope
else
- model_scope_without_nesting
+ super
end
end
# The model scope for the current parent resource.
def parent_scope
parent.send(model_class.name.underscore.pluralize)
end
+
end
end