Module: Apipie::DSL::Common

Included in:
Concern, Controller, ResourceDescriptionDsl
Defined in:
lib/apipie/dsl_definition.rb

Instance Method Summary collapse

Instance Method Details

#_apipie_define_validators(description) ⇒ Object



191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
# File 'lib/apipie/dsl_definition.rb', line 191

def _apipie_define_validators(description)
  # redefine method only if validation is turned on
  if description && Apipie.configuration.validate == true

    old_method = instance_method(description.method)


    # @todo we should use before_filter
    define_method(description.method) do |*args|

      if Apipie.configuration.validate_presence?
        description.params.each do |_, param|
          # check if required parameters are present
          raise ParamMissing.new(param.name) if param.required && !params.has_key?(param.name)
        end
      end

      if Apipie.configuration.validate_value?
        description.params.each do |_, param|
          # params validations
          param.validate(params[:"#{param.name}"]) if params.has_key?(param.name)
        end
      end

      if Apipie.configuration.process_value?
        @api_params = {}

        description.params.each do |_, param|
          # params processing
          @api_params[param.as] = param.process_value(params[:"#{param.name}"]) if params.has_key?(param.name)
        end
      end

      # run the original method code
      old_method.bind(self).call(*args)
    end

  end

end

#api_versions(*versions) ⇒ Object Also known as: api_version



125
126
127
# File 'lib/apipie/dsl_definition.rb', line 125

def api_versions(*versions)
  _apipie_dsl_data[:api_versions].concat(versions)
end

#desc(description) ⇒ Object Also known as: description, full_description

Describe the next method.

Example:

desc "print hello world"
def hello_world
  puts "hello world"
end


138
139
140
141
142
143
144
# File 'lib/apipie/dsl_definition.rb', line 138

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

#document(path) ⇒ Object

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



155
156
157
158
# File 'lib/apipie/dsl_definition.rb', line 155

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 = {}) ⇒ Object

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


186
187
188
189
# File 'lib/apipie/dsl_definition.rb', line 186

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) ⇒ Object

Describe available request/response formats

formats ['json', 'jsonp', 'xml']


163
164
165
166
# File 'lib/apipie/dsl_definition.rb', line 163

def formats(formats) #:doc:
  return unless Apipie.active_dsl?
  _apipie_dsl_data[:formats] = formats
end

#meta(meta) ⇒ Object

Describe additional metadata

meta :author => { :name => 'John', :surname => 'Doe' }


171
172
173
# File 'lib/apipie/dsl_definition.rb', line 171

def meta(meta) #:doc:
  _apipie_dsl_data[:meta] = meta
end