json_schema_tools 0.0.8 → 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/README.md +4 -1
- data/json_schema_tools.gemspec +2 -2
- data/lib/schema_tools/modules/read.rb +17 -5
- data/lib/schema_tools/version.rb +1 -1
- data/spec/schema_tools/reader_spec.rb +38 -1
- metadata +12 -12
data/README.md
CHANGED
@@ -26,6 +26,10 @@ schema.json files are located.
|
|
26
26
|
Read a single schema:
|
27
27
|
|
28
28
|
schema = SchemaTools::Reader.read :client
|
29
|
+
|
30
|
+
Read a schema from an existing Ruby hash:
|
31
|
+
|
32
|
+
schema = SchemaTools::Reader.read :client, { ... }
|
29
33
|
|
30
34
|
Read multiple schemas, all *.json files in schema path
|
31
35
|
|
@@ -46,7 +50,6 @@ Don't like the global path and registry? Go local:
|
|
46
50
|
reader.read :client, 'from/path'
|
47
51
|
reader.registry
|
48
52
|
|
49
|
-
|
50
53
|
## Object to Schema JSON
|
51
54
|
|
52
55
|
A schema provides a (public) contract about an object definition. Therefore an
|
data/json_schema_tools.gemspec
CHANGED
@@ -17,8 +17,8 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.require_paths = ["lib"]
|
18
18
|
|
19
19
|
s.add_dependency 'json'
|
20
|
-
s.add_dependency 'activesupport'
|
21
|
-
s.add_dependency 'activemodel'
|
20
|
+
s.add_dependency 'activesupport', '~> 3.2.13'
|
21
|
+
s.add_dependency 'activemodel', '~> 3.2.13'
|
22
22
|
|
23
23
|
s.add_development_dependency 'rake'
|
24
24
|
s.add_development_dependency 'simplecov'
|
@@ -29,13 +29,25 @@ module SchemaTools
|
|
29
29
|
# round-trips. The cache can be resented with #registry_reset
|
30
30
|
#
|
31
31
|
# @param [String|Symbol] schema name to be read from schema path directory
|
32
|
-
# @param [String] path
|
32
|
+
# @param [String|Hash] either the path to retrieve schema_name from,
|
33
|
+
# or a Schema in Ruby hash form
|
33
34
|
# @return[HashWithIndifferentAccess] schema as hash
|
34
|
-
def read(schema_name,
|
35
|
+
def read(schema_name, path_or_schema=nil)
|
35
36
|
schema_name = schema_name.to_sym
|
36
37
|
return registry[schema_name] if registry[schema_name]
|
37
|
-
|
38
|
-
|
38
|
+
|
39
|
+
if path_or_schema.is_a? ::Hash
|
40
|
+
path = nil
|
41
|
+
plain_data = path_or_schema.to_json
|
42
|
+
elsif path_or_schema.is_a?(::String) || path_or_schema.nil?
|
43
|
+
path = path_or_schema
|
44
|
+
file_path = File.join(path || SchemaTools.schema_path, "#{schema_name}.json")
|
45
|
+
else
|
46
|
+
raise ArgumentError, "Second parameter must be a path or a schema!"
|
47
|
+
end
|
48
|
+
|
49
|
+
plain_data ||= File.open(file_path, 'r'){|f| f.read}
|
50
|
+
|
39
51
|
schema = ActiveSupport::JSON.decode(plain_data).with_indifferent_access
|
40
52
|
if schema[:extends]
|
41
53
|
extends = schema[:extends].is_a?(Array) ? schema[:extends] : [ schema[:extends] ]
|
@@ -64,4 +76,4 @@ module SchemaTools
|
|
64
76
|
end
|
65
77
|
end
|
66
78
|
end
|
67
|
-
end
|
79
|
+
end
|
data/lib/schema_tools/version.rb
CHANGED
@@ -1,6 +1,24 @@
|
|
1
1
|
require 'spec_helper'
|
2
2
|
|
3
3
|
describe SchemaTools::Reader do
|
4
|
+
let(:ruby_schema) do
|
5
|
+
{
|
6
|
+
"type"=> "object",
|
7
|
+
"name"=> "numbers",
|
8
|
+
"properties"=> {
|
9
|
+
"numbers"=> {
|
10
|
+
"type"=> "array",
|
11
|
+
"items"=> {
|
12
|
+
"type"=> "number",
|
13
|
+
"minimum"=> 1,
|
14
|
+
"maximum"=> 100
|
15
|
+
},
|
16
|
+
"additionalProperties"=> false
|
17
|
+
}
|
18
|
+
},
|
19
|
+
"additionalProperties"=> false
|
20
|
+
}
|
21
|
+
end
|
4
22
|
|
5
23
|
context 'class methods' do
|
6
24
|
|
@@ -25,6 +43,17 @@ describe SchemaTools::Reader do
|
|
25
43
|
schema[:properties][:lead_source].should_not be_empty
|
26
44
|
end
|
27
45
|
|
46
|
+
it 'should read a schema from a Ruby Hash' do
|
47
|
+
schema = SchemaTools::Reader.read(:numbers, ruby_schema)
|
48
|
+
|
49
|
+
SchemaTools::Reader.registry[:numbers].should_not be_empty
|
50
|
+
|
51
|
+
schema[:properties][:numbers].should_not be_empty
|
52
|
+
end
|
53
|
+
|
54
|
+
it 'should enforce correct parameter usage' do
|
55
|
+
expect { SchemaTools::Reader.read(:contact, []) }.to raise_error ArgumentError
|
56
|
+
end
|
28
57
|
end
|
29
58
|
|
30
59
|
context 'instance methods' do
|
@@ -38,6 +67,12 @@ describe SchemaTools::Reader do
|
|
38
67
|
reader.registry[:client].should_not be_empty
|
39
68
|
end
|
40
69
|
|
70
|
+
it 'should read a single schema from Ruby Hash' do
|
71
|
+
schema = reader.read(:numbers, ruby_schema)
|
72
|
+
schema[:name].should == 'numbers'
|
73
|
+
schema[:properties].should_not be_empty
|
74
|
+
end
|
75
|
+
|
41
76
|
it 'should populate instance registry' do
|
42
77
|
reader.read(:client)
|
43
78
|
reader.read(:address)
|
@@ -51,7 +86,9 @@ describe SchemaTools::Reader do
|
|
51
86
|
SchemaTools::Reader.registry.should be_empty
|
52
87
|
end
|
53
88
|
|
89
|
+
it 'should enforce correct parameter usage' do
|
90
|
+
expect { reader.read(:client, []) }.to raise_error ArgumentError
|
91
|
+
end
|
54
92
|
end
|
55
|
-
|
56
93
|
end
|
57
94
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_schema_tools
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2013-
|
12
|
+
date: 2013-06-26 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: json
|
@@ -32,33 +32,33 @@ dependencies:
|
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
33
33
|
none: false
|
34
34
|
requirements:
|
35
|
-
- -
|
35
|
+
- - ~>
|
36
36
|
- !ruby/object:Gem::Version
|
37
|
-
version:
|
37
|
+
version: 3.2.13
|
38
38
|
type: :runtime
|
39
39
|
prerelease: false
|
40
40
|
version_requirements: !ruby/object:Gem::Requirement
|
41
41
|
none: false
|
42
42
|
requirements:
|
43
|
-
- -
|
43
|
+
- - ~>
|
44
44
|
- !ruby/object:Gem::Version
|
45
|
-
version:
|
45
|
+
version: 3.2.13
|
46
46
|
- !ruby/object:Gem::Dependency
|
47
47
|
name: activemodel
|
48
48
|
requirement: !ruby/object:Gem::Requirement
|
49
49
|
none: false
|
50
50
|
requirements:
|
51
|
-
- -
|
51
|
+
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
53
|
+
version: 3.2.13
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
none: false
|
58
58
|
requirements:
|
59
|
-
- -
|
59
|
+
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version:
|
61
|
+
version: 3.2.13
|
62
62
|
- !ruby/object:Gem::Dependency
|
63
63
|
name: rake
|
64
64
|
requirement: !ruby/object:Gem::Requirement
|
@@ -159,7 +159,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
159
159
|
version: '0'
|
160
160
|
segments:
|
161
161
|
- 0
|
162
|
-
hash:
|
162
|
+
hash: -1701013660137054767
|
163
163
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
164
164
|
none: false
|
165
165
|
requirements:
|
@@ -168,7 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
168
168
|
version: '0'
|
169
169
|
segments:
|
170
170
|
- 0
|
171
|
-
hash:
|
171
|
+
hash: -1701013660137054767
|
172
172
|
requirements: []
|
173
173
|
rubyforge_project:
|
174
174
|
rubygems_version: 1.8.24
|