1- require "coderay"
2-
31module RspecApiDocumentation
4- class TestClient < Struct . new ( :context , :options )
2+ class ClientBase < Struct . new ( :context , :options )
53 include Headers
64 include Syntax
75
86 delegate :example , :app , :to => :context
97 delegate :metadata , :to => :example
10- delegate :last_request , :last_response , :to => :rack_test_session
11- private :last_request , :last_response
12-
13- def rack_test_session
14- @rack_test_session ||= Struct . new ( :app ) do
15- begin
16- include Rack ::Test ::Methods
17- rescue LoadError
18- raise "#{ self . class . name } requires Rack::Test >= 0.5.5. Please add it to your test dependencies."
19- end
20- end . new ( app )
21- end
228
239 def get ( *args )
2410 process :get , *args
@@ -36,50 +22,14 @@ def delete(*args)
3622 process :delete , *args
3723 end
3824
39- def request_headers
40- env_to_headers ( last_request . env )
41- end
42-
43- def response_headers
44- last_response . headers
45- end
46-
47- def query_string
48- last_request . env [ "QUERY_STRING" ]
49- end
50-
51- def query_hash
52- strings = query_string . split ( "&" )
53- arrays = strings . map do |segment |
54- segment . split ( "=" )
55- end
56- Hash [ arrays ]
57- end
58-
59- def headers ( method , action , params )
60- if options && options [ :headers ]
61- options [ :headers ]
62- else
63- { }
64- end
65- end
66-
67- def status
68- last_response . status
69- end
70-
71- def response_body
72- last_response . body
73- end
74-
7525 private
76- def process ( method , action , params = { } )
77- rack_test_session . send ( method , action , params , headers ( method , action , params ) )
7826
79- document_example ( method , action , params )
27+ def process ( method , path , params = { } )
28+ do_request ( method , path , params )
29+ document_example ( method . to_s . upcase , path , params )
8030 end
8131
82- def document_example ( method , action , params )
32+ def document_example ( method , path , params )
8333 return unless metadata [ :document ]
8434
8535 input = last_request . env [ "rack.input" ]
@@ -88,21 +38,29 @@ def document_example(method, action, params)
8838
8939 request_metadata = { }
9040
91- request_metadata [ :request_method ] = method . to_s . upcase
92- request_metadata [ :request_path ] = action
93- request_metadata [ :request_body ] = highlight_syntax ( request_body , last_request . content_type , true )
41+ request_metadata [ :request_method ] = method
42+ request_metadata [ :request_path ] = path
43+ request_metadata [ :request_body ] = highlight_syntax ( request_body , content_type , true )
9444 request_metadata [ :request_headers ] = format_headers ( request_headers )
9545 request_metadata [ :request_query_parameters ] = format_query_hash ( query_hash )
9646 request_metadata [ :response_status ] = status
9747 request_metadata [ :response_status_text ] = Rack ::Utils ::HTTP_STATUS_CODES [ status ]
9848 request_metadata [ :response_body ] = highlight_syntax ( response_body , response_headers [ 'Content-Type' ] )
9949 request_metadata [ :response_headers ] = format_headers ( response_headers )
100- request_metadata [ :curl ] = Curl . new ( method . to_s , action , request_body , request_headers )
50+ request_metadata [ :curl ] = Curl . new ( method , path , request_body , request_headers )
10151
10252 metadata [ :requests ] ||= [ ]
10353 metadata [ :requests ] << request_metadata
10454 end
10555
56+ def query_hash
57+ strings = query_string . split ( "&" )
58+ arrays = strings . map do |segment |
59+ segment . split ( "=" )
60+ end
61+ Hash [ arrays ]
62+ end
63+
10664 def format_query_hash ( query_hash )
10765 return if query_hash . blank?
10866 query_hash . map do |key , value |
0 commit comments