class Sinatra::RestApi::Actions
Action
Constants
Public Class Methods
create( route_args, params, mapping )
click to toggle source
# File lib/sinatra-rest-api/actions.rb, line 22 def self.create( route_args, params, mapping ) unless route_args[:request].form_data? route_args[:request].body.rewind params.merge!( Provider.settings[:request_type].eql?( :json ) ? JSON.parse( route_args[:request].body.read ) : route_args[:request].body.read ) end params[:_data] = {} resource = route_args[:resource] if !params[resource].nil? && params[resource].is_a?( Hash ) cols = mapping[:columns].call( nil ) + mapping[:relations].call( nil ).map { |rel| "#{rel}_attributes" } + mapping[:extra_fields].call( nil ) cols.delete( 'id' ) # TODO: option to set id field name params[:_data] = params[resource].select { |key, _valye| cols.include? key } # params[:_data] = params[resource] params.delete( resource ) end # params[:_data]['created_at'] = Time.now.strftime( '%F %T' ).to_s # params[:_data]['updated_at'] = Time.now.strftime( '%F %T' ).to_s result = mapping[:create].call( params ) # route_args[:response].headers['Location'] = '/' # TODO: todo [ 201, result.to_json ] end
delete( _route_args, params, mapping )
click to toggle source
# File lib/sinatra-rest-api/actions.rb, line 43 def self.delete( _route_args, params, mapping ) mapping[:delete].call( params ) [ 200, DONE.to_json ] end
list( route_args, params, mapping )
click to toggle source
# File lib/sinatra-rest-api/actions.rb, line 48 def self.list( route_args, params, mapping ) # TODO: option to enable/disable X-Total-Count ? params[:_where] = params[:_where].nil? ? {} : JSON.parse( params[:_where] ) route_args[:response].headers['X-Total-Count'] = mapping[:count].call( params ).to_s result = mapping[:list].call( params, route_args[:fields] ) result = result.limit( route_args[:options][:limit].to_i ) if route_args[:options].include?( :limit ) [ 200, result.to_json( include: route_args[:options].include?( :include ) ? route_args[:options][:include] : mapping[:relations].call( nil ) ) ] end
other( _route_args, params, mapping )
click to toggle source
# File lib/sinatra-rest-api/actions.rb, line 57 def self.other( _route_args, params, mapping ) action = params[:_action] raise( APIError, 'Action not implemented' ) if mapping[action].nil? ret = mapping[action].call( params ) [ 200, ret.nil? ? DONE.to_json : ret.to_json ] end
read( route_args, params, mapping )
click to toggle source
# File lib/sinatra-rest-api/actions.rb, line 64 def self.read( route_args, params, mapping ) result = mapping[:read].call( params ) [ 200, result.to_json( include: route_args[:options].include?( :include ) ? route_args[:options][:include] : mapping[:relations].call( nil ) ) ] end
update( route_args, params, mapping )
click to toggle source
# File lib/sinatra-rest-api/actions.rb, line 69 def self.update( route_args, params, mapping ) unless route_args[:request].form_data? route_args[:request].body.rewind params.merge!( Provider.settings[:request_type].eql?( :json ) ? JSON.parse( route_args[:request].body.read ) : route_args[:request].body.read ) end params[:_data] = {} resource = route_args[:resource] if !params[resource].nil? && params[resource].is_a?( Hash ) # params[resource].delete( 'id' ) # TODO: option to set id field name # params[:_data] = OpenStruct.new( params[resource] ) cols = mapping[:columns].call( nil ) + mapping[:relations].call( nil ).map { |rel| "#{rel}_attributes" } + mapping[:extra_fields].call( nil ) # TODO: consider relations _ids cols.delete( 'id' ) # TODO: option to set id field name params[:_data] = params[resource].select { |key, _valye| cols.include? key } params.delete( resource ) end mapping[:update].call( params ) [ 200, DONE.to_json ] end