require 'cuba_api' require 'ixtlan/configuration/resource' require 'ixtlan/configuration/serializer' require 'ixtlan/babel/params_filter' class CubaAPI module ResponseStatus def response_status( obj, options = {}) if options[:response_status] != false if obj.respond_to?( :errors ) && obj.errors.size > 0 res.status = 412 # Precondition Failed obj = obj.errors elsif req.post? res.status = 201 # Created res[ 'Location' ] = env[ 'SCRIPT_NAME' ] + "/#{obj.id}" if obj.respond_to? :id elsif req.delete? res.status = 204 # No Content obj = '' end end obj end def self.included( base ) base.prepend_aspect :response_status end end module InputFilter module ClassMethods def factory @_factory ||= Ixtlan::Babel::Factory.new end end def new_instance( clazz, context = nil ) filter = self.class.factory.new_params_filter( clazz ).use( context ) filter.new( parse_request_body ) end def params( clazz = nil, context = nil ) filter_params_and_keeps( clazz, context ) @_data[ 0 ] || {} end def keeps( clazz = nil, context = nil ) filter_params_and_keeps( clazz, context ) @_data[ 1 ] || {} end def filter_params_and_keeps( clazz, context ) if clazz @_data ||= begin filter = self.class.factory.new_filter( clazz ).use( context ) filter.filter_it( parse_request_body ) end end end private :filter_params_and_keeps def parse_request_body if env[ 'CONTENT_TYPE' ] == 'application/json' JSON.parse( req.body.read ) else {} end end private :parse_request_body end end CubaAPI.plugin CubaAPI::InputFilter CubaAPI.plugin CubaAPI::ResponseStatus module Ixtlan module Configuration class ConfigurationFilter < Ixtlan::Babel::ParamsFilter root 'configuration' add_context( :single, :keep => [ :updated_at ], :except => [:id, :created_at, :updated_at, :modified_by_id] ) end class Cuba < ::CubaAPI define do on get do write Configuration.instance end on post do updated_at = keeps( Configuration )[ :updated_at ] p keeps puts req.request_method config = Configuration.optimistic_get!( updated_at, Configuration.instance.id ) #config = Configuration.instance config.attributes = params config.modified_by = current_user if config.dirty? config.save write config end # on get, :id do |id| # write Configuration.get!( id ) # end # on get do # write Configuration.all # end # on post do # config = new_instance( Configuration ) # config.save # write config # end # on put, :id do |id| # updated_at = keeps( Configuration )[ :updated_at ] # config = Configuration.optimistic_get!( updated_at, # id ) # config.attributes = params # config.modified_by = current_user if config.dirty? # config.save # write config # end # on delete, :id do |id| # updated_at = keeps( Configuration )[ :updated_at ] # config = Configuration.optimistic_get( updated_at, # id ) # config.destroy # head 200 # end end end end end