lib/resource_controller/helpers/nested.rb in matid-resource_controller-0.6.7 vs lib/resource_controller/helpers/nested.rb in matid-resource_controller-0.7.0
- old
+ new
@@ -1,63 +1,68 @@
# Nested and Polymorphic Resource Helpers
#
module ResourceController
module Helpers
module Nested
- protected
+ protected
# Returns the relevant association proxy of the parent. (i.e. /posts/1/comments # => @post.comments)
#
def parent_association
@parent_association ||= parent_object.send(model_name.to_s.pluralize.to_sym)
end
-
+
# Returns the type of the current parent
#
def parent_type
@parent_type ||= parent_type_from_params || parent_type_from_request
end
-
+
# Returns the type of the current parent extracted from params
- #
+ #
def parent_type_from_params
[*belongs_to].find { |parent| !params["#{parent}_id".to_sym].nil? }
end
-
+
# Returns the type of the current parent extracted form a request path
- #
+ #
def parent_type_from_request
[*belongs_to].find { |parent| request.path.split('/').include? parent.to_s }
end
-
+
# Returns true/false based on whether or not a parent is present.
#
def parent?
!parent_type.nil?
end
-
+
# Returns true/false based on whether or not a parent is a singleton.
- #
+ #
def parent_singleton?
!parent_type_from_request.nil? && parent_type_from_params.nil?
end
-
+
# Returns the current parent param, if there is a parent. (i.e. params[:post_id])
def parent_param
params["#{parent_type}_id".to_sym]
end
-
+
# Like the model method, but for a parent relationship.
- #
+ #
def parent_model
parent_type.to_s.camelize.constantize
end
-
+
+ # Like the finder method, but for a parent relationship
+ def parent_finder
+ parent_model.respond_to?(:find_by_permalink) ? :find_by_permalink : :permalink
+ end
+
# Returns the current parent object if a parent object is present.
#
def parent_object
- parent? && !parent_singleton? ? parent_model.find(parent_param) : nil
+ parent? && !parent_singleton? ? parent_model.send(parent_finder, parent_param) : nil
end
-
+
# If there is a parent, returns the relevant association proxy. Otherwise returns model.
#
def end_of_association_chain
parent? ? parent_association : model
end