rack-json_schema 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 52921d3192984f9d393b0501b2d4953b5bb3be36
4
- data.tar.gz: 635f81c7e1ac5b97893fca271f6326aefe2d03d4
3
+ metadata.gz: ef655a50e6b11b211d6c48f8b638c6f12ed80b2c
4
+ data.tar.gz: 614a49ef7e5fcecac371e7d3b2746e6d5c940a79
5
5
  SHA512:
6
- metadata.gz: 0c0a01694af3f7ab3df6c1579c6f5e755aba351abf08c3e8f8fa1490e87bcdef8a99ee25bdee239dbc26f9881c44a70b958ff04cfe74bdd37df137153f4774ac
7
- data.tar.gz: d746e6349cf8c99755502182ae338c75ef13f1eba04b8bcd287778aabe802739b1137ac91f70219504ec28c485b0a70de33a9747eb7977ca133175861a7ead8f
6
+ metadata.gz: 8f1374e7ac063d401e43cdf6f9430f1f5c551b01b793ee77f7c344f5c34195c79b4f6b820bbb915c7645b66deeb0d1450ad25c1f196698337dcc0f78ed37fe44
7
+ data.tar.gz: 80c3ed15950aa3d4db33a62576772f17cf23071bfb92bff6029356734bccdd3e3d789deaa61190a3ef9dd775edfd15bb45db8625a09d6c6e4f92d3fc8b325406
data/CHANGELOG.md CHANGED
@@ -1,3 +1,6 @@
1
+ ## 1.0.1
2
+ * Add Rack::JsonSchema::SchemaProvider
3
+
1
4
  ## 1.0.0
2
5
  * Rename: rack-spec -> rack-json_schema
3
6
 
@@ -17,36 +20,36 @@
17
20
  * Add Rack::JsonSchema::Mock
18
21
  * Prettify response JSON
19
22
 
20
- ## v0.1.3
23
+ ## 0.1.3
21
24
  * Array response support of Rack::JsonSchema::ResponseValidation
22
25
 
23
- ## v0.1.2
26
+ ## 0.1.2
24
27
  * Change Content-Type validation policy
25
28
  * Add Rack::JsonSchema::ResponseValidation
26
29
 
27
- ## v0.1.1
30
+ ## 0.1.1
28
31
  * Add ErrorHandler rack middleware for building error response
29
32
 
30
- ## v0.1.0
33
+ ## 0.1.0
31
34
  * Rebuilt entire code based on JSON schema
32
35
 
33
- ## v0.0.5
36
+ ## 0.0.5
34
37
  * Change RESTful resource API (#get, #post, #put, and #delete)
35
38
 
36
- ## v0.0.4
39
+ ## 0.0.4
37
40
  * Add Rack::JsonSchema::Restful, strongly conventional RESTful API Provider
38
41
 
39
- ## v0.0.3
42
+ ## 0.0.3
40
43
  * Add a new constraint: required
41
44
  * More DRY way for validator definition
42
45
 
43
- ## v0.0.2
46
+ ## 0.0.2
44
47
  * Change key name: queryParameters -> parameters
45
48
  * Add a new constraint: only
46
49
  * Add a new constraint: minimumLength
47
50
  * Add a new constraint: maxinumLength
48
51
 
49
- ## v0.0.1
52
+ ## 0.0.1
50
53
  * Add a new constraint: type
51
54
  * Add a new constraint: minimum
52
55
  * Add a new constraint: maxinum
data/README.md CHANGED
@@ -7,6 +7,7 @@ str = File.read("schema.json")
7
7
  schema = JSON.parse(str)
8
8
 
9
9
  use Rack::JsonSchema::Docs, schema: schema
10
+ use Rack::JsonSchema::SchemaProvider, schema: schema
10
11
  use Rack::JsonSchema::ErrorHandler
11
12
  use Rack::JsonSchema::RequestValidation, schema: schema
12
13
  use Rack::JsonSchema::ResponseValidation, schema: schema if ENV["RACK_ENV"] == "test"
@@ -198,3 +199,36 @@ List existing apps.
198
199
 
199
200
  ...
200
201
  ```
202
+
203
+ ### Rack::JsonSchema::SchemaProvider
204
+ Serves JSON Schema at `GET /schema`.
205
+
206
+ * You can give `path` option to change default path: `GET /schema`
207
+ * This middleware is also bundled in the `specup` executable command
208
+
209
+ ```sh
210
+ $ specup schema.json
211
+ [2014-06-06 23:01:35] INFO WEBrick 1.3.1
212
+ [2014-06-06 23:01:35] INFO ruby 2.0.0 (2013-06-27) [x86_64-darwin12.5.0]
213
+ [2014-06-06 23:01:35] INFO WEBrick::HTTPServer#start: pid=24303 port=8080
214
+
215
+ $ curl :8080/schema -i
216
+ HTTP/1.1 200 OK
217
+ Content-Type: text/plain; charset=utf-8
218
+ Server: WEBrick/1.3.1 (Ruby/2.1.1/2014-02-24)
219
+ Date: Sat, 07 Jun 2014 19:58:04 GMT
220
+ Content-Length: 2175
221
+ Connection: Keep-Alive
222
+
223
+ {
224
+ "$schema": "http://json-schema.org/draft-04/hyper-schema",
225
+ "definitions": {
226
+ "app": {
227
+ "$schema": "http://json-schema.org/draft-04/hyper-schema",
228
+ "description": "An app is a program to be deployed.",
229
+ "id": "schemata/app",
230
+ "title": "App",
231
+ ...
232
+ }
233
+ }
234
+ }
data/bin/specup CHANGED
@@ -21,6 +21,7 @@ end
21
21
 
22
22
  app = Rack::Builder.new do
23
23
  use Rack::JsonSchema::Docs, schema: schema
24
+ use Rack::JsonSchema::SchemaProvider, schema: schema
24
25
  use Rack::JsonSchema::ErrorHandler
25
26
  use Rack::JsonSchema::Mock, schema: schema
26
27
  run ->(env) { [404, {}, ["Not found"]] }
@@ -0,0 +1,45 @@
1
+ module Rack
2
+ module JsonSchema
3
+ class SchemaProvider
4
+ DEFAULT_PATH = "/schema"
5
+
6
+ # Behaves as a rack-middleware
7
+ # @param app [Object] Rack application
8
+ # @param path [String, nil] URL path to return JSON Schema (default: /schema)
9
+ # @param schema [Hash] Schema object written in JSON schema format
10
+ # @raise [JsonSchema::SchemaError]
11
+ def initialize(app, path: nil, schema: nil)
12
+ @app = app
13
+ @path = path
14
+ @schema = schema
15
+ end
16
+
17
+ # Returns rendered document for document request
18
+ # @return [Array] Rack response
19
+ # @param env [Hash] Rack env
20
+ def call(env)
21
+ if env["REQUEST_METHOD"] == "GET" && env["PATH_INFO"] == path
22
+ [
23
+ 200,
24
+ { "Content-Type" => "application/json" },
25
+ [rendered_schema],
26
+ ]
27
+ else
28
+ @app.call(env)
29
+ end
30
+ end
31
+
32
+ private
33
+
34
+ # @return [String] Path to return document
35
+ def path
36
+ @path || DEFAULT_PATH
37
+ end
38
+
39
+ # @return [String] Rendered JSON Schema in JSON format
40
+ def rendered_schema
41
+ MultiJson.encode(@schema, pretty: true)
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,5 +1,5 @@
1
1
  module Rack
2
2
  module JsonSchema
3
- VERSION = "1.0.0"
3
+ VERSION = "1.0.1"
4
4
  end
5
5
  end
@@ -12,4 +12,5 @@ require "rack/json_schema/mock"
12
12
  require "rack/json_schema/request_validation"
13
13
  require "rack/json_schema/response_validation"
14
14
  require "rack/json_schema/schema"
15
+ require "rack/json_schema/schema_provider"
15
16
  require "rack/json_schema/version"
@@ -0,0 +1,93 @@
1
+ require "spec_helper"
2
+
3
+ describe Rack::JsonSchema::SchemaProvider do
4
+ include Rack::Test::Methods
5
+
6
+ let(:app) do
7
+ local_schema_url_path = schema_url_path
8
+ local_schema = schema
9
+ Rack::Builder.app do
10
+ use Rack::JsonSchema::SchemaProvider, path: local_schema_url_path, schema: local_schema
11
+ run ->(env) do
12
+ [
13
+ 200,
14
+ {},
15
+ ["dummy"],
16
+ ]
17
+ end
18
+ end
19
+ end
20
+
21
+ let(:schema) do
22
+ str = File.read(schema_path)
23
+ JSON.parse(str)
24
+ end
25
+
26
+ let(:schema_path) do
27
+ File.expand_path("../../../fixtures/schema.json", __FILE__)
28
+ end
29
+
30
+ let(:schema_url_path) do
31
+ nil
32
+ end
33
+
34
+ let(:response) do
35
+ last_response
36
+ end
37
+
38
+ let(:env) do
39
+ {}
40
+ end
41
+
42
+ let(:params) do
43
+ {}
44
+ end
45
+
46
+ subject do
47
+ send(verb, path, params, env)
48
+ response.status
49
+ end
50
+
51
+ describe "#call" do
52
+ let(:verb) do
53
+ :get
54
+ end
55
+
56
+ context "without :path option" do
57
+ let(:path) do
58
+ "/schema"
59
+ end
60
+
61
+ it "returns JSON Schema to request to GET /schema" do
62
+ should == 200
63
+ response.body.should include("app")
64
+ end
65
+ end
66
+
67
+ context "with :path option" do
68
+ let(:schema_url_path) do
69
+ "/json_schema"
70
+ end
71
+
72
+ let(:path) do
73
+ "/json_schema"
74
+ end
75
+
76
+ it "responds to specified path" do
77
+ should == 200
78
+ response.body.should_not == "dummy"
79
+ end
80
+ end
81
+
82
+ context "without targeted request" do
83
+ let(:path) do
84
+ "/apps"
85
+ end
86
+
87
+ it "delegates request to inner app" do
88
+ should == 200
89
+ response.body.should == "dummy"
90
+ end
91
+ end
92
+ end
93
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rack-json_schema
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryo Nakamura
@@ -189,11 +189,13 @@ files:
189
189
  - lib/rack/json_schema/request_validation.rb
190
190
  - lib/rack/json_schema/response_validation.rb
191
191
  - lib/rack/json_schema/schema.rb
192
+ - lib/rack/json_schema/schema_provider.rb
192
193
  - lib/rack/json_schema/version.rb
193
194
  - rack-json_schema.gemspec
194
195
  - spec/fixtures/schema.json
195
196
  - spec/rack/spec/docs_spec.rb
196
197
  - spec/rack/spec/mock_spec.rb
198
+ - spec/rack/spec/schema_provider_spec.rb
197
199
  - spec/rack/spec_spec.rb
198
200
  - spec/spec_helper.rb
199
201
  homepage: https://github.com/r7kamura/rack-json_schema
@@ -224,6 +226,7 @@ test_files:
224
226
  - spec/fixtures/schema.json
225
227
  - spec/rack/spec/docs_spec.rb
226
228
  - spec/rack/spec/mock_spec.rb
229
+ - spec/rack/spec/schema_provider_spec.rb
227
230
  - spec/rack/spec_spec.rb
228
231
  - spec/spec_helper.rb
229
232
  has_rdoc: