Sha256: 89b808d1182dab40677ab5314805bd6f35fda5429f734f4f257e8e8355ec923e

Contents?: true

Size: 1.37 KB

Versions: 4

Compression:

Stored size: 1.37 KB

Contents

module RestAssured
  class Response

    def self.perform(app)
      request = app.request
      if d = find_matching_double(request.request_method, request.fullpath)
        return_double app, d
      elsif redirect_url = Models::Redirect.find_redirect_url_for(request.fullpath)
        if d = find_matching_double(request.request_method, redirect_url)
          return_double app, d
        else
          app.redirect redirect_url
        end
      else
        app.status 404
      end
    end

    def self.find_matching_double(method, fullpath)
      active_doubles_for_verb = Models::Double.where(:active => true, :verb => method)

      active_doubles_for_verb.select {|d| !d.fullpath.blank? && d.fullpath == fullpath}.sort_by { |d| d[:id] }.last ||
          active_doubles_for_verb.select {|d| !d.pathpattern.blank? && Regexp.new(d.pathpattern).match(fullpath)}.sort_by { |d| d[:id] }.last
    end

    def self.return_double(app, d)
      request = app.request
      request.body.rewind
      body = request.body.read #without temp variable ':body = > body' is always nil. mistery
      env  = request.env.except('rack.input', 'rack.errors', 'rack.logger')

      d.requests.create!(:rack_env => env.to_json, :body => body, :params => request.params.to_json)

      sleep d.delay

      app.headers d.response_headers
      app.body d.content
      app.status d.status
    end

  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
rest-assured-4.0.0 lib/rest-assured/routes/response.rb
rest-assured-3.0.1 lib/rest-assured/routes/response.rb
rest-assured-3.0.0 lib/rest-assured/routes/response.rb
rest-assured-2.2.0 lib/rest-assured/routes/response.rb