mock_server 0.1.4 → 0.1.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1,4 +1,6 @@
1
1
  require 'mock_server/utils'
2
+ require 'erb'
3
+ require 'hashie'
2
4
 
3
5
  module MockServer
4
6
  class Playback
@@ -18,6 +20,10 @@ module MockServer
18
20
  lazy_match @options[:routes], env["PATH_INFO"]
19
21
 
20
22
  @request = Rack::Request.new(env)
23
+
24
+ $mock_server_options[:requests_stack] ||= []
25
+ $mock_server_options[:requests_stack] << @request.path
26
+
21
27
  @data = load_data
22
28
 
23
29
  record = match_request
@@ -57,7 +63,15 @@ module MockServer
57
63
 
58
64
  matchers.detect { |matcher|
59
65
  if matcher[:matcher]
60
- matcher[:matcher].call(request, recorded_request) rescue false
66
+ result = true
67
+ begin
68
+ matcher[:matcher].call(request, recorded_request)
69
+ rescue => matcher_err
70
+ store_matcher_exception(matcher_err)
71
+ result = false
72
+ ensure
73
+ result
74
+ end
61
75
  else
62
76
  true
63
77
  end
@@ -65,6 +79,11 @@ module MockServer
65
79
  }
66
80
  end
67
81
 
82
+ def store_matcher_exception(exception)
83
+ $mock_server_options[:matcher_exceptions] ||= []
84
+ $mock_server_options[:matcher_exceptions] << exception
85
+ end
86
+
68
87
  def load_data
69
88
  FileUtils.mkdir_p(@options[:path]) unless File.exists? @options[:path]
70
89
 
@@ -82,4 +101,4 @@ module MockServer
82
101
  end
83
102
 
84
103
  end
85
- end
104
+ end
@@ -22,19 +22,19 @@ module MockServer
22
22
  @request = Rack::Request.new(env)
23
23
  @data = load_data
24
24
 
25
- @app.call(env).tap do |response|
26
- record_response(response)
25
+ @app.call(env).tap do |status, header, response|
26
+ record_response(status, header, response)
27
27
  response
28
28
  end
29
29
  end
30
30
 
31
31
  private
32
32
 
33
- def record_response(response)
33
+ def record_response(status, header, response)
34
34
  request = hashified_request
35
35
  @data.reject! { |record| record[:request] == request }
36
36
 
37
- @data << { :request => request, :response => hashify_response(response) }
37
+ @data << { :request => request, :response => hashify_response(status, header, response) }
38
38
  save_data(@data)
39
39
  end
40
40
 
@@ -118,6 +118,13 @@ module MockServer
118
118
  end
119
119
 
120
120
  # Errors / Success stack
121
+ def mock_server_requests_stack
122
+ $mock_server_options[:requests_stack] || []
123
+ end
124
+
125
+ def mock_server_requests_stack_clear!
126
+ $mock_server_options[:requests_stack] = []
127
+ end
121
128
 
122
129
  def mock_server_errors_stack
123
130
  $mock_server_options[:errors_stack] || []
@@ -136,6 +143,7 @@ module MockServer
136
143
  end
137
144
 
138
145
  def mock_server_response_stack_clear!
146
+ mock_server_requests_stack_clear!
139
147
  mock_server_success_stack_clear!
140
148
  mock_server_errors_stack_clear!
141
149
  end
@@ -148,7 +156,15 @@ module MockServer
148
156
  mock_server_disable_all_routes!
149
157
  end
150
158
 
159
+ def mock_server_reraise_matcher_exceptions
160
+ $mock_server_options[:matcher_exceptions] ||= []
161
+ $mock_server_options[:matcher_exceptions].each do |exception|
162
+ raise exception
163
+ end
164
+ end
165
+
151
166
  protected
167
+
152
168
  # Configuration
153
169
  def mock_server_config_set(key, value)
154
170
  $mock_server_options ||= {}
@@ -173,4 +189,4 @@ module MockServer
173
189
 
174
190
  end
175
191
  end
176
- end
192
+ end
@@ -1,3 +1,6 @@
1
+ require 'yaml'
2
+ require 'json'
3
+
1
4
  module MockServer
2
5
  module Utils
3
6
 
@@ -22,27 +25,37 @@ module MockServer
22
25
  end
23
26
 
24
27
  def hashified_request
25
- body = JSON.parse(@request.body.to_a.join) rescue ''
28
+ #rewind to ensure we read from the start
29
+ @request.body.rewind
30
+
31
+ #read body
32
+ body = @request.body.read
33
+
34
+ #rewind in case upstream expects it rewound
35
+ @request.body.rewind
36
+
37
+ json = JSON.parse(body) rescue body
38
+
26
39
  {
27
40
  :method => @request.request_method,
28
41
  :path => @request.path,
29
42
  :query => @request.query_string,
30
- :body => body
43
+ :body => json
31
44
  }
32
45
  end
33
46
 
34
- def hashify_response(response)
35
- status = response[0]
36
- headers = response[1]
37
- body = response[2].body rescue ''
38
-
47
+ def hashify_response(status, header, response)
39
48
  {
40
49
  :method => @request.request_method,
41
50
  :path => @request.path,
42
51
  :status => status,
43
- :headers => headers,
44
- :body => body
52
+ :headers => header,
53
+ :body => if response.respond_to? :body
54
+ response.body
55
+ else
56
+ response.join
57
+ end
45
58
  }
46
59
  end
47
60
  end
48
- end
61
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mock_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.1.5
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2011-11-10 00:00:00.000000000 Z
12
+ date: 2011-11-14 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rack
16
- requirement: &70269520247400 !ruby/object:Gem::Requirement
16
+ requirement: &70339623889120 !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,10 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70269520247400
24
+ version_requirements: *70339623889120
25
25
  - !ruby/object:Gem::Dependency
26
26
  name: hashie
27
- requirement: &70269520245200 !ruby/object:Gem::Requirement
27
+ requirement: &70339623902520 !ruby/object:Gem::Requirement
28
28
  none: false
29
29
  requirements:
30
30
  - - ! '>='
@@ -32,7 +32,7 @@ dependencies:
32
32
  version: '0'
33
33
  type: :runtime
34
34
  prerelease: false
35
- version_requirements: *70269520245200
35
+ version_requirements: *70339623902520
36
36
  description:
37
37
  email: unixcharles@gmail.com
38
38
  executables: []