wd_sinatra 0.0.2 → 0.1.0
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.md +21 -0
- data/lib/wd_sinatra/test_helpers.rb +7 -33
- data/lib/wd_sinatra/test_unit_helpers.rb +26 -0
- data/lib/wd_sinatra/version.rb +1 -1
- data/templates/Guardfile +1 -1
- data/templates/config/sinatra_config.rb +6 -0
- data/templates/lib/tasks/doc_generator/template.erb +1 -1
- metadata +65 -42
data/CHANGELOG.md
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
# Weasel Diesel Sinatra Changelog
|
2
|
+
|
3
|
+
|
4
|
+
## 0.1.0
|
5
|
+
|
6
|
+
* Updated `sinatra_config.rb` to automatically store exceptions in
|
7
|
+
`rack.exception` so rack middleware like airbrake can properly make
|
8
|
+
use of the exceptions without exposing any details to the end users.
|
9
|
+
|
10
|
+
* Added support for documenting the service params as they are defined.
|
11
|
+
(thanks rwfowler)
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
service.params do |p|
|
15
|
+
p.string :email, :doc => "Email address of the recipient."
|
16
|
+
end
|
17
|
+
```
|
18
|
+
|
19
|
+
* Started porting test helpers to facilitate API testing.
|
20
|
+
|
21
|
+
* Updated the guard files. (thanks drnic)
|
@@ -3,17 +3,11 @@ require 'test/unit'
|
|
3
3
|
require 'rack'
|
4
4
|
require 'rack/test'
|
5
5
|
require 'json'
|
6
|
+
require 'weasel_diesel'
|
6
7
|
require 'json_response_verification'
|
7
|
-
require File.join(File.dirname(__FILE__), '..', 'lib', 'bootloader')
|
8
8
|
|
9
|
-
require 'minitest/autorun'
|
10
|
-
|
11
|
-
ENV['NO_PRINT_ROUTES'] = 'true'
|
12
|
-
Bootloader.start
|
13
9
|
WeaselDiesel.send(:include, JSONResponseVerification)
|
14
10
|
|
15
|
-
ActiveRecord::Base.logger = nil
|
16
|
-
|
17
11
|
class Requester
|
18
12
|
include ::Rack::Test::Methods
|
19
13
|
|
@@ -26,8 +20,12 @@ module TestApi
|
|
26
20
|
module_function
|
27
21
|
|
28
22
|
URL_PLACEHOLDER = /\/*(:[a-z A-Z _]+)\/*/
|
29
|
-
|
30
|
-
|
23
|
+
if defined?(AuthHelpers::INTERNAL_X_HEADER)
|
24
|
+
INTERNAL_X_HEADER = AuthHelpers::INTERNAL_X_HEADER[/HTTP_(.*)/, 1] # strip the header marker added by Rack
|
25
|
+
end
|
26
|
+
if defined?(AuthHelpers::MOBILE_X_HEADER)
|
27
|
+
MOBILE_X_HEADER = AuthHelpers::MOBILE_X_HEADER[/HTTP_(.*)/, 1] # strip the header marker added by Rack
|
28
|
+
end
|
31
29
|
|
32
30
|
def request(verb, uri, params={}, headers=nil)
|
33
31
|
params ||= {}
|
@@ -178,27 +176,3 @@ class JsonWrapperResponse
|
|
178
176
|
|
179
177
|
def_delegators :rest_response, :code, :headers, :raw_headers, :cookies, :status, :errors
|
180
178
|
end
|
181
|
-
|
182
|
-
|
183
|
-
# Custom assertions
|
184
|
-
def assert_api_response(response=nil, message=nil)
|
185
|
-
response ||= TestApi.json_response
|
186
|
-
print response.rest_response.errors if response.status === 500
|
187
|
-
assert response.success?, message || ["Body: #{response.rest_response.body}", "Errors: #{response.errors}", "Status code: #{response.status}"].join("\n")
|
188
|
-
service = WSList.all.find{|s| s.verb == response.verb && s.url == response.uri[1..-1]}
|
189
|
-
raise "Service for (#{response.verb.upcase} #{response.uri[1..-1]}) not found" unless service
|
190
|
-
unless service.response.nodes.empty?
|
191
|
-
assert response.body.is_a?(Hash), "Invalid JSON response:\n#{response.body}"
|
192
|
-
valid, errors = service.validate_hash_response(response.body)
|
193
|
-
assert valid, errors.join(" & ") || message
|
194
|
-
end
|
195
|
-
end
|
196
|
-
|
197
|
-
def assert_api_response_with_redirection(redirection_url=nil)
|
198
|
-
response = TestApi.json_response
|
199
|
-
print response.rest_response.errors if response.status === 500
|
200
|
-
assert response.status == 302, "Redirection expect, but got #{response.status}"
|
201
|
-
if redirection_url
|
202
|
-
assert response.headers["location"], redirection_url
|
203
|
-
end
|
204
|
-
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
require 'wd_sinatra/test_helpers'
|
2
|
+
|
3
|
+
module TestUnitHelpers
|
4
|
+
# Custom assertions
|
5
|
+
def assert_api_response(response=nil, message=nil)
|
6
|
+
response ||= TestApi.json_response
|
7
|
+
print response.rest_response.errors if response.status === 500
|
8
|
+
assert response.success?, message || ["Body: #{response.rest_response.body}", "Errors: #{response.errors}", "Status code: #{response.status}"].join("\n")
|
9
|
+
service = WSList.all.find{|s| s.verb == response.verb && s.url == response.uri[1..-1]}
|
10
|
+
raise "Service for (#{response.verb.upcase} #{response.uri[1..-1]}) not found" unless service
|
11
|
+
unless service.response.nodes.empty?
|
12
|
+
assert response.body.is_a?(Hash), "Invalid JSON response:\n#{response.body}"
|
13
|
+
valid, errors = service.validate_hash_response(response.body)
|
14
|
+
assert valid, errors.join(" & ") || message
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def assert_api_response_with_redirection(redirection_url=nil)
|
19
|
+
response = TestApi.json_response
|
20
|
+
print response.rest_response.errors if response.status === 500
|
21
|
+
assert response.status == 302, "Redirection expect, but got #{response.status}"
|
22
|
+
if redirection_url
|
23
|
+
assert response.headers["location"], redirection_url
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
data/lib/wd_sinatra/version.rb
CHANGED
data/templates/Guardfile
CHANGED
@@ -10,3 +10,9 @@ set :raise_errors, false
|
|
10
10
|
# enable that option to run by calling this file automatically (without using the config.ru file)
|
11
11
|
# enable :run
|
12
12
|
use Rack::ContentLength
|
13
|
+
|
14
|
+
# Store the caught exception in the rack env so it can be used
|
15
|
+
# by 3rd party apps like airbrake.
|
16
|
+
error(Sinatra::Base::Exception) do |exception|
|
17
|
+
@env['rack.exception'] = exception
|
18
|
+
end
|
@@ -72,7 +72,7 @@
|
|
72
72
|
<% api.send(rule_meth).each do |rule| %>
|
73
73
|
<li>
|
74
74
|
<span class='label notice'><%= rule.name %></span> of type <span class='label success'><%= rule.options[:type] || 'String' %></span>
|
75
|
-
<% if desc = api.doc.params_doc[rule.name.to_sym] %>
|
75
|
+
<% if desc = (api.doc.params_doc[rule.name.to_sym] || rule.options[:doc]) %>
|
76
76
|
<%= desc %>
|
77
77
|
<% end %>
|
78
78
|
<% if options = rule.options[:options] %>
|
metadata
CHANGED
@@ -1,48 +1,62 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: wd_sinatra
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 27
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 0
|
10
|
+
version: 0.1.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Matt Aimonetti
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
17
|
+
|
18
|
+
date: 2012-05-03 00:00:00 Z
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
15
21
|
name: weasel_diesel
|
16
|
-
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
17
24
|
none: false
|
18
|
-
requirements:
|
19
|
-
- -
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
|
25
|
+
requirements:
|
26
|
+
- - ">="
|
27
|
+
- !ruby/object:Gem::Version
|
28
|
+
hash: 3
|
29
|
+
segments:
|
30
|
+
- 0
|
31
|
+
version: "0"
|
22
32
|
type: :runtime
|
23
|
-
|
24
|
-
|
25
|
-
- !ruby/object:Gem::Dependency
|
33
|
+
version_requirements: *id001
|
34
|
+
- !ruby/object:Gem::Dependency
|
26
35
|
name: thor
|
27
|
-
|
36
|
+
prerelease: false
|
37
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
28
38
|
none: false
|
29
|
-
requirements:
|
30
|
-
- -
|
31
|
-
- !ruby/object:Gem::Version
|
32
|
-
|
39
|
+
requirements:
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
hash: 3
|
43
|
+
segments:
|
44
|
+
- 0
|
45
|
+
version: "0"
|
33
46
|
type: :runtime
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
apps using the Weasel Diesel DSL
|
38
|
-
email:
|
47
|
+
version_requirements: *id002
|
48
|
+
description: Weasel-Diesel Sinatra app gem, allowing you to generate/update sinatra apps using the Weasel Diesel DSL
|
49
|
+
email:
|
39
50
|
- mattaimonetti@gmail.com
|
40
|
-
executables:
|
51
|
+
executables:
|
41
52
|
- wd_sinatra
|
42
53
|
extensions: []
|
54
|
+
|
43
55
|
extra_rdoc_files: []
|
44
|
-
|
56
|
+
|
57
|
+
files:
|
45
58
|
- .gitignore
|
59
|
+
- CHANGELOG.md
|
46
60
|
- Gemfile
|
47
61
|
- LICENSE
|
48
62
|
- README.md
|
@@ -52,6 +66,7 @@ files:
|
|
52
66
|
- lib/wd_sinatra/app_loader.rb
|
53
67
|
- lib/wd_sinatra/sinatra_ext.rb
|
54
68
|
- lib/wd_sinatra/test_helpers.rb
|
69
|
+
- lib/wd_sinatra/test_unit_helpers.rb
|
55
70
|
- lib/wd_sinatra/version.rb
|
56
71
|
- templates/Gemfile
|
57
72
|
- templates/Guardfile
|
@@ -127,28 +142,36 @@ files:
|
|
127
142
|
- wd-sinatra.gemspec
|
128
143
|
homepage: https://github.com/mattetti/wd_sinatra
|
129
144
|
licenses: []
|
145
|
+
|
130
146
|
post_install_message:
|
131
147
|
rdoc_options: []
|
132
|
-
|
148
|
+
|
149
|
+
require_paths:
|
133
150
|
- lib
|
134
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
151
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
135
152
|
none: false
|
136
|
-
requirements:
|
137
|
-
- -
|
138
|
-
- !ruby/object:Gem::Version
|
139
|
-
|
140
|
-
|
153
|
+
requirements:
|
154
|
+
- - ">="
|
155
|
+
- !ruby/object:Gem::Version
|
156
|
+
hash: 3
|
157
|
+
segments:
|
158
|
+
- 0
|
159
|
+
version: "0"
|
160
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
141
161
|
none: false
|
142
|
-
requirements:
|
143
|
-
- -
|
144
|
-
- !ruby/object:Gem::Version
|
145
|
-
|
162
|
+
requirements:
|
163
|
+
- - ">="
|
164
|
+
- !ruby/object:Gem::Version
|
165
|
+
hash: 3
|
166
|
+
segments:
|
167
|
+
- 0
|
168
|
+
version: "0"
|
146
169
|
requirements: []
|
170
|
+
|
147
171
|
rubyforge_project:
|
148
|
-
rubygems_version: 1.8.
|
172
|
+
rubygems_version: 1.8.18
|
149
173
|
signing_key:
|
150
174
|
specification_version: 3
|
151
|
-
summary: Weasel-Diesel Sinatra app gem, allowing you to generate/update sinatra apps
|
152
|
-
using the Weasel Diesel DSL
|
175
|
+
summary: Weasel-Diesel Sinatra app gem, allowing you to generate/update sinatra apps using the Weasel Diesel DSL
|
153
176
|
test_files: []
|
154
|
-
|
177
|
+
|