restrack 1.1.3 → 1.1.5
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/restrack/resource_controller.rb +8 -7
- data/lib/restrack/resource_request.rb +25 -13
- data/lib/restrack/version.rb +1 -1
- data/lib/restrack/web_service.rb +8 -8
- data/test/sample_app_1/config/constants.yaml +1 -1
- data/test/sample_app_1/controllers/errors_controller.rb +46 -0
- data/test/sample_app_1/controllers/foo_bar_controller.rb +5 -5
- data/test/sample_app_1/test/test_controller_actions.rb +11 -11
- data/test/sample_app_1/test/test_controller_inputs.rb +6 -6
- data/test/sample_app_1/test/test_controller_modifiers.rb +18 -18
- data/test/sample_app_1/test/test_errors.rb +123 -0
- data/test/sample_app_1/test/test_formats.rb +8 -8
- data/test/sample_app_2/test/test_controller_modifiers.rb +9 -9
- data/test/sample_app_4/test/test_controller_modifiers.rb +1 -1
- data/test/sample_app_4/test/test_formats.rb +3 -3
- metadata +21 -19
@@ -1,5 +1,5 @@
|
|
1
1
|
module RESTRack
|
2
|
-
|
2
|
+
|
3
3
|
# All RESTRack controllers should descend from ResourceController. This class
|
4
4
|
# provides the methods for your controllers.
|
5
5
|
#
|
@@ -7,7 +7,7 @@ module RESTRack
|
|
7
7
|
# Collection URI (/widgets/): | index | replace | create | drop
|
8
8
|
# Element URI (/widgets/42): | show | update | add | destroy
|
9
9
|
#
|
10
|
-
|
10
|
+
|
11
11
|
class ResourceController
|
12
12
|
attr_reader :action, :id
|
13
13
|
class << self; attr_accessor :key_type; end
|
@@ -22,7 +22,8 @@ module RESTRack
|
|
22
22
|
@resource_request = resource_request
|
23
23
|
@request = @resource_request.request
|
24
24
|
@params = @resource_request.params
|
25
|
-
@
|
25
|
+
@post_params = @resource_request.post_params
|
26
|
+
@get_params = @resource_request.get_params
|
26
27
|
self
|
27
28
|
end
|
28
29
|
|
@@ -42,14 +43,14 @@ module RESTRack
|
|
42
43
|
#def update(id); end
|
43
44
|
#def add(id); end
|
44
45
|
#def destroy(id); end
|
45
|
-
|
46
|
+
|
46
47
|
def method_missing(method_sym, *arguments, &block)
|
47
48
|
raise HTTP405MethodNotAllowed, 'Method not provided on controller.'
|
48
49
|
end
|
49
50
|
|
50
51
|
# all internal methods are protected rather than private so that calling methods *could* be overriden if necessary.
|
51
52
|
protected
|
52
|
-
|
53
|
+
|
53
54
|
# This method allows one to access a related resource, without providing a direct link to specific relation(s).
|
54
55
|
def self.pass_through_to(entity, opts = {})
|
55
56
|
entity_name = opts[:as] || entity
|
@@ -96,7 +97,7 @@ module RESTRack
|
|
96
97
|
end
|
97
98
|
)
|
98
99
|
end
|
99
|
-
|
100
|
+
|
100
101
|
# This method defines that there are multiple links to members from an entity collection (an array of entity identifiers).
|
101
102
|
# This adds an accessor instance method whose name is the entity's class.
|
102
103
|
def self.has_defined_relationships_to(entity, opts = {}, &get_entity_id_from_relation_id)
|
@@ -178,7 +179,7 @@ module RESTRack
|
|
178
179
|
end
|
179
180
|
id
|
180
181
|
end
|
181
|
-
|
182
|
+
|
182
183
|
# Get action from HTTP verb
|
183
184
|
def get_action_from_context
|
184
185
|
if @resource_request.request.get?
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module RESTRack
|
2
2
|
# The ResourceRequest class handles all incoming requests.
|
3
3
|
class ResourceRequest
|
4
|
-
attr_reader :request, :request_id, :
|
4
|
+
attr_reader :request, :request_id, :params, :post_params, :get_params
|
5
5
|
attr_accessor :mime_type, :url_chain
|
6
6
|
|
7
7
|
# Initialize the ResourceRequest by assigning a request_id and determining the path, format, and controller of the resource.
|
@@ -20,8 +20,15 @@ module RESTRack
|
|
20
20
|
|
21
21
|
def prepare
|
22
22
|
# Pull input data from POST body
|
23
|
-
@
|
24
|
-
@
|
23
|
+
@post_params = parse_body( @request )
|
24
|
+
@get_params = parse_query_string( @request )
|
25
|
+
@params = {}
|
26
|
+
# TODO: Test this!
|
27
|
+
if @post_params.is_a? Hash
|
28
|
+
@params = @post_params.merge( @get_params )
|
29
|
+
else
|
30
|
+
@params = @get_params
|
31
|
+
end
|
25
32
|
# Setup up the initial routing.
|
26
33
|
@url_chain = @request.path_info.split('/')
|
27
34
|
@url_chain.shift if @url_chain[0] == ''
|
@@ -49,7 +56,7 @@ module RESTRack
|
|
49
56
|
@active_controller = instantiate_controller( @active_resource_name )
|
50
57
|
end
|
51
58
|
|
52
|
-
# Send out the typed resource's output
|
59
|
+
# Send out the typed resource's output.
|
53
60
|
def response
|
54
61
|
RESTRack.log.debug "{#{@request_id}} Retrieving Output"
|
55
62
|
package( @active_controller.call )
|
@@ -75,23 +82,23 @@ module RESTRack
|
|
75
82
|
|
76
83
|
# Pull input data from POST body
|
77
84
|
def parse_body(request)
|
78
|
-
|
85
|
+
post_params = request.body.read
|
79
86
|
unless request.content_type.blank?
|
80
87
|
request_mime_type = MIME::Type.new( request.content_type )
|
81
88
|
if request_mime_type.like?( RESTRack.mime_type_for( :JSON ) )
|
82
|
-
|
89
|
+
post_params = JSON.parse( post_params ) rescue post_params
|
83
90
|
elsif request_mime_type.like?( RESTRack.mime_type_for( :XML ) )
|
84
|
-
|
91
|
+
post_params = XmlSimple.xml_in( post_params, 'ForceArray' => false ) rescue post_params
|
85
92
|
elsif request_mime_type.like?( RESTRack.mime_type_for( :YAML ) )
|
86
|
-
|
93
|
+
post_params = YAML.parse( post_params ) rescue post_params
|
87
94
|
end
|
88
95
|
end
|
89
|
-
RESTRack.log.debug "{#{@request_id}} #{request_mime_type.to_s} data in:\n" +
|
90
|
-
|
96
|
+
RESTRack.log.debug "{#{@request_id}} #{request_mime_type.to_s} data in:\n" + post_params.pretty_inspect
|
97
|
+
post_params
|
91
98
|
end
|
92
99
|
|
93
|
-
def
|
94
|
-
|
100
|
+
def parse_query_string(request)
|
101
|
+
get_params = request.GET
|
95
102
|
end
|
96
103
|
|
97
104
|
# Determine the MIME type of the request from the extension provided.
|
@@ -114,7 +121,7 @@ module RESTRack
|
|
114
121
|
RESTRack.log.debug "{#{@request_id}} Locating Resource #{resource_name}"
|
115
122
|
begin
|
116
123
|
return RESTRack.controller_class_for( resource_name ).__init(self)
|
117
|
-
rescue
|
124
|
+
rescue Exception => e
|
118
125
|
raise HTTP404ResourceNotFound, "The resource #{RESTRack::CONFIG[:SERVICE_NAME]}::#{RESTRack.controller_name(resource_name)} could not be instantiated."
|
119
126
|
end
|
120
127
|
end
|
@@ -138,6 +145,11 @@ module RESTRack
|
|
138
145
|
else
|
139
146
|
@output = data
|
140
147
|
end
|
148
|
+
if @output.respond_to?(:each)
|
149
|
+
return @output
|
150
|
+
else
|
151
|
+
return [@output]
|
152
|
+
end
|
141
153
|
end
|
142
154
|
|
143
155
|
# Use Builder to generate the XML.
|
data/lib/restrack/version.rb
CHANGED
data/lib/restrack/web_service.rb
CHANGED
@@ -37,19 +37,19 @@ module RESTRack
|
|
37
37
|
end
|
38
38
|
case
|
39
39
|
when exception.is_a?( HTTP400BadRequest )
|
40
|
-
return [400, {'Content-Type' => 'text/plain'}, exception.message
|
40
|
+
return [400, {'Content-Type' => 'text/plain'}, [exception.message || "The request cannot be fulfilled due to bad syntax."] ]
|
41
41
|
when exception.is_a?( HTTP401Unauthorized )
|
42
|
-
return [401, {'Content-Type' => 'text/plain'}, exception.message
|
42
|
+
return [401, {'Content-Type' => 'text/plain'}, [exception.message || "You have failed authentication for access to the resource."] ]
|
43
43
|
when exception.is_a?( HTTP403Forbidden )
|
44
|
-
return [403, {'Content-Type' => 'text/plain'}, exception.message
|
44
|
+
return [403, {'Content-Type' => 'text/plain'}, [exception.message || "You are forbidden to access that resource."] ]
|
45
45
|
when exception.is_a?( HTTP404ResourceNotFound )
|
46
|
-
return [404, {'Content-Type' => 'text/plain'}, exception.message
|
46
|
+
return [404, {'Content-Type' => 'text/plain'}, [exception.message || "The resource you requested could not be found."] ]
|
47
47
|
when exception.is_a?( HTTP405MethodNotAllowed )
|
48
|
-
return [405, {'Content-Type' => 'text/plain'}, exception.message
|
48
|
+
return [405, {'Content-Type' => 'text/plain'}, [exception.message || "The resource you requested does not support the request method provided."] ]
|
49
49
|
when exception.is_a?( HTTP409Conflict )
|
50
|
-
return [409, {'Content-Type' => 'text/plain'}, exception.message
|
50
|
+
return [409, {'Content-Type' => 'text/plain'}, [exception.message || "The resource you requested is in a conflicted state."] ]
|
51
51
|
when exception.is_a?( HTTP410Gone )
|
52
|
-
return [410, {'Content-Type' => 'text/plain'}, exception.message
|
52
|
+
return [410, {'Content-Type' => 'text/plain'}, [exception.message || "The resource you requested is no longer available."] ]
|
53
53
|
else # HTTP500ServerError
|
54
54
|
msg = exception.message + "\n\n" + exception.backtrace.join("\n")
|
55
55
|
if resource_request && resource_request.request_id
|
@@ -57,7 +57,7 @@ module RESTRack
|
|
57
57
|
else
|
58
58
|
RESTRack.log.error msg
|
59
59
|
end
|
60
|
-
return [500, {'Content-Type' => 'text/plain'}, msg ]
|
60
|
+
return [500, {'Content-Type' => 'text/plain'}, [msg] ]
|
61
61
|
end # case Exception
|
62
62
|
end # method caught
|
63
63
|
|
@@ -20,6 +20,6 @@
|
|
20
20
|
:DEFAULT_RESOURCE: bazu
|
21
21
|
|
22
22
|
# These are the resources which can be accessed from the root of your web service. If left empty, all resources are available at the root.
|
23
|
-
:ROOT_RESOURCE_ACCEPT: [ foo_bar ]
|
23
|
+
:ROOT_RESOURCE_ACCEPT: [ foo_bar, errors ]
|
24
24
|
# These are the resources which cannot be accessed from the root of your web service. Use either this or ROOT_RESOURCE_ACCEPT as a blacklist or whitelist to establish routing (relationships defined in resource controllers define further routing).
|
25
25
|
:ROOT_RESOURCE_DENY: [ baz ]
|
@@ -0,0 +1,46 @@
|
|
1
|
+
class SampleApp::ErrorsController < RESTRack::ResourceController
|
2
|
+
|
3
|
+
#module HTTPStatus
|
4
|
+
# class HTTP400BadRequest < Exception; end
|
5
|
+
# class HTTP401Unauthorized < Exception; end
|
6
|
+
# class HTTP403Forbidden < Exception; end
|
7
|
+
# class HTTP404ResourceNotFound < Exception; end
|
8
|
+
# class HTTP405MethodNotAllowed < Exception; end
|
9
|
+
# class HTTP409Conflict < Exception; end
|
10
|
+
# class HTTP410Gone < Exception; end
|
11
|
+
# class HTTP500ServerError < Exception; end
|
12
|
+
#end
|
13
|
+
|
14
|
+
def bad_request
|
15
|
+
raise HTTP400BadRequest, 'tester'
|
16
|
+
end
|
17
|
+
|
18
|
+
def unauthorized
|
19
|
+
raise HTTP401Unauthorized, 'tester'
|
20
|
+
end
|
21
|
+
|
22
|
+
def forbidden
|
23
|
+
raise HTTP403Forbidden, 'tester'
|
24
|
+
end
|
25
|
+
|
26
|
+
def resource_not_found
|
27
|
+
raise HTTP404ResourceNotFound, 'tester'
|
28
|
+
end
|
29
|
+
|
30
|
+
def method_not_allowed
|
31
|
+
raise HTTP405MethodNotAllowed, 'tester'
|
32
|
+
end
|
33
|
+
|
34
|
+
def conflict
|
35
|
+
raise HTTP409Conflict, 'tester'
|
36
|
+
end
|
37
|
+
|
38
|
+
def gone
|
39
|
+
raise HTTP410Gone, 'tester'
|
40
|
+
end
|
41
|
+
|
42
|
+
def server_error
|
43
|
+
raise HTTP500ServerError, 'tester'
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
@@ -24,7 +24,7 @@ class SampleApp::FooBarController < RESTRack::ResourceController
|
|
24
24
|
has_relationships_to( :baza, :as => :children ) do |id|
|
25
25
|
[1,2,3,4,5,6,7,8,9]
|
26
26
|
end
|
27
|
-
|
27
|
+
|
28
28
|
has_defined_relationships_to( :baza, :as => :def ) do |id|
|
29
29
|
[1,8,9,17]
|
30
30
|
end
|
@@ -97,17 +97,17 @@ class SampleApp::FooBarController < RESTRack::ResourceController
|
|
97
97
|
end
|
98
98
|
|
99
99
|
def echo
|
100
|
-
return @
|
100
|
+
return @post_params
|
101
101
|
end
|
102
|
-
|
102
|
+
|
103
103
|
def echo_get
|
104
104
|
return @params.merge({ 'get?' => @resource_request.request.get?.to_s })
|
105
105
|
end
|
106
|
-
|
106
|
+
|
107
107
|
def custom_entity(id)
|
108
108
|
return id
|
109
109
|
end
|
110
|
-
|
110
|
+
|
111
111
|
def custom_collection
|
112
112
|
return [1,1,2,3,5,8,13,21,34]
|
113
113
|
end
|
@@ -19,7 +19,7 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
19
19
|
output = @ws.call(env)
|
20
20
|
end
|
21
21
|
test_val = { :foo => 'bar', :baz => 123 }.to_json
|
22
|
-
assert_equal test_val, output[2]
|
22
|
+
assert_equal test_val, output[2][0]
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_update
|
@@ -31,7 +31,7 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
31
31
|
output = @ws.call(env)
|
32
32
|
end
|
33
33
|
test_val = { :success => true }.to_json
|
34
|
-
assert_equal test_val, output[2]
|
34
|
+
assert_equal test_val, output[2][0]
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_add
|
@@ -43,7 +43,7 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
43
43
|
output = @ws.call(env)
|
44
44
|
end
|
45
45
|
test_val = { :success => true }.to_json
|
46
|
-
assert_equal test_val, output[2]
|
46
|
+
assert_equal test_val, output[2][0]
|
47
47
|
end
|
48
48
|
|
49
49
|
def test_destroy
|
@@ -55,7 +55,7 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
55
55
|
output = @ws.call(env)
|
56
56
|
end
|
57
57
|
test_val = { :success => true }.to_json
|
58
|
-
assert_equal test_val, output[2]
|
58
|
+
assert_equal test_val, output[2][0]
|
59
59
|
end
|
60
60
|
|
61
61
|
|
@@ -68,7 +68,7 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
68
68
|
output = @ws.call(env)
|
69
69
|
end
|
70
70
|
test_val = [1,2,3,4,5,6,7].to_json
|
71
|
-
assert_equal test_val, output[2]
|
71
|
+
assert_equal test_val, output[2][0]
|
72
72
|
end
|
73
73
|
|
74
74
|
def test_replace
|
@@ -80,7 +80,7 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
80
80
|
output = @ws.call(env)
|
81
81
|
end
|
82
82
|
test_val = { :success => true }.to_json
|
83
|
-
assert_equal test_val, output[2]
|
83
|
+
assert_equal test_val, output[2][0]
|
84
84
|
end
|
85
85
|
|
86
86
|
def test_create
|
@@ -92,7 +92,7 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
92
92
|
output = @ws.call(env)
|
93
93
|
end
|
94
94
|
test_val = { :success => true }.to_json
|
95
|
-
assert_equal test_val, output[2]
|
95
|
+
assert_equal test_val, output[2][0]
|
96
96
|
end
|
97
97
|
|
98
98
|
def test_drop
|
@@ -104,7 +104,7 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
104
104
|
output = @ws.call(env)
|
105
105
|
end
|
106
106
|
test_val = { :success => true }.to_json
|
107
|
-
assert_equal test_val, output[2]
|
107
|
+
assert_equal test_val, output[2][0]
|
108
108
|
end
|
109
109
|
|
110
110
|
def test_custom_entity_action
|
@@ -116,9 +116,9 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
116
116
|
output = @ws.call(env)
|
117
117
|
end
|
118
118
|
test_val = '7476'.to_json
|
119
|
-
assert_equal test_val, output[2]
|
119
|
+
assert_equal test_val, output[2][0]
|
120
120
|
end
|
121
|
-
|
121
|
+
|
122
122
|
def test_custom_collection_action
|
123
123
|
env = Rack::MockRequest.env_for('/foo_bar/custom_collection', {
|
124
124
|
:method => 'GET'
|
@@ -128,7 +128,7 @@ class SampleApp::TestControllerActions < Test::Unit::TestCase
|
|
128
128
|
output = @ws.call(env)
|
129
129
|
end
|
130
130
|
test_val = [1,1,2,3,5,8,13,21,34].to_json
|
131
|
-
assert_equal test_val, output[2]
|
131
|
+
assert_equal test_val, output[2][0]
|
132
132
|
end
|
133
133
|
|
134
134
|
def test_missing
|
@@ -19,7 +19,7 @@ class SampleApp::TestControllerInputs < Test::Unit::TestCase
|
|
19
19
|
output = @ws.call(env)
|
20
20
|
end
|
21
21
|
test_val = { :test => '1', :hello => 'world', 'get?' => 'true' }.to_json
|
22
|
-
assert_equal test_val, output[2]
|
22
|
+
assert_equal test_val, output[2][0]
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_FUBAR_params
|
@@ -31,7 +31,7 @@ class SampleApp::TestControllerInputs < Test::Unit::TestCase
|
|
31
31
|
output = @ws.call(env)
|
32
32
|
end
|
33
33
|
test_val = { :test => '1', :hello => 'world', 'get?' => 'false' }.to_json
|
34
|
-
assert_equal test_val, output[2]
|
34
|
+
assert_equal test_val, output[2][0]
|
35
35
|
end
|
36
36
|
|
37
37
|
def test_post_no_content_type
|
@@ -44,7 +44,7 @@ class SampleApp::TestControllerInputs < Test::Unit::TestCase
|
|
44
44
|
assert_nothing_raised do
|
45
45
|
output = @ws.call(env)
|
46
46
|
end
|
47
|
-
assert_equal test_val.to_json, output[2] # will be converted to json because of default response type
|
47
|
+
assert_equal test_val.to_json, output[2][0] # will be converted to json because of default response type
|
48
48
|
end
|
49
49
|
|
50
50
|
def test_post_json
|
@@ -58,7 +58,7 @@ class SampleApp::TestControllerInputs < Test::Unit::TestCase
|
|
58
58
|
assert_nothing_raised do
|
59
59
|
output = @ws.call(env)
|
60
60
|
end
|
61
|
-
assert_equal test_val, output[2]
|
61
|
+
assert_equal test_val, output[2][0]
|
62
62
|
end
|
63
63
|
|
64
64
|
def test_post_xml
|
@@ -72,7 +72,7 @@ class SampleApp::TestControllerInputs < Test::Unit::TestCase
|
|
72
72
|
assert_nothing_raised do
|
73
73
|
output = @ws.call(env)
|
74
74
|
end
|
75
|
-
assert_equal test_val, output[2]
|
75
|
+
assert_equal test_val, output[2][0]
|
76
76
|
end
|
77
77
|
|
78
78
|
def test_post_text
|
@@ -86,6 +86,6 @@ class SampleApp::TestControllerInputs < Test::Unit::TestCase
|
|
86
86
|
assert_nothing_raised do
|
87
87
|
output = @ws.call(env)
|
88
88
|
end
|
89
|
-
assert_equal test_val, output[2]
|
89
|
+
assert_equal test_val, output[2][0]
|
90
90
|
end
|
91
91
|
end
|
@@ -19,7 +19,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
19
19
|
output = @ws.call(env)
|
20
20
|
end
|
21
21
|
test_val = { :BAZ => 'ALOHA!' }.to_json
|
22
|
-
assert_equal test_val, output[2]
|
22
|
+
assert_equal test_val, output[2][0]
|
23
23
|
|
24
24
|
env = Rack::MockRequest.env_for('/foo_bar/133/bata/abc', {
|
25
25
|
:method => 'GET'
|
@@ -29,7 +29,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
29
29
|
output = @ws.call(env)
|
30
30
|
end
|
31
31
|
test_val = { :OTHER => 'YUP' }.to_json
|
32
|
-
assert_equal test_val, output[2]
|
32
|
+
assert_equal test_val, output[2][0]
|
33
33
|
|
34
34
|
env = Rack::MockRequest.env_for('/foo_bar/144/bata/', {
|
35
35
|
:method => 'GET'
|
@@ -39,7 +39,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
39
39
|
output = @ws.call(env)
|
40
40
|
end
|
41
41
|
test_val = [1,2,3,4,5].to_json
|
42
|
-
assert_equal test_val, output[2]
|
42
|
+
assert_equal test_val, output[2][0]
|
43
43
|
|
44
44
|
env = Rack::MockRequest.env_for('/foo_bar/144/other_bata', {
|
45
45
|
:method => 'GET'
|
@@ -49,7 +49,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
49
49
|
output = @ws.call(env)
|
50
50
|
end
|
51
51
|
test_val = [1,2,3,4,5].to_json
|
52
|
-
assert_equal test_val, output[2]
|
52
|
+
assert_equal test_val, output[2][0]
|
53
53
|
end
|
54
54
|
|
55
55
|
def test_has_relationship_to
|
@@ -61,7 +61,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
61
61
|
output = @ws.call(env)
|
62
62
|
end
|
63
63
|
test_val = { :BAZ => 'ALOHA!' }.to_json
|
64
|
-
assert_equal test_val, output[2]
|
64
|
+
assert_equal test_val, output[2][0]
|
65
65
|
|
66
66
|
env = Rack::MockRequest.env_for('/foo_bar/133/baz', {
|
67
67
|
:method => 'GET'
|
@@ -71,7 +71,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
71
71
|
output = @ws.call(env)
|
72
72
|
end
|
73
73
|
test_val = { :OTHER => 'YUP' }.to_json
|
74
|
-
assert_equal test_val, output[2]
|
74
|
+
assert_equal test_val, output[2][0]
|
75
75
|
|
76
76
|
env = Rack::MockRequest.env_for('/foo_bar/144/baz/', {
|
77
77
|
:method => 'GET'
|
@@ -81,7 +81,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
81
81
|
output = @ws.call(env)
|
82
82
|
end
|
83
83
|
test_val = { :BAZ => 'ALOHA!' }.to_json
|
84
|
-
assert_equal test_val, output[2]
|
84
|
+
assert_equal test_val, output[2][0]
|
85
85
|
|
86
86
|
#------
|
87
87
|
|
@@ -93,7 +93,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
93
93
|
output = @ws.call(env)
|
94
94
|
end
|
95
95
|
test_val = { :WOM => 'NOBAT!' }.to_json
|
96
|
-
assert_equal test_val, output[2]
|
96
|
+
assert_equal test_val, output[2][0]
|
97
97
|
|
98
98
|
env = Rack::MockRequest.env_for('/foo_bar/133/slugger', {
|
99
99
|
:method => 'GET'
|
@@ -103,7 +103,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
103
103
|
output = @ws.call(env)
|
104
104
|
end
|
105
105
|
test_val = { :SUHWING => 'BATTER' }.to_json
|
106
|
-
assert_equal test_val, output[2]
|
106
|
+
assert_equal test_val, output[2][0]
|
107
107
|
|
108
108
|
env = Rack::MockRequest.env_for('/foo_bar/144/slugger/', {
|
109
109
|
:method => 'GET'
|
@@ -113,7 +113,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
113
113
|
output = @ws.call(env)
|
114
114
|
end
|
115
115
|
test_val = { :WOM => 'NOBAT!' }.to_json
|
116
|
-
assert_equal test_val, output[2]
|
116
|
+
assert_equal test_val, output[2][0]
|
117
117
|
end
|
118
118
|
|
119
119
|
def test_has_relationships_to
|
@@ -125,7 +125,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
125
125
|
output = @ws.call(env)
|
126
126
|
end
|
127
127
|
test_val = { :BAZA => 'YESSIR' }.to_json
|
128
|
-
assert_equal test_val, output[2]
|
128
|
+
assert_equal test_val, output[2][0]
|
129
129
|
|
130
130
|
env = Rack::MockRequest.env_for('/foo_bar/133/children/7', {
|
131
131
|
:method => 'GET'
|
@@ -135,7 +135,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
135
135
|
output = @ws.call(env)
|
136
136
|
end
|
137
137
|
test_val = { :NOWAY => 'JOSE' }.to_json
|
138
|
-
assert_equal test_val, output[2]
|
138
|
+
assert_equal test_val, output[2][0]
|
139
139
|
|
140
140
|
env = Rack::MockRequest.env_for('/foo_bar/133/children/11', {
|
141
141
|
:method => 'GET'
|
@@ -157,7 +157,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
157
157
|
output = @ws.call(env)
|
158
158
|
end
|
159
159
|
test_val = { :BAZA => 'YESSIR' }.to_json
|
160
|
-
assert_equal test_val, output[2]
|
160
|
+
assert_equal test_val, output[2][0]
|
161
161
|
|
162
162
|
env = Rack::MockRequest.env_for('/foo_bar/133/def/8', {
|
163
163
|
:method => 'GET'
|
@@ -167,7 +167,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
167
167
|
output = @ws.call(env)
|
168
168
|
end
|
169
169
|
test_val = { :NOWAY => 'JOSE' }.to_json
|
170
|
-
assert_equal test_val, output[2]
|
170
|
+
assert_equal test_val, output[2][0]
|
171
171
|
|
172
172
|
# this should 404
|
173
173
|
env = Rack::MockRequest.env_for('/foo_bar/133/def/11', {
|
@@ -199,7 +199,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
199
199
|
output = @ws.call(env)
|
200
200
|
end
|
201
201
|
test_val = '1'
|
202
|
-
assert_equal test_val, output[2]
|
202
|
+
assert_equal test_val, output[2][0]
|
203
203
|
|
204
204
|
env = Rack::MockRequest.env_for('/foo_bar/133/maps/second', {
|
205
205
|
:method => 'GET'
|
@@ -209,7 +209,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
209
209
|
output = @ws.call(env)
|
210
210
|
end
|
211
211
|
test_val = '0'
|
212
|
-
assert_equal test_val, output[2]
|
212
|
+
assert_equal test_val, output[2][0]
|
213
213
|
|
214
214
|
env = Rack::MockRequest.env_for('/foo_bar/133/maps/third', {
|
215
215
|
:method => 'GET'
|
@@ -219,7 +219,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
219
219
|
output = @ws.call(env)
|
220
220
|
end
|
221
221
|
test_val = '0'
|
222
|
-
assert_equal test_val, output[2]
|
222
|
+
assert_equal test_val, output[2][0]
|
223
223
|
end
|
224
224
|
|
225
225
|
def test_keyed_with_type
|
@@ -232,7 +232,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
232
232
|
output = @ws.call(env)
|
233
233
|
end
|
234
234
|
test_val = { :BAZA => 'YESSIR' }.to_json
|
235
|
-
assert_equal test_val, output[2]
|
235
|
+
assert_equal test_val, output[2][0]
|
236
236
|
end
|
237
237
|
|
238
238
|
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'test/unit'
|
3
|
+
require 'rack/test'
|
4
|
+
require File.expand_path(File.join(File.dirname(__FILE__),'..','loader'))
|
5
|
+
require 'pp'
|
6
|
+
|
7
|
+
class SampleApp::TestControllerActions < Test::Unit::TestCase
|
8
|
+
|
9
|
+
def setup
|
10
|
+
@ws = SampleApp::WebService.new
|
11
|
+
end
|
12
|
+
|
13
|
+
#module HTTPStatus
|
14
|
+
# class HTTP400BadRequest < Exception; end
|
15
|
+
# class HTTP401Unauthorized < Exception; end
|
16
|
+
# class HTTP403Forbidden < Exception; end
|
17
|
+
# class HTTP404ResourceNotFound < Exception; end
|
18
|
+
# class HTTP405MethodNotAllowed < Exception; end
|
19
|
+
# class HTTP409Conflict < Exception; end
|
20
|
+
# class HTTP410Gone < Exception; end
|
21
|
+
# class HTTP500ServerError < Exception; end
|
22
|
+
#end
|
23
|
+
|
24
|
+
def test_bad_request
|
25
|
+
response_code = 400
|
26
|
+
env = Rack::MockRequest.env_for('/errors/bad_request', {
|
27
|
+
:method => 'GET'
|
28
|
+
})
|
29
|
+
output = ''
|
30
|
+
assert_nothing_raised do
|
31
|
+
output = @ws.call(env)
|
32
|
+
end
|
33
|
+
assert_equal response_code, output[0]
|
34
|
+
assert_equal 'tester', output[2][0]
|
35
|
+
puts output.inspect
|
36
|
+
end
|
37
|
+
|
38
|
+
def test_unauthorized
|
39
|
+
response_code = 401
|
40
|
+
env = Rack::MockRequest.env_for('/errors/unauthorized', {
|
41
|
+
:method => 'GET'
|
42
|
+
})
|
43
|
+
output = ''
|
44
|
+
assert_nothing_raised do
|
45
|
+
output = @ws.call(env)
|
46
|
+
end
|
47
|
+
assert_equal response_code, output[0]
|
48
|
+
end
|
49
|
+
|
50
|
+
def test_forbidden
|
51
|
+
response_code = 403
|
52
|
+
env = Rack::MockRequest.env_for('/errors/forbidden', {
|
53
|
+
:method => 'GET'
|
54
|
+
})
|
55
|
+
output = ''
|
56
|
+
assert_nothing_raised do
|
57
|
+
output = @ws.call(env)
|
58
|
+
end
|
59
|
+
assert_equal response_code, output[0]
|
60
|
+
end
|
61
|
+
|
62
|
+
def test_resource_not_found
|
63
|
+
response_code = 404
|
64
|
+
env = Rack::MockRequest.env_for('/errors/resource_not_found', {
|
65
|
+
:method => 'GET'
|
66
|
+
})
|
67
|
+
output = ''
|
68
|
+
assert_nothing_raised do
|
69
|
+
output = @ws.call(env)
|
70
|
+
end
|
71
|
+
assert_equal response_code, output[0]
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_method_not_allowed
|
75
|
+
response_code = 405
|
76
|
+
env = Rack::MockRequest.env_for('/errors/method_not_allowed', {
|
77
|
+
:method => 'GET'
|
78
|
+
})
|
79
|
+
output = ''
|
80
|
+
assert_nothing_raised do
|
81
|
+
output = @ws.call(env)
|
82
|
+
end
|
83
|
+
assert_equal response_code, output[0]
|
84
|
+
end
|
85
|
+
|
86
|
+
def test_conflict
|
87
|
+
response_code = 409
|
88
|
+
env = Rack::MockRequest.env_for('/errors/conflict', {
|
89
|
+
:method => 'GET'
|
90
|
+
})
|
91
|
+
output = ''
|
92
|
+
assert_nothing_raised do
|
93
|
+
output = @ws.call(env)
|
94
|
+
end
|
95
|
+
assert_equal response_code, output[0]
|
96
|
+
end
|
97
|
+
|
98
|
+
def test_gone
|
99
|
+
response_code = 410
|
100
|
+
env = Rack::MockRequest.env_for('/errors/gone', {
|
101
|
+
:method => 'GET'
|
102
|
+
})
|
103
|
+
output = ''
|
104
|
+
assert_nothing_raised do
|
105
|
+
output = @ws.call(env)
|
106
|
+
end
|
107
|
+
assert_equal response_code, output[0]
|
108
|
+
end
|
109
|
+
|
110
|
+
def test_server_error
|
111
|
+
response_code = 500
|
112
|
+
# This will/should spam the log
|
113
|
+
env = Rack::MockRequest.env_for('/errors/server_error', {
|
114
|
+
:method => 'GET'
|
115
|
+
})
|
116
|
+
output = ''
|
117
|
+
assert_nothing_raised do
|
118
|
+
output = @ws.call(env)
|
119
|
+
end
|
120
|
+
assert_equal response_code, output[0]
|
121
|
+
end
|
122
|
+
|
123
|
+
end
|
@@ -19,7 +19,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
19
19
|
output = @ws.call(env)
|
20
20
|
end
|
21
21
|
test_val = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><data><foo>bar</foo><baz>123</baz></data>"
|
22
|
-
assert_equal test_val, output[2]
|
22
|
+
assert_equal test_val, output[2][0]
|
23
23
|
end
|
24
24
|
|
25
25
|
def test_show_default_xml
|
@@ -31,7 +31,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
31
31
|
output = @ws.call(env)
|
32
32
|
end
|
33
33
|
test_val = XmlSimple.xml_out([1,2,3,4,5,6,7], 'AttrPrefix' => true, 'XmlDeclaration' => true, 'NoIndent' => true)
|
34
|
-
assert_equal test_val, output[2]
|
34
|
+
assert_equal test_val, output[2][0]
|
35
35
|
|
36
36
|
env = Rack::MockRequest.env_for('/foo_bar.xml', {
|
37
37
|
:method => 'GET'
|
@@ -41,7 +41,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
41
41
|
output = @ws.call(env)
|
42
42
|
end
|
43
43
|
test_val = XmlSimple.xml_out([1,2,3,4,5,6,7], 'AttrPrefix' => true, 'XmlDeclaration' => true, 'NoIndent' => true)
|
44
|
-
assert_equal test_val, output[2]
|
44
|
+
assert_equal test_val, output[2][0]
|
45
45
|
end
|
46
46
|
|
47
47
|
def test_show_json
|
@@ -53,7 +53,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
53
53
|
output = @ws.call(env)
|
54
54
|
end
|
55
55
|
test_val = { :foo => 'bar', :baz => 123 }.to_json
|
56
|
-
assert_equal test_val, output[2]
|
56
|
+
assert_equal test_val, output[2][0]
|
57
57
|
end
|
58
58
|
|
59
59
|
def test_complex_data_structure_json
|
@@ -65,7 +65,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
65
65
|
output = @ws.call(env)
|
66
66
|
end
|
67
67
|
test_val = "{\"foo\":\"abc\",\"bar\":\"123\",\"baz\":456,\"more\":{\"one\":1,\"two\":[1,2],\"three\":\"deep_fu\"}}"
|
68
|
-
assert_equal test_val, output[2]
|
68
|
+
assert_equal test_val, output[2][0]
|
69
69
|
|
70
70
|
env = Rack::MockRequest.env_for('/foo_bar/42', {
|
71
71
|
:method => 'GET'
|
@@ -84,7 +84,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
84
84
|
4 => :four
|
85
85
|
}
|
86
86
|
}.to_json
|
87
|
-
assert_equal test_val, output[2]
|
87
|
+
assert_equal test_val, output[2][0]
|
88
88
|
end
|
89
89
|
|
90
90
|
def test_complex_data_structure_xml
|
@@ -96,7 +96,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
96
96
|
output = @ws.call(env)
|
97
97
|
end
|
98
98
|
test_val = "<?xml version='1.0' standalone='yes'?>\n<opt><foo>abc</foo><bar>123</bar><baz>456</baz><more><one>1</one><two>1</two><two>2</two><three>deep_fu</three></more></opt>"
|
99
|
-
assert_equal test_val, output[2]
|
99
|
+
assert_equal test_val, output[2][0]
|
100
100
|
|
101
101
|
env = Rack::MockRequest.env_for('/foo_bar/42/complex_show_xml_no_builder.xml', {
|
102
102
|
:method => 'GET'
|
@@ -115,7 +115,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
115
115
|
4 => :four
|
116
116
|
}
|
117
117
|
}, 'AttrPrefix' => true, 'XmlDeclaration' => true, 'NoIndent' => true)
|
118
|
-
assert_equal test_val, output[2]
|
118
|
+
assert_equal test_val, output[2][0]
|
119
119
|
end
|
120
120
|
|
121
121
|
end
|
@@ -19,7 +19,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
19
19
|
output = @ws.call(env)
|
20
20
|
end
|
21
21
|
test_val = { :BAZ => 'ALOHA!' }.to_json
|
22
|
-
assert_equal test_val, output[2]
|
22
|
+
assert_equal test_val, output[2][0]
|
23
23
|
|
24
24
|
env = Rack::MockRequest.env_for('/foo_bar/133/baz', {
|
25
25
|
:method => 'GET'
|
@@ -29,7 +29,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
29
29
|
output = @ws.call(env)
|
30
30
|
end
|
31
31
|
test_val = { :OTHER => 'YUP' }.to_json
|
32
|
-
assert_equal test_val, output[2]
|
32
|
+
assert_equal test_val, output[2][0]
|
33
33
|
|
34
34
|
env = Rack::MockRequest.env_for('/foo_bar/144/baz/', {
|
35
35
|
:method => 'GET'
|
@@ -39,7 +39,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
39
39
|
output = @ws.call(env)
|
40
40
|
end
|
41
41
|
test_val = { :BAZ => 'ALOHA!' }.to_json
|
42
|
-
assert_equal test_val, output[2]
|
42
|
+
assert_equal test_val, output[2][0]
|
43
43
|
end
|
44
44
|
|
45
45
|
def test_has_relationships_to
|
@@ -51,7 +51,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
51
51
|
output = @ws.call(env)
|
52
52
|
end
|
53
53
|
test_val = { :BAZA => 'YESSIR' }.to_json
|
54
|
-
assert_equal test_val, output[2]
|
54
|
+
assert_equal test_val, output[2][0]
|
55
55
|
|
56
56
|
env = Rack::MockRequest.env_for('/foo_bar/133/children/8', {
|
57
57
|
:method => 'GET'
|
@@ -61,7 +61,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
61
61
|
output = @ws.call(env)
|
62
62
|
end
|
63
63
|
test_val = { :NOWAY => 'JOSE' }.to_json
|
64
|
-
assert_equal test_val, output[2]
|
64
|
+
assert_equal test_val, output[2][0]
|
65
65
|
|
66
66
|
env = Rack::MockRequest.env_for('/foo_bar/133/children/11', {
|
67
67
|
:method => 'GET'
|
@@ -82,7 +82,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
82
82
|
output = @ws.call(env)
|
83
83
|
end
|
84
84
|
test_val = 1.to_json
|
85
|
-
assert_equal test_val, output[2]
|
85
|
+
assert_equal test_val, output[2][0]
|
86
86
|
|
87
87
|
env = Rack::MockRequest.env_for('/foo_bar/133/maps/second', {
|
88
88
|
:method => 'GET'
|
@@ -92,7 +92,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
92
92
|
output = @ws.call(env)
|
93
93
|
end
|
94
94
|
test_val = 0.to_json
|
95
|
-
assert_equal test_val, output[2]
|
95
|
+
assert_equal test_val, output[2][0]
|
96
96
|
|
97
97
|
env = Rack::MockRequest.env_for('/foo_bar/133/maps/third', {
|
98
98
|
:method => 'GET'
|
@@ -102,7 +102,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
102
102
|
output = @ws.call(env)
|
103
103
|
end
|
104
104
|
test_val = 0.to_json
|
105
|
-
assert_equal test_val, output[2]
|
105
|
+
assert_equal test_val, output[2][0]
|
106
106
|
end
|
107
107
|
|
108
108
|
def test_keyed_with_type
|
@@ -115,7 +115,7 @@ class SampleApp::TestControllerModifiers < Test::Unit::TestCase
|
|
115
115
|
output = @ws.call(env)
|
116
116
|
end
|
117
117
|
test_val = 1.to_json
|
118
|
-
assert_equal test_val, output[2]
|
118
|
+
assert_equal test_val, output[2][0]
|
119
119
|
end
|
120
120
|
|
121
121
|
end
|
@@ -20,7 +20,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
20
20
|
end
|
21
21
|
assert_equal 'text/x-yaml', output[1]['Content-Type']
|
22
22
|
test_val = YAML.dump( { :foo => '123', :baz => 'bat' } )
|
23
|
-
assert_equal test_val, output[2]
|
23
|
+
assert_equal test_val, output[2][0]
|
24
24
|
end
|
25
25
|
|
26
26
|
def test_text
|
@@ -33,7 +33,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
33
33
|
end
|
34
34
|
assert_equal 'text/plain', output[1]['Content-Type']
|
35
35
|
test_val = 'Hello 123!'
|
36
|
-
assert_equal test_val, output[2]
|
36
|
+
assert_equal test_val, output[2][0]
|
37
37
|
end
|
38
38
|
|
39
39
|
def test_image
|
@@ -45,7 +45,7 @@ class SampleApp::TestFormats < Test::Unit::TestCase
|
|
45
45
|
output = @ws.call(env)
|
46
46
|
end
|
47
47
|
assert_equal 'image/png', output[1]['Content-Type']
|
48
|
-
assert output[2].length
|
48
|
+
assert output[2][0].length
|
49
49
|
end
|
50
50
|
|
51
51
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: restrack
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.1.
|
4
|
+
version: 1.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-09-
|
12
|
+
date: 2011-09-14 00:00:00.000000000Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rack
|
16
|
-
requirement: &
|
16
|
+
requirement: &10175380 !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: *
|
24
|
+
version_requirements: *10175380
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rack-test
|
27
|
-
requirement: &
|
27
|
+
requirement: &10174660 !ruby/object:Gem::Requirement
|
28
28
|
none: false
|
29
29
|
requirements:
|
30
30
|
- - ! '>='
|
@@ -32,10 +32,10 @@ dependencies:
|
|
32
32
|
version: '0'
|
33
33
|
type: :development
|
34
34
|
prerelease: false
|
35
|
-
version_requirements: *
|
35
|
+
version_requirements: *10174660
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: i18n
|
38
|
-
requirement: &
|
38
|
+
requirement: &10173980 !ruby/object:Gem::Requirement
|
39
39
|
none: false
|
40
40
|
requirements:
|
41
41
|
- - ! '>='
|
@@ -43,10 +43,10 @@ dependencies:
|
|
43
43
|
version: '0'
|
44
44
|
type: :runtime
|
45
45
|
prerelease: false
|
46
|
-
version_requirements: *
|
46
|
+
version_requirements: *10173980
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: json
|
49
|
-
requirement: &
|
49
|
+
requirement: &10173340 !ruby/object:Gem::Requirement
|
50
50
|
none: false
|
51
51
|
requirements:
|
52
52
|
- - ! '>='
|
@@ -54,10 +54,10 @@ dependencies:
|
|
54
54
|
version: '0'
|
55
55
|
type: :runtime
|
56
56
|
prerelease: false
|
57
|
-
version_requirements: *
|
57
|
+
version_requirements: *10173340
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: xml-simple
|
60
|
-
requirement: &
|
60
|
+
requirement: &10172580 !ruby/object:Gem::Requirement
|
61
61
|
none: false
|
62
62
|
requirements:
|
63
63
|
- - ! '>='
|
@@ -65,10 +65,10 @@ dependencies:
|
|
65
65
|
version: 1.0.13
|
66
66
|
type: :runtime
|
67
67
|
prerelease: false
|
68
|
-
version_requirements: *
|
68
|
+
version_requirements: *10172580
|
69
69
|
- !ruby/object:Gem::Dependency
|
70
70
|
name: builder
|
71
|
-
requirement: &
|
71
|
+
requirement: &10171940 !ruby/object:Gem::Requirement
|
72
72
|
none: false
|
73
73
|
requirements:
|
74
74
|
- - ! '>='
|
@@ -76,10 +76,10 @@ dependencies:
|
|
76
76
|
version: '0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
|
-
version_requirements: *
|
79
|
+
version_requirements: *10171940
|
80
80
|
- !ruby/object:Gem::Dependency
|
81
81
|
name: activesupport
|
82
|
-
requirement: &
|
82
|
+
requirement: &10171240 !ruby/object:Gem::Requirement
|
83
83
|
none: false
|
84
84
|
requirements:
|
85
85
|
- - ! '>='
|
@@ -87,10 +87,10 @@ dependencies:
|
|
87
87
|
version: '0'
|
88
88
|
type: :runtime
|
89
89
|
prerelease: false
|
90
|
-
version_requirements: *
|
90
|
+
version_requirements: *10171240
|
91
91
|
- !ruby/object:Gem::Dependency
|
92
92
|
name: mime-types
|
93
|
-
requirement: &
|
93
|
+
requirement: &10170660 !ruby/object:Gem::Requirement
|
94
94
|
none: false
|
95
95
|
requirements:
|
96
96
|
- - ! '>='
|
@@ -98,7 +98,7 @@ dependencies:
|
|
98
98
|
version: '0'
|
99
99
|
type: :runtime
|
100
100
|
prerelease: false
|
101
|
-
version_requirements: *
|
101
|
+
version_requirements: *10170660
|
102
102
|
description: ! "\nRESTRack is a Rack-based MVC framework that makes it extremely easy
|
103
103
|
to develop RESTful data services. It is inspired by\nRails, and follows a few of
|
104
104
|
its conventions. But it has no routes file, routing relationships are done through\nsupplying
|
@@ -144,11 +144,13 @@ files:
|
|
144
144
|
- test/sample_app_1/controllers/baz_controller.rb
|
145
145
|
- test/sample_app_1/controllers/baza_controller.rb
|
146
146
|
- test/sample_app_1/controllers/bazu_controller.rb
|
147
|
+
- test/sample_app_1/controllers/errors_controller.rb
|
147
148
|
- test/sample_app_1/controllers/foo_bar_controller.rb
|
148
149
|
- test/sample_app_1/loader.rb
|
149
150
|
- test/sample_app_1/test/test_controller_actions.rb
|
150
151
|
- test/sample_app_1/test/test_controller_inputs.rb
|
151
152
|
- test/sample_app_1/test/test_controller_modifiers.rb
|
153
|
+
- test/sample_app_1/test/test_errors.rb
|
152
154
|
- test/sample_app_1/test/test_formats.rb
|
153
155
|
- test/sample_app_1/test/test_resource_request.rb
|
154
156
|
- test/sample_app_1/test/test_web_service.rb
|
@@ -202,7 +204,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
202
204
|
version: '0'
|
203
205
|
requirements: []
|
204
206
|
rubyforge_project: restrack
|
205
|
-
rubygems_version: 1.8.
|
207
|
+
rubygems_version: 1.8.10
|
206
208
|
signing_key:
|
207
209
|
specification_version: 3
|
208
210
|
summary: A lightweight MVC framework developed specifically for JSON (and XML) REST
|