Sha256: 43691e5a9cd09bdacaccc1bcfd79a807a3c6f70091c7a59ac3ae5b7d689621fc

Contents?: true

Size: 1.3 KB

Versions: 4

Compression:

Stored size: 1.3 KB

Contents

module Fdoc
  module SpecWatcher
    VERBS = [:get, :post, :put, :delete]

    VERBS.each do |verb|
      define_method(verb) do |*params|
        action, request_params = params
        request_params ||= {}
        result = super(*params)

        path = if respond_to?(:example) # Rspec 2
          example.metadata[:fdoc]
        else # Rspec 1.3.2
          opts = {}
          __send__(:example_group_hierarchy).each do |example|
            opts.merge!(example.options)
          end
          opts.merge!(options)
          opts[:fdoc]
        end

        if path
          response_params = begin
            JSON.parse(response.body)
          rescue
            {}
          end
          successful = Fdoc.decide_success(response_params, response.status)
          verify!(verb, path, request_params, response_params, response.status,
            successful)
        end

        result
      end
    end

    private

    def verify!(verb, path, request_params, response_params, response_status,
          successful)
      service = Service.new(Fdoc.service_path)
      endpoint = service.open(verb, path)
      endpoint.consume_request(request_params, successful)
      endpoint.consume_response(response_params, response_status, successful)
      endpoint.persist! if endpoint.respond_to?(:persist!)
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
fdoc-0.2.4 lib/fdoc/spec_watcher.rb
fdoc-0.2.3 lib/fdoc/spec_watcher.rb
fdoc-0.2.2 lib/fdoc/spec_watcher.rb
fdoc-0.2.1 lib/fdoc/spec_watcher.rb