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