jsv.rb 0.0.1.pre
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/LICENSE +19 -0
- data/README +29 -0
- data/bin/jsv-rb-repl +8 -0
- data/js/build/jsv.rb.js +5870 -0
- data/lib/jsv/context.rb +37 -0
- data/lib/jsv/environment.rb +24 -0
- data/lib/jsv/report.rb +17 -0
- data/lib/jsv/version.rb +3 -0
- data/lib/jsv.rb +1 -0
- data/spec/jsv/environment_spec.rb +79 -0
- data/spec/spec_helper.rb +6 -0
- metadata +126 -0
data/lib/jsv/context.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'execjs'
|
2
|
+
require 'jsv/environment'
|
3
|
+
|
4
|
+
module JSV
|
5
|
+
##
|
6
|
+
# Loads the JSV library code and a Javascript <-> Ruby shim.
|
7
|
+
#
|
8
|
+
# Usage:
|
9
|
+
#
|
10
|
+
# jsv = JSV::Context.new
|
11
|
+
# env = jsv.create_environment
|
12
|
+
# report = env.validate(json, schema)
|
13
|
+
#
|
14
|
+
# report.has_errors?
|
15
|
+
#
|
16
|
+
# # Error objects are JSON objects as described in JSV's README.
|
17
|
+
# report.errors # => [error object]
|
18
|
+
class Context
|
19
|
+
JS_CODE_PATH = File.expand_path('../../../js/build/jsv.rb.js', __FILE__)
|
20
|
+
|
21
|
+
def initialize
|
22
|
+
@execjs = ExecJS.compile(File.read(JS_CODE_PATH))
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_environment(env = nil)
|
26
|
+
Environment.new(self, env)
|
27
|
+
end
|
28
|
+
|
29
|
+
def validate(env, json, schema)
|
30
|
+
@execjs.call('this.require("shim").validate',
|
31
|
+
env.env_id,
|
32
|
+
env.additional_schemas,
|
33
|
+
json,
|
34
|
+
schema)
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
require 'jsv/report'
|
2
|
+
|
3
|
+
module JSV
|
4
|
+
class Environment
|
5
|
+
attr_reader :env_id
|
6
|
+
attr_reader :additional_schemas
|
7
|
+
|
8
|
+
def initialize(context, env_id)
|
9
|
+
@context = context
|
10
|
+
@env_id = env_id
|
11
|
+
@additional_schemas = {}
|
12
|
+
end
|
13
|
+
|
14
|
+
def validate(json, schema)
|
15
|
+
result = @context.validate(self, json, schema)
|
16
|
+
|
17
|
+
JSV::Report.new(result)
|
18
|
+
end
|
19
|
+
|
20
|
+
def create_schema(data, schema, uri)
|
21
|
+
@additional_schemas[uri] = { 'schema' => schema, 'data' => data }
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
data/lib/jsv/report.rb
ADDED
data/lib/jsv/version.rb
ADDED
data/lib/jsv.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'jsv/context'
|
@@ -0,0 +1,79 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
module JSV
|
4
|
+
describe Environment do
|
5
|
+
let(:context) { JSV::Context.new }
|
6
|
+
|
7
|
+
describe 'for Draft 03' do
|
8
|
+
let(:env) { context.create_environment('json-schema-draft-03') }
|
9
|
+
|
10
|
+
describe '#validate' do
|
11
|
+
let(:schema) do
|
12
|
+
%Q{
|
13
|
+
{
|
14
|
+
"properties": {
|
15
|
+
"foo": {
|
16
|
+
"type": "integer"
|
17
|
+
}
|
18
|
+
}
|
19
|
+
}
|
20
|
+
}
|
21
|
+
end
|
22
|
+
|
23
|
+
it 'returns a report with zero errors for valid JSON' do
|
24
|
+
report = env.validate('{"foo":3}', schema)
|
25
|
+
|
26
|
+
report.should_not have_errors
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'returns a report with errors for invalid JSON' do
|
30
|
+
report = env.validate('{"foo":"nope"}', schema)
|
31
|
+
|
32
|
+
report.should have_errors
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
describe '#create_schema' do
|
37
|
+
let(:referenced_schema) do
|
38
|
+
%Q{
|
39
|
+
{
|
40
|
+
"properties": {
|
41
|
+
"bar": {
|
42
|
+
"type": "integer"
|
43
|
+
}
|
44
|
+
}
|
45
|
+
}
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
let(:schema) do
|
50
|
+
%Q{
|
51
|
+
{
|
52
|
+
"properties": {
|
53
|
+
"foo": {
|
54
|
+
"extends": {
|
55
|
+
"$ref": "urn:fooSchema#"
|
56
|
+
},
|
57
|
+
"type": "object"
|
58
|
+
}
|
59
|
+
}
|
60
|
+
}
|
61
|
+
}
|
62
|
+
end
|
63
|
+
|
64
|
+
let(:json) do
|
65
|
+
%Q{
|
66
|
+
{ "foo": { "bar": "baz" } }
|
67
|
+
}
|
68
|
+
end
|
69
|
+
|
70
|
+
it 'makes a schema available for use in validation' do
|
71
|
+
env.create_schema(referenced_schema, nil, 'urn:fooSchema#')
|
72
|
+
|
73
|
+
report = env.validate(json, schema)
|
74
|
+
report.errors.first['message'].should =~ /not a required type/
|
75
|
+
end
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: jsv.rb
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1.pre
|
5
|
+
prerelease: 6
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- David Yip
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-07 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: execjs
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: '0'
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: !ruby/object:Gem::Requirement
|
25
|
+
none: false
|
26
|
+
requirements:
|
27
|
+
- - ! '>='
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '0'
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rake
|
32
|
+
requirement: !ruby/object:Gem::Requirement
|
33
|
+
none: false
|
34
|
+
requirements:
|
35
|
+
- - ! '>='
|
36
|
+
- !ruby/object:Gem::Version
|
37
|
+
version: '0'
|
38
|
+
type: :development
|
39
|
+
prerelease: false
|
40
|
+
version_requirements: !ruby/object:Gem::Requirement
|
41
|
+
none: false
|
42
|
+
requirements:
|
43
|
+
- - ! '>='
|
44
|
+
- !ruby/object:Gem::Version
|
45
|
+
version: '0'
|
46
|
+
- !ruby/object:Gem::Dependency
|
47
|
+
name: rspec
|
48
|
+
requirement: !ruby/object:Gem::Requirement
|
49
|
+
none: false
|
50
|
+
requirements:
|
51
|
+
- - ! '>='
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: '0'
|
54
|
+
type: :development
|
55
|
+
prerelease: false
|
56
|
+
version_requirements: !ruby/object:Gem::Requirement
|
57
|
+
none: false
|
58
|
+
requirements:
|
59
|
+
- - ! '>='
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
- !ruby/object:Gem::Dependency
|
63
|
+
name: travis-lint
|
64
|
+
requirement: !ruby/object:Gem::Requirement
|
65
|
+
none: false
|
66
|
+
requirements:
|
67
|
+
- - ! '>='
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '0'
|
70
|
+
type: :development
|
71
|
+
prerelease: false
|
72
|
+
version_requirements: !ruby/object:Gem::Requirement
|
73
|
+
none: false
|
74
|
+
requirements:
|
75
|
+
- - ! '>='
|
76
|
+
- !ruby/object:Gem::Version
|
77
|
+
version: '0'
|
78
|
+
description: Provides access to JSV, a JSON Schema validator, from Ruby
|
79
|
+
email:
|
80
|
+
- yipdw@member.fsf.org
|
81
|
+
executables:
|
82
|
+
- jsv-rb-repl
|
83
|
+
extensions: []
|
84
|
+
extra_rdoc_files: []
|
85
|
+
files:
|
86
|
+
- bin/jsv-rb-repl
|
87
|
+
- lib/jsv.rb
|
88
|
+
- lib/jsv/context.rb
|
89
|
+
- lib/jsv/environment.rb
|
90
|
+
- lib/jsv/report.rb
|
91
|
+
- lib/jsv/version.rb
|
92
|
+
- spec/jsv/environment_spec.rb
|
93
|
+
- spec/spec_helper.rb
|
94
|
+
- js/build/jsv.rb.js
|
95
|
+
- README
|
96
|
+
- LICENSE
|
97
|
+
homepage: https://github.com/NUBIC/jsv.rb
|
98
|
+
licenses: []
|
99
|
+
post_install_message:
|
100
|
+
rdoc_options: []
|
101
|
+
require_paths:
|
102
|
+
- lib
|
103
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
104
|
+
none: false
|
105
|
+
requirements:
|
106
|
+
- - ! '>='
|
107
|
+
- !ruby/object:Gem::Version
|
108
|
+
version: '0'
|
109
|
+
segments:
|
110
|
+
- 0
|
111
|
+
hash: 361765318298519476
|
112
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
114
|
+
requirements:
|
115
|
+
- - ! '>'
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: 1.3.1
|
118
|
+
requirements: []
|
119
|
+
rubyforge_project:
|
120
|
+
rubygems_version: 1.8.24
|
121
|
+
signing_key:
|
122
|
+
specification_version: 3
|
123
|
+
summary: Run JSV in Ruby applications
|
124
|
+
test_files:
|
125
|
+
- spec/jsv/environment_spec.rb
|
126
|
+
- spec/spec_helper.rb
|