mack 0.4.0.1 → 0.4.1
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.
- data/CHANGELOG +10 -0
- data/lib/mack.rb +4 -1
- data/lib/sea_level/response.rb +7 -0
- data/lib/test_extensions/test_assertions.rb +8 -0
- data/lib/test_extensions/test_helpers.rb +69 -13
- data/tasks/gem_helper.rb +1 -1
- data/tasks/gem_tasks.rake +1 -1
- metadata +3 -3
data/CHANGELOG
CHANGED
@@ -1,3 +1,13 @@
|
|
1
|
+
===0.4.1
|
2
|
+
* Improved testing support.
|
3
|
+
* Added ability to do 'session' based tests.
|
4
|
+
* Added assert_difference method.
|
5
|
+
* Added ability to set/remove cookies before requests are made.
|
6
|
+
* gem: mack_ruby_core_extensions 0.1.4
|
7
|
+
|
8
|
+
===0.4.0.1
|
9
|
+
* gem: cachetastic 1.4.2
|
10
|
+
|
1
11
|
===0.4.0
|
2
12
|
* Added Distributed Routes!
|
3
13
|
* gem: mack_ruby_core_extensions 0.1.3
|
data/lib/mack.rb
CHANGED
@@ -12,6 +12,7 @@ module Mack
|
|
12
12
|
# This method needs to be defined as part of the Rack framework. As is noted for the Mack::Runner
|
13
13
|
# class, this is where the center of the Mack framework lies.
|
14
14
|
def call(env)
|
15
|
+
# pp env
|
15
16
|
begin
|
16
17
|
setup(env) do
|
17
18
|
begin
|
@@ -22,6 +23,7 @@ module Mack
|
|
22
23
|
else
|
23
24
|
# let's handle a normal request:
|
24
25
|
c = "#{route[:controller].to_s.camelcase}Controller".constantize.new(self.request, self.response, self.cookies)
|
26
|
+
self.response.controller = c
|
25
27
|
self.response.write(c.run)
|
26
28
|
end
|
27
29
|
rescue Mack::Errors::ResourceNotFound, Mack::Errors::UndefinedRoute => e
|
@@ -85,7 +87,7 @@ module Mack
|
|
85
87
|
sess_id = create_new_session
|
86
88
|
end
|
87
89
|
end
|
88
|
-
|
90
|
+
|
89
91
|
yield
|
90
92
|
|
91
93
|
Cachetastic::Caches::MackSessionCache.set(sess_id, self.request.session)
|
@@ -97,6 +99,7 @@ module Mack
|
|
97
99
|
sess = Mack::Session.new(id)
|
98
100
|
self.request.session = sess
|
99
101
|
Cachetastic::Caches::MackSessionCache.set(id, sess)
|
102
|
+
id
|
100
103
|
end
|
101
104
|
|
102
105
|
def try_to_find_resource(env, path_info, exception)
|
data/lib/sea_level/response.rb
CHANGED
@@ -2,5 +2,12 @@ module Mack
|
|
2
2
|
# Right now Mack::Response is just a wrapper around Rack::Response.
|
3
3
|
# Down the line this may be used to spice up the response.
|
4
4
|
class Response < Rack::Response
|
5
|
+
|
6
|
+
attr_accessor :controller
|
7
|
+
|
8
|
+
def assigns(key)
|
9
|
+
self.controller.instance_variable_get("@#{key}")
|
10
|
+
end
|
11
|
+
|
5
12
|
end
|
6
13
|
end
|
@@ -33,6 +33,7 @@ module Mack
|
|
33
33
|
# Asserts that the specified cookie has been set to the specified value.
|
34
34
|
def assert_cookie(name, value)
|
35
35
|
assert cookies[name.to_s]
|
36
|
+
assert_equal value, cookies[name.to_s]
|
36
37
|
end
|
37
38
|
|
38
39
|
# Asserts that there is no cookie set for the specified cookie
|
@@ -40,6 +41,13 @@ module Mack
|
|
40
41
|
assert !cookies[name.to_s]
|
41
42
|
end
|
42
43
|
|
44
|
+
def assert_difference(object, method = nil, difference = 1)
|
45
|
+
start_count = object.send(method)
|
46
|
+
yield
|
47
|
+
object.reload if object.respond_to? :reload
|
48
|
+
assert_equal start_count + difference, object.send(method)
|
49
|
+
end
|
50
|
+
|
43
51
|
end # TestAssertions
|
44
52
|
|
45
53
|
end # Mack
|
@@ -15,30 +15,35 @@ module Mack
|
|
15
15
|
yield
|
16
16
|
end
|
17
17
|
end
|
18
|
+
|
19
|
+
# Retrieves an instance variable from the controller from a request.
|
20
|
+
def assigns(key)
|
21
|
+
$mack_app.instance_variable_get("@app").instance_variable_get("@response").instance_variable_get("@controller").instance_variable_get("@#{key}")
|
22
|
+
end
|
18
23
|
|
19
24
|
# Performs a 'get' request for the specified uri.
|
20
25
|
def get(uri, options = {})
|
21
|
-
build_response(request.get(uri, options))
|
26
|
+
build_response(request.get(uri, build_request_options(options)))
|
22
27
|
end
|
23
28
|
|
24
29
|
# Performs a 'put' request for the specified uri.
|
25
30
|
def put(uri, options = {})
|
26
|
-
build_response(request.put(uri, :input => options.to_params))
|
31
|
+
build_response(request.put(uri, build_request_options({:input => options.to_params})))
|
27
32
|
end
|
28
33
|
|
29
34
|
# Performs a 'post' request for the specified uri.
|
30
35
|
def post(uri, options = {})
|
31
|
-
build_response(request.post(uri, :input => options.to_params))
|
36
|
+
build_response(request.post(uri, build_request_options({:input => options.to_params})))
|
32
37
|
end
|
33
38
|
|
34
39
|
# Performs a 'delete' request for the specified uri.
|
35
40
|
def delete(uri, options = {})
|
36
|
-
build_response(request.delete(uri, options))
|
41
|
+
build_response(request.delete(uri, build_request_options(options)))
|
37
42
|
end
|
38
43
|
|
39
44
|
# Returns a Rack::MockRequest. If there isn't one, a new one is created.
|
40
45
|
def request
|
41
|
-
@request ||= Rack::MockRequest.new(
|
46
|
+
@request ||= Rack::MockRequest.new(mack_app)
|
42
47
|
end
|
43
48
|
|
44
49
|
# Returns the last Rack::MockResponse that got generated by a call.
|
@@ -56,27 +61,78 @@ module Mack
|
|
56
61
|
Cachetastic::Caches::MackSessionCache.get(cookies[app_config.mack.session_id])
|
57
62
|
end
|
58
63
|
|
64
|
+
# Used to create a 'session' around a block of code. This is great of 'integration' tests.
|
65
|
+
def in_session
|
66
|
+
@in_session = true
|
67
|
+
clear_session
|
68
|
+
yield
|
69
|
+
clear_session
|
70
|
+
@in_session = false
|
71
|
+
end
|
72
|
+
|
73
|
+
# Clears all the sessions.
|
74
|
+
def clear_session
|
75
|
+
Cachetastic::Caches::MackSessionCache.expire_all
|
76
|
+
end
|
77
|
+
|
59
78
|
# Returns a Hash of cookies from the response.
|
60
79
|
def cookies
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
80
|
+
test_cookies
|
81
|
+
end
|
82
|
+
|
83
|
+
# Sets a cookie to be used for the next request
|
84
|
+
def set_cookie(name, value)
|
85
|
+
test_cookies[name] = value
|
86
|
+
end
|
87
|
+
|
88
|
+
# Removes a cookie.
|
89
|
+
def remove_cookie(name)
|
90
|
+
test_cookies.delete(name)
|
69
91
|
end
|
70
92
|
|
71
93
|
private
|
94
|
+
def test_cookies
|
95
|
+
@test_cookies = {} if @test_cookies.nil?
|
96
|
+
@test_cookies
|
97
|
+
end
|
98
|
+
|
99
|
+
def mack_app
|
100
|
+
if $mack_app.nil?
|
101
|
+
$mack_app = Rack::Recursive.new(Mack::Runner.new)
|
102
|
+
end
|
103
|
+
$mack_app
|
104
|
+
end
|
105
|
+
|
106
|
+
def build_request_options(options)
|
107
|
+
{"HTTP_COOKIE" => test_cookies.join("%s=%s", "; ")}.merge(options)
|
108
|
+
end
|
109
|
+
|
72
110
|
def build_response(res)
|
73
111
|
@responses = [res]
|
112
|
+
strip_cookies_from_response(res)
|
74
113
|
until res.successful?
|
114
|
+
[res].flatten.each do |r|
|
115
|
+
strip_cookies_from_response(r)
|
116
|
+
end
|
75
117
|
res = request.get(res["Location"])
|
76
118
|
@responses << res
|
77
119
|
end
|
78
120
|
end
|
79
121
|
|
122
|
+
def strip_cookies_from_response(res)
|
123
|
+
unless res.original_headers["Set-Cookie"].nil?
|
124
|
+
res.original_headers["Set-Cookie"].each do |ck|
|
125
|
+
spt = ck.split("=")
|
126
|
+
name = spt.first
|
127
|
+
value = spt.last
|
128
|
+
if name == app_config.mack.session_id
|
129
|
+
value = nil unless @in_session
|
130
|
+
end
|
131
|
+
set_cookie(name, value)
|
132
|
+
end
|
133
|
+
end
|
134
|
+
end
|
135
|
+
|
80
136
|
end # TestHelpers
|
81
137
|
|
82
138
|
end # Mack
|
data/tasks/gem_helper.rb
CHANGED
data/tasks/gem_tasks.rake
CHANGED
@@ -47,7 +47,7 @@ namespace :gem do
|
|
47
47
|
s.rdoc_options << '--title' << 'Mack' << '--main' << 'README' << '--line-numbers' << "--inline-source"
|
48
48
|
|
49
49
|
s.add_dependency("rack", "0.3.0")
|
50
|
-
s.add_dependency("mack_ruby_core_extensions", "0.1.
|
50
|
+
s.add_dependency("mack_ruby_core_extensions", "0.1.4")
|
51
51
|
s.add_dependency("application_configuration", "1.2.1")
|
52
52
|
s.add_dependency("cachetastic", "1.4.2")
|
53
53
|
s.add_dependency("log4r", "1.0.5")
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- markbates
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-03-
|
12
|
+
date: 2008-03-27 00:00:00 -04:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -28,7 +28,7 @@ dependencies:
|
|
28
28
|
requirements:
|
29
29
|
- - "="
|
30
30
|
- !ruby/object:Gem::Version
|
31
|
-
version: 0.1.
|
31
|
+
version: 0.1.4
|
32
32
|
version:
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: application_configuration
|