module Apipie::DSL::Common
Public Instance Methods
_apipie_define_validators(description)
click to toggle source
# File lib/apipie/dsl_definition.rb, line 233 def _apipie_define_validators(description) # [re]define method only if validation is turned on if description && (Apipie.configuration.validate == true || Apipie.configuration.validate == :implicitly || Apipie.configuration.validate == :explicitly) _apipie_save_method_params(description.method, description.params) unless instance_methods.include?(:apipie_validations) define_method(:apipie_validations) do method_params = self.class._apipie_get_method_params(action_name) if Apipie.configuration.validate_presence? method_params.each do |_, param| # check if required parameters are present raise ParamMissing.new(param) if param.required && !params.has_key?(param.name) end end if Apipie.configuration.validate_value? method_params.each do |_, param| # params validations param.validate(params[:"#{param.name}"]) if params.has_key?(param.name) end end # Only allow params passed in that are defined keys in the api # Auto skip the default params (format, controller, action) if Apipie.configuration.validate_key? params.reject{|k,_| %w[format controller action].include?(k.to_s) }.each_pair do |param, _| # params allowed if method_params.select {|_,p| p.name.to_s == param.to_s}.empty? self.class._apipie_handle_validate_key_error params, param end end end if Apipie.configuration.process_value? @api_params ||= {} method_params.each do |_, param| # params processing @api_params[param.as] = param.process_value(params[:"#{param.name}"]) if params.has_key?(param.name) end end end end if (Apipie.configuration.validate == :implicitly || Apipie.configuration.validate == true) old_method = instance_method(description.method) define_method(description.method) do |*args| apipie_validations # run the original method code old_method.bind(self).call(*args) end end end end
_apipie_get_method_params(method)
click to toggle source
# File lib/apipie/dsl_definition.rb, line 309 def _apipie_get_method_params(method) @method_params[method] end
_apipie_handle_validate_key_error(params, param)
click to toggle source
# File lib/apipie/dsl_definition.rb, line 295 def _apipie_handle_validate_key_error params, param if Apipie.configuration.action_on_non_validated_keys == :raise raise UnknownParam, param elsif Apipie.configuration.action_on_non_validated_keys == :skip params.delete(param) Rails.logger.warn(UnknownParam.new(param).to_s) end end
_apipie_save_method_params(method, params)
click to toggle source
# File lib/apipie/dsl_definition.rb, line 304 def _apipie_save_method_params(method, params) @method_params ||= {} @method_params[method] = params end
api_versions(*versions)
click to toggle source
# File lib/apipie/dsl_definition.rb, line 160 def api_versions(*versions) _apipie_dsl_data[:api_versions].concat(versions) end
Also aliased as: api_version
desc(description)
click to toggle source
Describe the next method.
Example:
desc "print hello world" def hello_world puts "hello world" end
# File lib/apipie/dsl_definition.rb, line 173 def desc(description) #:doc: return unless Apipie.active_dsl? if _apipie_dsl_data[:description] raise "Double method description." end _apipie_dsl_data[:description] = description end
Also aliased as: description, full_description
document(path)
click to toggle source
describe next method with document in given path in convension, these doc located under “#{Rails.root}/doc” Example: document “hello_world.md” def hello_world
puts "hello world"
end
# File lib/apipie/dsl_definition.rb, line 190 def document path content = File.open(File.join(Rails.root, Apipie.configuration.doc_path, path)).read desc content end
error(code_or_options, desc=nil, options={})
click to toggle source
Describe possible errors
Example:
error :desc => "speaker is sleeping", :code => 500, :meta => [:some, :more, :data] error 500, "speaker is sleeping" def hello_world return 500 if self.speaker.sleeping? puts "hello world" end
# File lib/apipie/dsl_definition.rb, line 221 def error(code_or_options, desc=nil, options={}) #:doc: return unless Apipie.active_dsl? _apipie_dsl_data[:errors] << [code_or_options, desc, options] end
formats(formats)
click to toggle source
Describe available request/response formats
formats ['json', 'jsonp', 'xml']
# File lib/apipie/dsl_definition.rb, line 198 def formats(formats) #:doc: return unless Apipie.active_dsl? _apipie_dsl_data[:formats] = formats end
header(header_name, description, options = {})
click to toggle source
Describe request header.
Headers can't be validated with config.validate_presence = true
Example:
header 'ClientId', "client-id" def show render :text => headers['HTTP_CLIENT_ID'] end
# File lib/apipie/dsl_definition.rb, line 322 def header(header_name, description, options = {}) #:doc return unless Apipie.active_dsl? _apipie_dsl_data[:headers] << { name: header_name, description: description, options: options } end
meta(meta)
click to toggle source
Describe additional metadata
meta :author => { :name => 'John', :surname => 'Doe' }
# File lib/apipie/dsl_definition.rb, line 206 def meta(meta) #:doc: _apipie_dsl_data[:meta] = meta end