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