module Sinatra::Backstage::REST::Routing
Public Class Methods
included(controller)
click to toggle source
# File lib/sinatra/backstage/rest/rest_routes.rb, line 16 def self.included(controller) controller.extend self end
Public Instance Methods
rest_get_all(klass, params = {})
click to toggle source
# File lib/sinatra/backstage/rest/rest_routes.rb, line 103 def rest_get_all(klass, params = {}) klass.all params.keys_to_sym end
rest_routes(klass, namespace, display_list = false)
click to toggle source
# File lib/sinatra/backstage/rest/rest_routes.rb, line 20 def rest_routes(klass, namespace, display_list = false) ## Routes ### get list get namespace do ## get format # puts "-- REST.Routing get namespace ( params = #{params})" format = params.delete('format') || 'html' # puts "-- REST.Routing get namespace after format ( params = #{params})" format = 'json' if request.accept.include_any?('text/json', 'application/json') ## get json options json_method = params.delete('json_method') json_opts = {:methods => ([json_method] || [])} ## get objects @objects = rest_get_all klass, params # puts "-- REST.Routing get namespace ( @objects = #{@objects})" # puts "-- REST.Routing get namespace ( @objects.to_a = #{@objects.to_a})" # puts "-- REST.Routing get namespace ( @objects.to_json = #{@objects.to_json})" # puts "-- REST.Routing get namespace ( @objects.to_a.to_json = #{@objects.to_a.to_json})" ## return case format when 'html' halt eval "#{settings.render_engine} '#{klass.demodulize.downcase}/list'" when 'json' halt @objects.to_json(json_opts) end error 406 end ### get add-form get "#{namespace}/new" do template = ["#{klass.demodulize.downcase}/new"] if display_list @objects = rest_get_all(klass) template.unshift "#{klass.demodulize.downcase}/list" end eval "#{settings.render_engine} ['#{template.join('\',\'')}']" end ### create object post "#{namespace}/new" do # puts "params = #{params}" # puts "-- rest_routes post namespace = #{namespace}" # puts "-- rest_routes post klass = #{klass}" # halt @errors = [] begin object = klass.create params[:object] redirect namespace rescue DataMapper::SaveFailureError => e puts e.resource.errors.inspect e.resource.errors.each do |error| puts "-- REST.Routing new ( error = #{error} )" @errors << error end @errors.flatten! end end get "#{namespace}/:id" do |id| @object = klass.get!(id) template = ["#{klass.demodulize.downcase}/edit"] if display_list @objects = rest_get_all(klass) template.unshift "#{klass.demodulize.downcase}/list" end eval "#{settings.render_engine} ['#{template.join('\',\'')}']" end ### update object put "#{namespace}/:id" do |id| klass.get!(id).update params[:object] redirect (display_list ? "#{namespace}/#{id}" : namespace) end ### delete object delete "#{namespace}/:id" do |id| klass.get!(id).destroy redirect namespace end end