rack-spec 0.0.5 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,115 @@
1
+ {
2
+ "$schema": "http://json-schema.org/draft-04/hyper-schema",
3
+ "definitions": {
4
+ "app": {
5
+ "$schema": "http://json-schema.org/draft-04/hyper-schema",
6
+ "description": "An app is a program to be deployed.",
7
+ "id": "schemata/app",
8
+ "title": "App",
9
+ "type": [
10
+ "object"
11
+ ],
12
+ "definitions": {
13
+ "id": {
14
+ "description": "unique identifier of app",
15
+ "example": "01234567-89ab-cdef-0123-456789abcdef",
16
+ "format": "uuid",
17
+ "readOnly": true,
18
+ "type": [
19
+ "string"
20
+ ]
21
+ },
22
+ "name": {
23
+ "description": "unique name of app",
24
+ "example": "example",
25
+ "pattern": "^[a-z][a-z0-9-]{3,50}$",
26
+ "readOnly": false,
27
+ "type": [
28
+ "string"
29
+ ]
30
+ }
31
+ },
32
+ "links": [
33
+ {
34
+ "description": "Create a new app.",
35
+ "href": "/apps",
36
+ "method": "POST",
37
+ "rel": "create",
38
+ "schema": {
39
+ "properties": {
40
+ "name": {
41
+ "$ref": "#/definitions/app/definitions/name"
42
+ }
43
+ },
44
+ "type": [
45
+ "object"
46
+ ]
47
+ },
48
+ "title": "Create"
49
+ },
50
+ {
51
+ "description": "Delete an existing app.",
52
+ "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}",
53
+ "method": "DELETE",
54
+ "rel": "destroy",
55
+ "title": "Delete"
56
+ },
57
+ {
58
+ "description": "Info for existing app.",
59
+ "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}",
60
+ "method": "GET",
61
+ "rel": "self",
62
+ "title": "Info"
63
+ },
64
+ {
65
+ "description": "List existing apps.",
66
+ "href": "/apps",
67
+ "method": "GET",
68
+ "rel": "instances",
69
+ "title": "List"
70
+ },
71
+ {
72
+ "description": "Update an existing app.",
73
+ "href": "/apps/{(%23%2Fdefinitions%2Fapp%2Fdefinitions%2Fidentity)}",
74
+ "method": "PATCH",
75
+ "rel": "update",
76
+ "schema": {
77
+ "properties": {
78
+ "name": {
79
+ "$ref": "#/definitions/app/definitions/name"
80
+ }
81
+ },
82
+ "type": [
83
+ "object"
84
+ ]
85
+ },
86
+ "title": "Update"
87
+ }
88
+ ],
89
+ "properties": {
90
+ "id": {
91
+ "$ref": "#/definitions/app/definitions/id"
92
+ },
93
+ "name": {
94
+ "$ref": "#/definitions/app/definitions/name"
95
+ }
96
+ }
97
+ }
98
+ },
99
+ "properties": {
100
+ "app": {
101
+ "$ref": "#/definitions/app"
102
+ }
103
+ },
104
+ "type": [
105
+ "object"
106
+ ],
107
+ "description": "A schema for a small example API.",
108
+ "links": [
109
+ {
110
+ "href": "http://localhost:5000",
111
+ "rel": "self"
112
+ }
113
+ ],
114
+ "title": "Example API"
115
+ }
@@ -0,0 +1,117 @@
1
+ require "spec_helper"
2
+
3
+ describe Rack::Spec::RequestValidation do
4
+ include Rack::Test::Methods
5
+
6
+ let(:app) do
7
+ data = schema
8
+ Rack::Builder.app do
9
+ use Rack::Spec::RequestValidation, schema: data
10
+ run ->(env) do
11
+ [200, {}, ["OK"]]
12
+ end
13
+ end
14
+ end
15
+
16
+ let(:schema) do
17
+ str = File.read(schema_path)
18
+ JSON.parse(str)
19
+ end
20
+
21
+ let(:schema_path) do
22
+ File.expand_path("../../../fixtures/schema.json", __FILE__)
23
+ end
24
+
25
+ let(:response) do
26
+ last_response
27
+ end
28
+
29
+ let(:env) do
30
+ {}
31
+ end
32
+
33
+ let(:params) do
34
+ {}
35
+ end
36
+
37
+ subject do
38
+ send(verb, path, params, env)
39
+ response.status
40
+ end
41
+
42
+ shared_context "with valid POST request", :with_valid_post_request do
43
+ before do
44
+ env["CONTENT_TYPE"] = "application/json"
45
+ end
46
+
47
+ let(:verb) do
48
+ :post
49
+ end
50
+
51
+ let(:path) do
52
+ "/apps"
53
+ end
54
+
55
+ let(:params) do
56
+ { name: "abcd" }.to_json
57
+ end
58
+ end
59
+
60
+ describe "#call" do
61
+ let(:verb) do
62
+ :get
63
+ end
64
+
65
+ let(:path) do
66
+ "/apps"
67
+ end
68
+
69
+ context "with defined route" do
70
+ it { should == 200 }
71
+ end
72
+
73
+ context "with undefined route" do
74
+ let(:path) do
75
+ "/undefined"
76
+ end
77
+
78
+ it "raises Rack::Spec::RequestValidation::LinkNotFound" do
79
+ expect { subject }.to raise_error(Rack::Spec::RequestValidation::LinkNotFound)
80
+ end
81
+ end
82
+
83
+ context "with request body & invalid content type", :with_valid_post_request do
84
+ before do
85
+ env["CONTENT_TYPE"] = "text/plain"
86
+ end
87
+
88
+ it "raises Rack::Spec::RequestValidation::InvalidContentType" do
89
+ expect { subject }.to raise_error(Rack::Spec::RequestValidation::InvalidContentType)
90
+ end
91
+ end
92
+
93
+ context "with valid request property", :with_valid_post_request do
94
+ it { should == 200 }
95
+ end
96
+
97
+ context "with invalid request property", :with_valid_post_request do
98
+ let(:params) do
99
+ { name: "ab" }.to_json
100
+ end
101
+
102
+ it "raises Rack::Spec::RequestValidation::InvalidParameter" do
103
+ expect { subject }.to raise_error(Rack::Spec::RequestValidation::InvalidParameter)
104
+ end
105
+ end
106
+
107
+ context "with malformed JSON request body", :with_valid_post_request do
108
+ let(:params) do
109
+ "malformed"
110
+ end
111
+
112
+ it "raises Rack::Spec::RequestValidation::InvalidParameter" do
113
+ expect { subject }.to raise_error(Rack::Spec::RequestValidation::InvalidParameter)
114
+ end
115
+ end
116
+ end
117
+ end
data/spec/spec_helper.rb CHANGED
@@ -1,12 +1,9 @@
1
- $LOAD_PATH.unshift File.expand_path("../../lib", __FILE__)
1
+ require "rack/builder"
2
2
  require "rack/spec"
3
3
  require "rack/test"
4
- require "rspec/json_matcher"
5
- require "yaml"
6
4
 
7
5
  RSpec.configure do |config|
8
6
  config.treat_symbols_as_metadata_keys_with_true_values = true
9
7
  config.run_all_when_everything_filtered = true
10
8
  config.filter_run :focus
11
- config.include RSpec::JsonMatcher
12
9
  end
metadata CHANGED
@@ -1,111 +1,97 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-spec
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-02-23 00:00:00.000000000 Z
11
+ date: 2014-06-03 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: activesupport
14
+ name: json_schema
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - '>='
17
+ - - ">="
18
18
  - !ruby/object:Gem::Version
19
19
  version: '0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - '>='
24
+ - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: addressable
28
+ name: multi_json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - '>='
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
33
  version: '0'
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - '>='
39
- - !ruby/object:Gem::Version
40
- version: '0'
41
- - !ruby/object:Gem::Dependency
42
- name: rack
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - '>='
46
- - !ruby/object:Gem::Version
47
- version: '0'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - '>='
38
+ - - ">="
53
39
  - !ruby/object:Gem::Version
54
40
  version: '0'
55
41
  - !ruby/object:Gem::Dependency
56
42
  name: bundler
57
43
  requirement: !ruby/object:Gem::Requirement
58
44
  requirements:
59
- - - ~>
45
+ - - "~>"
60
46
  - !ruby/object:Gem::Version
61
47
  version: '1.5'
62
48
  type: :development
63
49
  prerelease: false
64
50
  version_requirements: !ruby/object:Gem::Requirement
65
51
  requirements:
66
- - - ~>
52
+ - - "~>"
67
53
  - !ruby/object:Gem::Version
68
54
  version: '1.5'
69
55
  - !ruby/object:Gem::Dependency
70
56
  name: pry
71
57
  requirement: !ruby/object:Gem::Requirement
72
58
  requirements:
73
- - - '>='
59
+ - - ">="
74
60
  - !ruby/object:Gem::Version
75
61
  version: '0'
76
62
  type: :development
77
63
  prerelease: false
78
64
  version_requirements: !ruby/object:Gem::Requirement
79
65
  requirements:
80
- - - '>='
66
+ - - ">="
81
67
  - !ruby/object:Gem::Version
82
68
  version: '0'
83
69
  - !ruby/object:Gem::Dependency
84
70
  name: rack-test
85
71
  requirement: !ruby/object:Gem::Requirement
86
72
  requirements:
87
- - - '>='
73
+ - - ">="
88
74
  - !ruby/object:Gem::Version
89
75
  version: '0'
90
76
  type: :development
91
77
  prerelease: false
92
78
  version_requirements: !ruby/object:Gem::Requirement
93
79
  requirements:
94
- - - '>='
80
+ - - ">="
95
81
  - !ruby/object:Gem::Version
96
82
  version: '0'
97
83
  - !ruby/object:Gem::Dependency
98
84
  name: rake
99
85
  requirement: !ruby/object:Gem::Requirement
100
86
  requirements:
101
- - - '>='
87
+ - - ">="
102
88
  - !ruby/object:Gem::Version
103
89
  version: '0'
104
90
  type: :development
105
91
  prerelease: false
106
92
  version_requirements: !ruby/object:Gem::Requirement
107
93
  requirements:
108
- - - '>='
94
+ - - ">="
109
95
  - !ruby/object:Gem::Version
110
96
  version: '0'
111
97
  - !ruby/object:Gem::Dependency
@@ -123,19 +109,19 @@ dependencies:
123
109
  - !ruby/object:Gem::Version
124
110
  version: 2.14.1
125
111
  - !ruby/object:Gem::Dependency
126
- name: rspec-json_matcher
112
+ name: rspec-console
127
113
  requirement: !ruby/object:Gem::Requirement
128
114
  requirements:
129
- - - '='
115
+ - - ">="
130
116
  - !ruby/object:Gem::Version
131
- version: 0.1.3
117
+ version: '0'
132
118
  type: :development
133
119
  prerelease: false
134
120
  version_requirements: !ruby/object:Gem::Requirement
135
121
  requirements:
136
- - - '='
122
+ - - ">="
137
123
  - !ruby/object:Gem::Version
138
- version: 0.1.3
124
+ version: '0'
139
125
  description:
140
126
  email:
141
127
  - r7kamura@gmail.com
@@ -143,7 +129,7 @@ executables: []
143
129
  extensions: []
144
130
  extra_rdoc_files: []
145
131
  files:
146
- - .gitignore
132
+ - ".gitignore"
147
133
  - CHANGELOG.md
148
134
  - Gemfile
149
135
  - LICENSE.txt
@@ -151,27 +137,12 @@ files:
151
137
  - Rakefile
152
138
  - lib/rack-spec.rb
153
139
  - lib/rack/spec.rb
154
- - lib/rack/spec/exception_handler.rb
155
- - lib/rack/spec/exceptions/base.rb
156
- - lib/rack/spec/exceptions/validation_error.rb
157
- - lib/rack/spec/restful.rb
158
- - lib/rack/spec/spec.rb
159
- - lib/rack/spec/validation.rb
160
- - lib/rack/spec/validator_factory.rb
161
- - lib/rack/spec/validators/base.rb
162
- - lib/rack/spec/validators/maximum_length_validator.rb
163
- - lib/rack/spec/validators/maximum_validator.rb
164
- - lib/rack/spec/validators/minimum_length_validator.rb
165
- - lib/rack/spec/validators/minimum_validator.rb
166
- - lib/rack/spec/validators/null_validator.rb
167
- - lib/rack/spec/validators/only_validator.rb
168
- - lib/rack/spec/validators/parameters_validator.rb
169
- - lib/rack/spec/validators/required_validator.rb
170
- - lib/rack/spec/validators/type_validator.rb
140
+ - lib/rack/spec/request_validation.rb
141
+ - lib/rack/spec/schema.rb
171
142
  - lib/rack/spec/version.rb
172
143
  - rack-spec.gemspec
173
- - spec/fixtures/spec.yml
174
- - spec/rack/spec_spec.rb
144
+ - spec/fixtures/schema.json
145
+ - spec/rack/spec/request_validation_spec.rb
175
146
  - spec/spec_helper.rb
176
147
  homepage: https://github.com/r7kamura/rack-spec
177
148
  licenses:
@@ -183,22 +154,22 @@ require_paths:
183
154
  - lib
184
155
  required_ruby_version: !ruby/object:Gem::Requirement
185
156
  requirements:
186
- - - '>='
157
+ - - ">="
187
158
  - !ruby/object:Gem::Version
188
159
  version: '0'
189
160
  required_rubygems_version: !ruby/object:Gem::Requirement
190
161
  requirements:
191
- - - '>='
162
+ - - ">="
192
163
  - !ruby/object:Gem::Version
193
164
  version: '0'
194
165
  requirements: []
195
166
  rubyforge_project:
196
- rubygems_version: 2.0.3
167
+ rubygems_version: 2.2.2
197
168
  signing_key:
198
169
  specification_version: 4
199
170
  summary: Spec based web-application middleware for Rack.
200
171
  test_files:
201
- - spec/fixtures/spec.yml
202
- - spec/rack/spec_spec.rb
172
+ - spec/fixtures/schema.json
173
+ - spec/rack/spec/request_validation_spec.rb
203
174
  - spec/spec_helper.rb
204
175
  has_rdoc: