mock_server 0.1.5 → 0.2

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,45 +1,52 @@
1
- require 'mock_server/utils'
2
1
  require 'erb'
3
2
  require 'hashie'
4
3
 
4
+ require_relative 'utils'
5
+ require_relative 'state'
6
+
7
+ unless defined? MockServer::Store
8
+ require_relative 'store/global'
9
+ end
10
+
5
11
  module MockServer
6
12
  class Playback
7
13
  include MockServer::Utils
14
+ include MockServer::Store
8
15
 
9
- def initialize(app, options = {})
10
- @options = options
16
+ def initialize(app, opt = {})
11
17
  @app = app
12
- $mock_server_options ||= options
18
+ @options = mock_server_options_merge(opt)
13
19
  end
14
20
 
15
21
  def call(env)
16
- @options.merge!($mock_server_options)
22
+ @options = self.mock_server_options_read
17
23
 
18
- verbose(env, $mock_server_options) if @options[:verbose]
24
+ verbose(env) if @options[:verbose]
19
25
  return @app.call(env) unless @options[:routes] and
20
26
  lazy_match @options[:routes], env["PATH_INFO"]
21
27
 
22
28
  @request = Rack::Request.new(env)
23
29
 
24
- $mock_server_options[:requests_stack] ||= []
25
- $mock_server_options[:requests_stack] << @request.path
30
+ @options[:requests_stack] << @request.path
26
31
 
27
32
  @data = load_data
28
33
 
29
34
  record = match_request
30
35
 
31
- if record
32
- $mock_server_options[:success_stack] ||= []
33
- $mock_server_options[:success_stack] << @request.path
36
+ response = if record
37
+ @options[:success_stack] << @request.path
38
+ @options[:matcher_exceptions].clear
34
39
 
35
40
  response = record[:response]
36
41
  [response[:status], response[:headers], [response[:body]]]
37
42
  else
38
- $mock_server_options[:errors_stack] ||= []
39
43
  error = { @request.path => "Couldn't match #{@request.request_method} #{@request.path}" }
40
- $mock_server_options[:errors_stack] << error
44
+ @options[:errors_stack] << error
41
45
  [404, {}, ['RECORD NOT FOUND!']]
42
46
  end
47
+
48
+ self.mock_server_options_write(@options)
49
+ response
43
50
  end
44
51
 
45
52
  private
@@ -80,8 +87,7 @@ module MockServer
80
87
  end
81
88
 
82
89
  def store_matcher_exception(exception)
83
- $mock_server_options[:matcher_exceptions] ||= []
84
- $mock_server_options[:matcher_exceptions] << exception
90
+ @options[:matcher_exceptions] << exception
85
91
  end
86
92
 
87
93
  def load_data
@@ -1,29 +1,33 @@
1
- require 'mock_server/utils'
1
+ require_relative 'utils'
2
+ require_relative 'state'
3
+
4
+ unless defined? MockServer::Store
5
+ require_relative 'store/global'
6
+ end
2
7
 
3
8
  module MockServer
4
9
  class Record
5
10
  include MockServer::Utils
11
+ include MockServer::Store
6
12
 
7
- def initialize(app, options = {})
8
- @options = options
13
+ def initialize(app, opt = {})
9
14
  @app = app
10
- $mock_server_options ||= options
15
+ @options = mock_server_options_merge(opt)
11
16
  end
12
17
 
13
18
  def call(env)
14
- @options.merge!($mock_server_options)
19
+ @options = self.mock_server_options_read
15
20
 
16
- verbose(env, $mock_server_options) if @options[:verbose]
21
+ verbose(env) if @options[:verbose]
17
22
  return @app.call(env) unless @options[:routes] and
18
23
  lazy_match @options[:routes], env["PATH_INFO"]
19
24
 
20
- @options.merge!($mock_server_options)
21
-
22
25
  @request = Rack::Request.new(env)
23
26
  @data = load_data
24
27
 
25
28
  @app.call(env).tap do |status, header, response|
26
29
  record_response(status, header, response)
30
+ self.mock_server_options_write(@options)
27
31
  response
28
32
  end
29
33
  end
@@ -1,99 +1,44 @@
1
- # The purpose of the helper is to manpulate MockServer global var
2
- # in an rspec way. $mock_server_options
3
- #
4
- #
5
- # The basic:
6
- #
7
- # $mock_server_options = { :path => 'fixtures/records', :filename => 'uploads' }
8
- #
9
- #
10
- # $mock_server_options tell you application which URL to do its magic for both,
11
- # record and playback mode.
12
- #
13
- # Example:
14
- #
15
- # $mock_server_options[:routes] = [ '**/uploads.json', '**/uploads/*',
16
- # '**/folders.json', '**/folders', '**/folders' ]
17
- #
18
- # $mock_server_options[:matchers] is an array of path, url, and matchers proc
19
- #
20
- # Example:
21
- #
22
- # $mock_server_options[:matchers] = [
23
- # { :method => :get, :path => '/api/2/projects/1/uploads.json',
24
- # :matcher => Proc.new { |request, recorded_request|
25
- # request.query == recorded_request.query and
26
- # request.query == 'count=0'
27
- # }
28
- # },
29
- # { :method => :put, :path => '/api/2/uploads/20',
30
- # :matcher => Proc.new { |request, recorded_request|
31
- # request.query == recorded_request.query and
32
- # request.query == 'count=0'
33
- # }
34
- # },
35
- # { :method => :delete, :path => '/api/2/uploads/20' },
36
- # { :method => :get, :path => '/api/2/projects/1/folders.json' },
37
- # { :method => :post, :path => '/api/2/folders',
38
- # :matcher => Proc.new { |request, recorded_request|
39
- # request.body.project_id == recorded_request.body.project_id and
40
- # request.body.project_id == 1 and
41
- # recorded_request.body.name == recorded_request.body.name and
42
- # recorded_request.body.name == 'Mockup'
43
- # }
44
- # },
45
- # { :method => :put, :path => '/api/2/uploads/20',
46
- # :matcher => Proc.new { |request, recorded_request|
47
- # request.body.name == recorded_request.body.name
48
- # }
49
- # },
50
- # { :method => :delete, :path => '/api/2/folders/3' }
51
- # ]
52
-
53
-
1
+ unless defined? MockServer::Store
2
+ require_relative 'Store/global'
3
+ end
54
4
 
55
5
  module MockServer
56
6
  module Spec
57
7
  module Helpers
8
+ include MockServer::Store
58
9
 
59
10
  # Inspect
60
11
  def mock_server_inspect
61
- $mock_server_options.inspect
12
+ mock_server_options.inspect
62
13
  end
63
14
 
64
15
  # Configuration
65
16
  def mock_server_use_record(*arguments)
66
- mock_server_config_set(:record_filenames, arguments)
17
+ mock_server_options_set(:record_filenames, arguments)
67
18
  end
68
19
 
69
20
  def mock_server_add_record(*arguments)
70
- config = (mock_server_config_get(:record_filenames) || []) + arguments
71
- mock_server_config_set(:record_filenames, config)
21
+ config = (mock_server_options_fetch(:record_filenames, []) + arguments)
22
+ mock_server_options_set(:record_filenames, config)
72
23
  end
73
24
 
74
25
  def mock_server_set_fixture_path(path)
75
- mock_server_config_set(:path, path)
26
+ mock_server_options_set(:path, path)
76
27
  end
77
28
 
78
29
  # Active path config
79
30
  def mock_server_enable_routes(*arguments)
80
- $mock_server_options ||= {}
81
- $mock_server_options[:routes] ||= []
82
- $mock_server_options[:routes] << arguments
83
- $mock_server_options[:routes].flatten!
31
+ routes = mock_server_options_fetch(:routes, []) + arguments
32
+ mock_server_options_set(:routes, routes)
84
33
  end
85
34
 
86
35
  def mock_server_disable_path(path)
87
- return unless $mock_server_options and $mock_server_options[:routes]
88
- $mock_server_options[:routes] = if path.is_an? Array
89
- path unless path.empty?
90
- else
91
- $mock_server_options[:routes] - [path]
92
- end
36
+ routes = mock_server_options_fetch(:routes, []) - [path]
37
+ mock_server_options_set(:routes, routes.flatten!)
93
38
  end
94
39
 
95
40
  def mock_server_disable_all_routes!
96
- $mock_server_options[:routes] = nil
41
+ mock_server_options_set(:routes, [])
97
42
  end
98
43
 
99
44
  # Matchers helpers
@@ -114,32 +59,32 @@ module MockServer
114
59
  end
115
60
 
116
61
  def mock_server_clear_matchers!
117
- mock_server_config_set(:matchers, [])
62
+ mock_server_options_set(:matchers, [])
118
63
  end
119
64
 
120
65
  # Errors / Success stack
121
66
  def mock_server_requests_stack
122
- $mock_server_options[:requests_stack] || []
67
+ mock_server_options_fetch(:requests_stack, [])
123
68
  end
124
69
 
125
70
  def mock_server_requests_stack_clear!
126
- $mock_server_options[:requests_stack] = []
71
+ mock_server_options_set(:requests_stack, [])
127
72
  end
128
73
 
129
74
  def mock_server_errors_stack
130
- $mock_server_options[:errors_stack] || []
75
+ mock_server_options_fetch(:errors_stack, [])
131
76
  end
132
77
 
133
78
  def mock_server_errors_stack_clear!
134
- $mock_server_options[:errors_stack] = []
79
+ mock_server_options_set(:errors_stack, [])
135
80
  end
136
81
 
137
82
  def mock_server_success_stack
138
- $mock_server_options[:success_stack] || []
83
+ mock_server_options_fetch(:success_stack, [])
139
84
  end
140
85
 
141
86
  def mock_server_success_stack_clear!
142
- $mock_server_options[:success_stack] = []
87
+ mock_server_options_set(:success_stack, [])
143
88
  end
144
89
 
145
90
  def mock_server_response_stack_clear!
@@ -157,34 +102,41 @@ module MockServer
157
102
  end
158
103
 
159
104
  def mock_server_reraise_matcher_exceptions
160
- $mock_server_options[:matcher_exceptions] ||= []
161
- $mock_server_options[:matcher_exceptions].each do |exception|
105
+ mock_server_options_fetch(:matcher_exceptions, []).each do |exception|
162
106
  raise exception
163
107
  end
164
108
  end
165
109
 
166
110
  protected
167
111
 
168
- # Configuration
169
- def mock_server_config_set(key, value)
170
- $mock_server_options ||= {}
171
- $mock_server_options[key] = value
172
- end
173
-
174
- def mock_server_config_get(key)
175
- $mock_server_options ||= {}
176
- $mock_server_options[key]
177
- end
178
-
179
112
  # Matchers helpers
180
113
  def mock_server_request(method, path, matcher)
181
114
  add_mock_server_matcher({ :method => method, :path => path, :matcher => matcher })
182
115
  end
183
116
 
184
117
  def add_mock_server_matcher(matcher)
185
- $mock_server_options ||= {}
186
- $mock_server_options[:matchers] ||= []
187
- $mock_server_options[:matchers] << matcher
118
+ options = self.mock_server_options_read
119
+ options[:matchers] << matcher
120
+ mock_server_options_write(options)
121
+ end
122
+
123
+ def mock_server_options_fetch(key, value)
124
+ if self.mock_server_options_read[key]
125
+ mock_server_options_get(key)
126
+ else
127
+ mock_server_options_set(key, value)
128
+ end
129
+ end
130
+
131
+ def mock_server_options_set(key, value)
132
+ hash = self.mock_server_options_read
133
+ hash[key] = value
134
+ self.mock_server_options_write(hash)
135
+ end
136
+
137
+ def mock_server_options_get(key)
138
+ hash = self.mock_server_options_read
139
+ hash[key]
188
140
  end
189
141
 
190
142
  end
@@ -0,0 +1,31 @@
1
+ module MockServer
2
+ class State < Hashie::Dash
3
+ property :path, :default => 'fixtures/records'
4
+ property :filename, :default => 'record'
5
+ property :routes, :default => []
6
+ property :record_filenames, :default => []
7
+ property :matchers, :default => []
8
+ property :verbose, :default => false
9
+ property :requests_stack, :default => []
10
+ property :success_stack, :default => []
11
+ property :errors_stack, :default => []
12
+ property :requests_stack, :default => []
13
+ property :matcher_exceptions, :default => []
14
+
15
+ def merge(hash)
16
+ new_hash = self
17
+ hash.each do |k,v|
18
+ new_hash[k] = v
19
+ end
20
+ new_hash
21
+ end
22
+
23
+ def merge!(hash)
24
+ hash.each do |k,v|
25
+ self[k] = v
26
+ end
27
+ self
28
+ end
29
+
30
+ end
31
+ end
@@ -0,0 +1,22 @@
1
+ require 'hashie'
2
+
3
+ module MockServer
4
+ module Store
5
+
6
+ def mock_server_options_merge(opt = {})
7
+ $mock_server_options ||= MockServer::State.new(opt)
8
+ $mock_server_options.merge!(opt)
9
+ end
10
+
11
+ def mock_server_options_read
12
+ $mock_server_options ||= MockServer::State.new
13
+ $mock_server_options
14
+ end
15
+
16
+ def mock_server_options_write(value)
17
+ $mock_server_options ||= MockServer::State.new
18
+ $mock_server_options = value
19
+ end
20
+
21
+ end
22
+ end
@@ -6,11 +6,9 @@ module MockServer
6
6
 
7
7
  private
8
8
 
9
- def verbose(env, options)
10
- if options
11
- interception = lazy_match(options[:routes], env["PATH_INFO"]) ? "intercepted!" : "NOT intercepted."
12
- puts %([MockServer] #{env["PATH_INFO"]} was #{interception}"\n)
13
- end
9
+ def verbose(env)
10
+ interception = lazy_match(@options[:routes], env["PATH_INFO"]) ? "intercepted!" : "NOT intercepted."
11
+ puts %([MockServer] #{env["PATH_INFO"]} was #{interception}"\n)
14
12
  end
15
13
 
16
14
  def lazy_match(strings, path)
metadata CHANGED
@@ -1,19 +1,20 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: mock_server
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: '0.2'
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
8
8
  - Charles Barbier
9
+ - Saimon Moore
9
10
  autorequire:
10
11
  bindir: bin
11
12
  cert_chain: []
12
- date: 2011-11-14 00:00:00.000000000 Z
13
+ date: 2011-11-21 00:00:00.000000000 Z
13
14
  dependencies:
14
15
  - !ruby/object:Gem::Dependency
15
16
  name: rack
16
- requirement: &70339623889120 !ruby/object:Gem::Requirement
17
+ requirement: &70185898662840 !ruby/object:Gem::Requirement
17
18
  none: false
18
19
  requirements:
19
20
  - - ! '>='
@@ -21,10 +22,10 @@ dependencies:
21
22
  version: '0'
22
23
  type: :runtime
23
24
  prerelease: false
24
- version_requirements: *70339623889120
25
+ version_requirements: *70185898662840
25
26
  - !ruby/object:Gem::Dependency
26
27
  name: hashie
27
- requirement: &70339623902520 !ruby/object:Gem::Requirement
28
+ requirement: &70185898662400 !ruby/object:Gem::Requirement
28
29
  none: false
29
30
  requirements:
30
31
  - - ! '>='
@@ -32,7 +33,7 @@ dependencies:
32
33
  version: '0'
33
34
  type: :runtime
34
35
  prerelease: false
35
- version_requirements: *70339623902520
36
+ version_requirements: *70185898662400
36
37
  description:
37
38
  email: unixcharles@gmail.com
38
39
  executables: []
@@ -45,6 +46,8 @@ files:
45
46
  - lib/mock_server/record.rb
46
47
  - lib/mock_server/playback.rb
47
48
  - lib/mock_server/utils.rb
49
+ - lib/mock_server/state.rb
50
+ - lib/mock_server/store/global.rb
48
51
  - lib/mock_server/spec/helpers.rb
49
52
  homepage: http://www.github.com/unixcharles/mock_server
50
53
  licenses: []