lib/classy_resources.rb in giraffesoft-classy_resources-0.0.1 vs lib/classy_resources.rb in giraffesoft-classy_resources-0.1.0

- old
+ new

@@ -9,14 +9,31 @@ def define_resource(*options) ResourceBuilder.new(self, *options) end - def collection_url_for(resource, format) - "/#{resource}.#{format}" + def load_collection(resource, parent = nil) + parent.nil? ? load_shallow_collection(resource) : load_nested_collection(resource, parent) end + def create_object(resource, object_params, parent = nil) + parent.nil? ? create_shallow_object(resource, object_params) : create_nested_object(resource, object_params, parent) + end + + def load_parent_object(parent) + load_object(parent, params[parent_id_name(parent)]) + end + + def parent_id_name(parent) + :"#{parent.to_s.singularize}_id" + end + + def collection_url_for(resource, format, parent = nil) + parent = parent.nil? ? "" : "/#{parent}/:#{parent_id_name(parent)}" + [parent, "/#{resource}.#{format}"].join + end + def object_route_url(resource, format) "/#{resource}/:id.#{format}" end def object_url_for(resource, format, object) @@ -55,44 +72,46 @@ end end protected def define_collection_get(resource, format) - get collection_url_for(resource, format) do + parent = options[:parent] + get collection_url_for(resource, format, parent) do set_content_type(format) - serialize(load_collection(resource), format) + serialize(load_collection(resource, parent), format) end end def define_collection_post(resource, format) - post collection_url_for(resource, format) do + parent = options[:parent] + post collection_url_for(resource, format, parent) do set_content_type(format) - object = create_object(resource, params[resource.to_s.singularize]) + object = create_object(resource, params[resource.to_s.singularize] || {}, parent) redirect object_url_for(resource, format, object) end end def define_member_get(resource, format) get object_route_url(resource, format) do set_content_type(format) - object = find_object(resource, params[:id]) + object = load_object(resource, params[:id]) serialize(object, format) end end def define_member_put(resource, format) put object_route_url(resource, format) do set_content_type(format) - object = find_object(resource, params[:id]) + object = load_object(resource, params[:id]) update_object(object, params[resource.to_s.singularize]) serialize(object, format) end end def define_member_delete(resource, format) delete object_route_url(resource, format) do set_content_type(format) - object = find_object(resource, params[:id]) + object = load_object(resource, params[:id]) destroy_object(object) "" end end end