json_schema_rails 0.0.3 → 0.1.0

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: f7586adefa32b8ade20089a506a91e2e3796e5d4
4
- data.tar.gz: 611060b68ac2ddd13368875353817d3657890a3f
3
+ metadata.gz: 6815f00fc76b0d36cdff144949a31a27bfc1713b
4
+ data.tar.gz: 3f8ef54b094edc0b14bacb96857ea4ef367da63b
5
5
  SHA512:
6
- metadata.gz: 855c76fe2a38e2fe3a96cd564d2aca119b84289e4c3a641f072b1c16c5b28ce600f9726791880869e11824f6b232e75caef3f6692d70b9c54d71968d6eea9b64
7
- data.tar.gz: f9c1087696a00f0593208e533256addc2c6af06f4d329da07f7523bd814dc4928db0c8ff59ba3275c17ba6a291423ae4c431fd3002ee6a466c5620f6217f00f2
6
+ metadata.gz: f04c0e5d4c0d1f41af6a49b64f922faf592dbafbe6ee11ade859a23e558ba888e5ae6e7c22ca261ad361b5870a2b0b54a8d02f99e981d62aa9d5580d7ddb41f9
7
+ data.tar.gz: fb6c4568245c45e24ef30d981e5ec39a5af725995cd38841303d1ef206f888f198de54b740e5afb5d259b0b2a8994f5e25b1d66187dfa846cae0df22405d3e4c
@@ -1,12 +1,13 @@
1
1
  language: ruby
2
+ cache: bundler
2
3
  rvm:
4
+ - 1.9.3-p547
3
5
  - 2.1.2
6
+ env:
7
+ - RAILS_VERSION=3.2.18
8
+ - RAILS_VERSION=4.1.1
4
9
 
5
10
  install:
6
11
  - "travis_retry bundle install"
7
12
 
8
13
  script: "bundle exec rspec"
9
-
10
- env:
11
- - RAILS_VERSION=3.2.18
12
- - RAILS_VERSION=4.1.1
data/README.md CHANGED
@@ -97,6 +97,28 @@ class ApplicationController < ActionController::Base
97
97
  end
98
98
  ```
99
99
 
100
+ ### Serve schemas in your application
101
+
102
+ If you want to use your schemas in your client JavaScript, the mountable engine `JsonSchemaRails::Engine` provides a route for serving schemas in you application.
103
+
104
+ To use it, write the following in your `config/routes.rb`:
105
+
106
+ ```ruby
107
+ Your::Application.routes.draw do
108
+ mount JsonSchemaRails::Engine => '/schemas'
109
+ end
110
+ ```
111
+
112
+ And you can get your schemas through the path `/schemas` like following:
113
+
114
+ ```
115
+ # Get `app/schemas/posts/create.*` as application/json
116
+ GET /schemas/posts/create.json
117
+
118
+ # Get `app/schemas/posts/update.*` as text/yaml
119
+ GET /schemas/posts/update.yaml
120
+ ```
121
+
100
122
  ### Validate schema files
101
123
 
102
124
  json_schema_rails provides a rake task `schema:check` to validate your schema files.
@@ -0,0 +1,4 @@
1
+ module JsonSchemaRails
2
+ class ApplicationController < ActionController::Base
3
+ end
4
+ end
@@ -0,0 +1,13 @@
1
+ module JsonSchemaRails
2
+ class SchemasController < ApplicationController
3
+ def get
4
+ schema = JsonSchemaRails.lookup_schema(params[:schema])
5
+ raise ActionController::RoutingError.new('No Such Schema') unless schema
6
+
7
+ respond_to do |format|
8
+ format.yaml { render text: schema.to_hash.to_yaml, content_type: 'text/yaml' }
9
+ format.json { render json: schema }
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,3 @@
1
+ JsonSchemaRails::Engine.routes.draw do
2
+ get '/:schema(.:format)', to: 'schemas#get', constraints: { schema: /[\/a-zA-Z0-9_-]+/ }
3
+ end
@@ -2,7 +2,9 @@ require "json_schema_rails/version"
2
2
  require "json_schema_rails/errors"
3
3
  require "json_schema_rails/loaders"
4
4
  require "json_schema_rails/schema_validator"
5
- require "json_schema_rails/railtie" if defined?(Rails)
5
+ require "json_schema_rails/engine" if defined?(Rails)
6
+ require "json_schema_rails/json_schema/schema"
7
+ require "json_schema_rails/json_schema/parser"
6
8
 
7
9
  module JsonSchemaRails
8
10
  def self.schema_loader
@@ -1,7 +1,9 @@
1
1
  require "json_schema_rails/helpers"
2
2
 
3
3
  module JsonSchemaRails
4
- class Railtie < ::Rails::Railtie
4
+ class Engine < ::Rails::Engine
5
+ isolate_namespace JsonSchemaRails
6
+
5
7
  initializer "json_schema_rails.set_schema_loader" do |app|
6
8
  if schema_file = Dir[app.root.join('app', 'schema.*')].first
7
9
  loader = JsonSchemaRails::Loaders::HyperSchema.new(schema_file)
@@ -0,0 +1,15 @@
1
+ # Patch for JsonSchema::Parser to memorize schema data
2
+
3
+ require "json_schema/parser"
4
+
5
+ module JsonSchema
6
+ class Parser
7
+ alias_method :_super_parse_data, :parse_data
8
+
9
+ def parse_data(data, parent, fragment)
10
+ schema = _super_parse_data(data, parent, fragment)
11
+ schema.data = data
12
+ schema
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ # Patch for JsonSchema::Schema to memorize schema data
2
+
3
+ require "json_schema/schema"
4
+
5
+ module JsonSchema
6
+ class Schema
7
+ attr_accessor :data
8
+
9
+ def to_hash
10
+ data
11
+ end
12
+ end
13
+ end
@@ -1,3 +1,3 @@
1
1
  module JsonSchemaRails
2
- VERSION = "0.0.3"
2
+ VERSION = "0.1.0"
3
3
  end
@@ -1,4 +1,5 @@
1
1
  Dummy::Application.routes.draw do
2
+ mount JsonSchemaRails::Engine => '/schemas'
2
3
  resources :posts, only: [:create, :update]
3
4
 
4
5
  # The priority is based upon order of creation:
@@ -1,4 +1,5 @@
1
1
  Rails.application.routes.draw do
2
+ mount JsonSchemaRails::Engine => '/schemas'
2
3
  resources :posts, only: [:create, :update]
3
4
 
4
5
  # The priority is based upon order of creation: first created -> highest priority.
@@ -0,0 +1,36 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe JsonSchemaRails::SchemasController, type: :request do
4
+ describe "GET #get" do
5
+ context "with existing schema" do
6
+ before { get "/schemas/posts/create.#{format}" }
7
+ let(:expected_schema) { YAML.load_file(Rails.root.join('app', 'schemas', 'posts', 'create.yml').to_s) }
8
+
9
+ context "as json" do
10
+ let(:format) { "json" }
11
+ it "returns the schema as json" do
12
+ expect(response).to be_success
13
+ expect(response.content_type).to eq :json
14
+ expect(response.body).to eq expected_schema.to_json
15
+ end
16
+ end
17
+
18
+ context "as yaml" do
19
+ let(:format) { "yaml" }
20
+ it "returns the schema as yaml" do
21
+ expect(response).to be_success
22
+ expect(response.content_type).to eq :yaml
23
+ expect(response.body).to eq expected_schema.to_yaml
24
+ end
25
+ end
26
+ end
27
+
28
+ context "with nonexisting schema" do
29
+ subject { -> { get "/schemas/posts/nonexist.json" } }
30
+
31
+ it "raises ActionController::RoutingError" do
32
+ expect(subject).to raise_error ActionController::RoutingError
33
+ end
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,13 @@
1
+ require 'spec_helper'
2
+ require 'yaml'
3
+
4
+ RSpec.describe JsonSchema::Parser do
5
+ describe "#parse!" do
6
+ let(:schema_content) { YAML.load_file(File.join(TEST_SCHEMAS_DIR, 'posts/create.yml')) }
7
+ subject(:schema) { JsonSchema.parse!(schema_content) }
8
+
9
+ it "sets original schema data to schema#data" do
10
+ expect(schema.data).to eq schema_content
11
+ end
12
+ end
13
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_schema_rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.3
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kota Saito
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-06-21 00:00:00.000000000 Z
11
+ date: 2014-06-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -176,6 +176,9 @@ files:
176
176
  - MIT-LICENSE
177
177
  - README.md
178
178
  - Rakefile
179
+ - app/controllers/json_schema_rails/application_controller.rb
180
+ - app/controllers/json_schema_rails/schemas_controller.rb
181
+ - config/routes.rb
179
182
  - json_schema_rails.gemspec
180
183
  - lib/generators/schema/action/USAGE
181
184
  - lib/generators/schema/action/action_generator.rb
@@ -184,13 +187,15 @@ files:
184
187
  - lib/generators/schema/controller/controller_generator.rb
185
188
  - lib/generators/schema/controller/templates/schema.yml.erb
186
189
  - lib/json_schema_rails.rb
190
+ - lib/json_schema_rails/engine.rb
187
191
  - lib/json_schema_rails/errors.rb
188
192
  - lib/json_schema_rails/helpers.rb
193
+ - lib/json_schema_rails/json_schema/parser.rb
194
+ - lib/json_schema_rails/json_schema/schema.rb
189
195
  - lib/json_schema_rails/loaders.rb
190
196
  - lib/json_schema_rails/loaders/base.rb
191
197
  - lib/json_schema_rails/loaders/directory.rb
192
198
  - lib/json_schema_rails/loaders/hyper_schema.rb
193
- - lib/json_schema_rails/railtie.rb
194
199
  - lib/json_schema_rails/schema_validator.rb
195
200
  - lib/json_schema_rails/version.rb
196
201
  - lib/tasks/schema_tasks.rake
@@ -283,11 +288,13 @@ files:
283
288
  - spec/fixtures/schemas/posts/search.json
284
289
  - spec/fixtures/schemas/posts/update.yaml
285
290
  - spec/fixtures/schemas/syntax_error.json
291
+ - spec/integration/posts_controller_spec.rb
292
+ - spec/integration/schemas_controller_spec.rb
293
+ - spec/lib/json_schema_rails/json_schema/parser_spec.rb
286
294
  - spec/lib/json_schema_rails/loaders/directory_spec.rb
287
295
  - spec/lib/json_schema_rails/loaders/hyper_schema_spec.rb
288
296
  - spec/lib/json_schema_rails/schema_validator_spec.rb
289
297
  - spec/lib/json_schema_rails_spec.rb
290
- - spec/railtie/controllers/posts_controller_spec.rb
291
298
  - spec/spec_helper.rb
292
299
  homepage: https://github.com/kotas/json_schema_rails
293
300
  licenses:
@@ -399,9 +406,11 @@ test_files:
399
406
  - spec/fixtures/schemas/posts/search.json
400
407
  - spec/fixtures/schemas/posts/update.yaml
401
408
  - spec/fixtures/schemas/syntax_error.json
409
+ - spec/integration/posts_controller_spec.rb
410
+ - spec/integration/schemas_controller_spec.rb
411
+ - spec/lib/json_schema_rails/json_schema/parser_spec.rb
402
412
  - spec/lib/json_schema_rails/loaders/directory_spec.rb
403
413
  - spec/lib/json_schema_rails/loaders/hyper_schema_spec.rb
404
414
  - spec/lib/json_schema_rails/schema_validator_spec.rb
405
415
  - spec/lib/json_schema_rails_spec.rb
406
- - spec/railtie/controllers/posts_controller_spec.rb
407
416
  - spec/spec_helper.rb