json_schema_tools 0.2.3 → 0.2.4

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.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ OTJhOGY1MWU1MjhmMjAwMjg2YmNlMzM4MWY0ZjI0YzE1ZDkxYjAxZQ==
5
+ data.tar.gz: !binary |-
6
+ NTY2N2ZmNDg4MDc0NzUzYmFmNzYyODg1MjAwMjA1MzcyNjBjMDZmNg==
7
+ SHA512:
8
+ metadata.gz: !binary |-
9
+ MWI1OGE0MTdlNjM3NDYwMGZjMjc5MThhNjRmMjAwNTJjNWViMGJiNThhMGFh
10
+ M2ZjM2YxMWYxOTk0Y2ViMTU4YjJkMjE4Y2JmY2M3NjQzMzZjOGRiMTNjODg0
11
+ MmE3MDM1NzZmNmU0NzEwMjE3Y2MyYjcwZDQ0NDljN2ZiYzE5NDI=
12
+ data.tar.gz: !binary |-
13
+ YWZlMDgzMDFjZDI1M2IzNDQwNDI5ZTM5MTkzYjg3NzNkMGQwYTExNmZmYzQz
14
+ ZTdhMDQ4ZmUwMTU2Njg3YTQ4MzI5ZGMwY2VjM2ZhNGVjYzFlNDYyYTA2ZDZk
15
+ MmE4ZjE3ZDA3ZWM1MThhZDFmOTFmZWI0NmQ2NWI3OTVlNDUzMDc=
data/.gitignore CHANGED
@@ -7,4 +7,4 @@ Gemfile.lock
7
7
  .yardoc
8
8
  doc/
9
9
  tmp/
10
- *.*~
10
+ *.swp
data/README.md CHANGED
@@ -2,12 +2,18 @@
2
2
 
3
3
  [![Build Status](https://travis-ci.org/salesking/json_schema_tools.png?branch=master)](https://travis-ci.org/salesking/json_schema_tools)
4
4
 
5
- Set of tools to help working with JSON Schemata:
5
+ Toolbox to work with JSON Schema in Ruby:
6
6
 
7
- * read schema files into a ruby hash
8
- * add schema properties to a class
9
- * convert any object into it's schema JSON markup
10
- * clean parameters according to a schema (e.g. in an api controller)
7
+ * blow up classes from schema
8
+ * object.as_json conversion
9
+ * object.valid? validations with object.errors
10
+
11
+ Simply use full blown classes or customize the bits and pieces:
12
+
13
+ * add schema properties to an existing class
14
+ * add validations to an existing class
15
+ * clean parameters e.g. in an api controller
16
+ * customize json output, object namespaces, used schema
11
17
 
12
18
  ## Usage
13
19
 
@@ -15,14 +21,33 @@ Hook the gem into your app
15
21
 
16
22
  gem 'json_schema_tools'
17
23
 
18
- ## Read Schema
24
+ Quickstart assuming you have schema definitions [like those](https://github.com/salesking/sk_api_schema/tree/master/json/v1.0) in place.
25
+
26
+ ```ruby
27
+ # add schema directory to the search path
28
+ SchemaTools.schema_path = '/path/to/schema-json-files'
29
+ # blow up classes for each schema file
30
+ SchemaTools::KlassFactory.build
31
+
32
+ # init with params (assumes a contact.json definition)
33
+ contact = Contact.new first_name: 'Barry', last_name: 'Cade'
34
+ # use setters/getters
35
+ contact.first_name = 'Ahr'
36
+ # validations derived from property definitions
37
+ contact.valid?
38
+ contact.errors.full_messages
39
+ ```
40
+
41
+ ## Schema handling
19
42
 
20
43
  Before the fun begins, with any of the tools, one or multiple JSON schema(files)
21
44
  must be available. A schema is converted into a ruby hash and for convenience is
22
- cached into a registry (global or local). So you only need to initialize them
23
- once e.g on program start.
45
+ cached into a registry (global or per reader object). Globals are initialized
46
+ once e.g on program start. A reader object allows to handle schemata in dynamic
47
+ ways.
24
48
 
25
- Provide a base path where the schema json files are located.
49
+ When using the global SchemaTools reader simply provide a base path to the
50
+ schema files and you are done.
26
51
 
27
52
  ```ruby
28
53
  SchemaTools.schema_path = '/path/to/schema-json-files'
@@ -69,7 +94,7 @@ reader.registry
69
94
 
70
95
  ## Object to JSON - from Schema
71
96
 
72
- As you probably know such is done e.g in rails via object.to_json. While using
97
+ As you probably know such is done e.g in rails via object.as_json. While using
73
98
  this might be simple, it has a damn big drawback: There is no transparent
74
99
  contract about the data-structure, as rails simply uses all fields defined in the
75
100
  database(ActiveRecord model). One side-effect: With each migration you are f***ed
@@ -90,10 +115,10 @@ class Client < ActiveRecord::Base
90
115
  end
91
116
 
92
117
  peter = Client.new name: 'Peter'
93
- peter.as_schema_json
118
+ peter.as_json
94
119
  #=> "client":{"id":12, "name": "Peter", "email":"",..}
95
120
 
96
- peter.as_schema_hash
121
+ peter.as_hash
97
122
  #=> "client"=>{"id"=>12, "name"=> "Peter", "email"=>"",..}
98
123
  ```
99
124
 
@@ -114,7 +139,7 @@ course they can be combined.
114
139
  Only use some fields e.g. to save bandwidth
115
140
 
116
141
  ```ruby
117
- peter.as_schema_json(fields:['id', 'name'])
142
+ peter.as_json(fields:['id', 'name'])
118
143
  #=> "client":{"id":12, "name": "Peter"}
119
144
  ```
120
145
 
@@ -122,13 +147,13 @@ Use a custom schema name e.g. to represent a client as contact. Assumes you also
122
147
  have a schema named contact.json
123
148
 
124
149
  ```ruby
125
- peter.as_schema_json(class_name: 'contact')
150
+ peter.as_json(class_name: 'contact')
126
151
  ```
127
152
 
128
153
  Set a custom schema path
129
154
 
130
155
  ```ruby
131
- peter.as_schema_json( path: 'path-to/json-files/')
156
+ peter.as_json( path: 'path-to/json-files/')
132
157
  ```
133
158
 
134
159
  By default the object hash has the class name (client) and the link-section on
@@ -140,7 +165,7 @@ inline:
140
165
 
141
166
  ```ruby
142
167
 
143
- peter.as_schema_json( exclude_root: true )
168
+ peter.as_json( exclude_root: true )
144
169
 
145
170
  #=> {"id":12, "name"=> "Peter",
146
171
  # "_class_name":"client",
@@ -185,7 +210,7 @@ contact.last_name = 'Rambo'
185
210
  # raw access
186
211
  contact.schema_attrs
187
212
  # to json
188
- contact.as_schema_json
213
+ contact.as_json
189
214
  ```
190
215
 
191
216
  ## Classes from Schema - KlassFactory
data/lib/schema_tools.rb CHANGED
@@ -9,6 +9,7 @@ require 'schema_tools/reader'
9
9
  require 'schema_tools/cleaner'
10
10
  require 'schema_tools/hash'
11
11
  require 'schema_tools/klass_factory'
12
+ require 'schema_tools/ref_resolver'
12
13
 
13
14
 
14
15
  module SchemaTools
@@ -22,4 +23,4 @@ module SchemaTools
22
23
  @schema_path
23
24
  end
24
25
  end
25
- end
26
+ end
@@ -32,34 +32,45 @@ module SchemaTools
32
32
  reader = opts[:reader] || SchemaTools::Reader
33
33
  schemata = reader.read_all( opts[:path] || SchemaTools.schema_path )
34
34
  namespace = opts[:namespace] || Object
35
- if namespace.is_a?(String) || namespace.is_a?(Symbol)
36
- namespace = "#{namespace}".constantize
37
- end
35
+ namespace = "#{namespace}".constantize if namespace.is_a?(String) || namespace.is_a?(Symbol)
38
36
  # bake classes
39
37
  schemata.each do |schema|
40
- klass_name = schema['name'].classify
41
- next if namespace.const_defined?(klass_name, false)
42
- klass = namespace.const_set(klass_name, Class.new)
43
- klass.class_eval do
44
- include SchemaTools::Modules::Attributes
45
- include ActiveModel::Conversion
46
- include SchemaTools::Modules::Validations # +naming + transl + conversion
47
- has_schema_attrs schema['name'], reader: reader
48
- validate_with schema['name'], reader:reader
49
- getter_names = schema['properties'].select{|name,prop| !prop['readonly'] }.keys.map { |name| name.to_sym}
50
- attr_accessor *getter_names
38
+ next if !schema['name'] or namespace.const_defined?(schema['name'].classify, false)
39
+ build_class(schema, namespace, reader)
40
+ end
41
+ end
51
42
 
52
- def initialize(attributes = {})
53
- attributes.each do |name, value|
54
- send("#{name}=", value)
55
- end
56
- end
43
+ # @param [Object] schema single json schema
44
+ # @param [Constant] namespace for the new class
45
+ # @param [SchemaTools::Reader] reader set into new class for validation and attributes
46
+ def build_class(schema, namespace, reader)
47
+ klass_name = schema['name'].classify
48
+ klass = namespace.const_set(klass_name, Class.new)
49
+ klass.class_eval do
50
+ include SchemaTools::Modules::Attributes
51
+ include ActiveModel::Conversion
52
+ include SchemaTools::Modules::Validations # +naming + transl + conversion
53
+ has_schema_attrs schema['name'], reader: reader
54
+ validate_with schema['name'], reader:reader
55
+ getter_names = schema['properties'].select{|name,prop| !prop['readonly'] }
56
+ .keys.map { |name| name.to_sym}
57
+ attr_accessor *getter_names
57
58
 
58
- def persisted?; false end
59
+ def initialize(attributes = {})
60
+ attributes.each do |name, value|
61
+ send("#{name}=", value)
62
+ end
59
63
  end
60
- end
64
+
65
+ def persisted?; false end
66
+ end # class
67
+ end
68
+
69
+ # @param [Object] name
70
+ def namespace(name)
71
+
61
72
  end
62
73
 
63
74
  end
64
75
  end
65
- end
76
+ end
@@ -5,16 +5,17 @@ module SchemaTools
5
5
  module AsSchema
6
6
  extend ActiveSupport::Concern
7
7
 
8
- # convert this class to a schema markup.
8
+ # convert object to a schema markup.
9
9
  # @param [Hash{Symbol=>Mixed}] opts passed on to #SchemaTools::Hash.from_schema
10
10
  # @return [String] json
11
11
  def as_schema_json(opts={})
12
12
  ActiveSupport::JSON.encode(as_schema_hash(opts))
13
13
  end
14
+ def as_json(opts={}) as_schema_json(opts); end
14
15
 
15
- # Get the object as hash with fields detected from its schema.
16
- # The schema is derived from
17
- # * from options[:class_name]
16
+ # The object as hash with fields detected from its schema.
17
+ # The schema name is derived from:
18
+ # * options[:class_name]
18
19
  # * has_schema_attrs definition(if used)
19
20
  # * the underscored class name
20
21
  # @param [Hash{Symbol=>Mixed}] opts passed on to #SchemaTools::Hash.from_schema
@@ -26,9 +27,11 @@ module SchemaTools
26
27
  end
27
28
  SchemaTools::Hash.from_schema(self, opts)
28
29
  end
30
+ def as_hash(opts={}) as_schema_hash(opts); end
29
31
 
30
32
  module ClassMethods
31
33
  # Get or set the schema name used
34
+ # @param [Symbol|String] name
32
35
  def schema_name(name=nil)
33
36
  @schema_name = name if name
34
37
  @schema_name
@@ -3,6 +3,15 @@ module SchemaTools
3
3
  module Modules
4
4
  # Add schema properties to a class by using has_schema_attrs to define from
5
5
  # which schema to inherit attributes.
6
+ # @example
7
+ #
8
+ # class Contact
9
+ # has_schema_attrs :contact
10
+ # end
11
+ # Contact.schema_name #=> contact
12
+ # Contact.as_json
13
+ # Contact.as_hash
14
+ # Contact.schema #=> json schema hash
6
15
  module Attributes
7
16
  extend ActiveSupport::Concern
8
17
  include SchemaTools::Modules::AsSchema
@@ -11,6 +20,10 @@ module SchemaTools
11
20
  @schema_attrs ||= {}
12
21
  end
13
22
 
23
+ def schema
24
+ self.class.schema
25
+ end
26
+
14
27
  module ClassMethods
15
28
 
16
29
  # @param [Symbol|String] schema name
@@ -20,27 +33,24 @@ module SchemaTools
20
33
  def has_schema_attrs(schema_name, opts={})
21
34
  reader = opts[:reader] || SchemaTools::Reader
22
35
  schema_location = opts[:path] || opts[:schema]
23
- schema = reader.read(schema_name, schema_location)
24
- # remember name on class level
36
+ # remember schema + name on class level
37
+ self.schema( reader.read(schema_name, schema_location) )
25
38
  self.schema_name(schema_name)
26
39
  # make getter / setter
27
- schema[:properties].each do |key, val|
28
- # getter
29
- define_method key do
30
- schema_attrs[key]
31
- end
32
- #setter
33
- unless val[:readonly]
34
- define_method "#{key}=" do |value|
35
- #TODO validations?
36
- schema_attrs[key] = value
37
- end
38
- end
40
+ self.schema[:properties].each do |key, prop|
41
+ define_method(key) { schema_attrs[key] }
42
+ define_method("#{key}=") { |value| schema_attrs[key] = value } unless prop[:readonly]
39
43
  end
44
+ #TODO parse links ?? or do it in resource module
40
45
  end
41
46
 
42
- end
47
+ # @param [Hash] schema_hash
48
+ def schema(schema_hash=nil)
49
+ @schema = schema_hash if schema_hash
50
+ @schema
51
+ end
43
52
 
53
+ end
44
54
  end
45
55
  end
46
56
  end
@@ -57,6 +57,7 @@ module SchemaTools
57
57
  schema[:properties] = ext[:properties].merge(schema[:properties])
58
58
  end
59
59
  end
60
+ _handle_reference_properties schema
60
61
  registry[ schema_name ] = schema
61
62
  end
62
63
 
@@ -74,6 +75,25 @@ module SchemaTools
74
75
  end
75
76
  schemas
76
77
  end
78
+
79
+ # Merge referenced property definitions into the given schema.
80
+ # e.g. each object has an updated_at field which we define in a single
81
+ # location(external file) instead of repeating the property def in each
82
+ # schema.
83
+ # @param [HashWithIndifferentAccess] schema - single schema
84
+ def _handle_reference_properties(schema)
85
+ return unless schema["properties"]
86
+ schema["properties"].each { |key, value|
87
+ next unless value["$ref"]
88
+
89
+ json_pointer = value["$ref"]
90
+ values_from_pointer = RefResolver.load_json_pointer json_pointer
91
+ schema["properties"][key].merge!(values_from_pointer) {|key, old, new|
92
+ old
93
+ }
94
+ schema["properties"][key].delete("$ref")
95
+ }
96
+ end
77
97
  end
78
98
  end
79
99
  end
@@ -0,0 +1,62 @@
1
+ # encoding: utf-8
2
+
3
+ require 'json'
4
+
5
+ module SchemaTools
6
+ class RefResolver
7
+
8
+ #
9
+ # super basic resolving of JSON Pointer stuff in order
10
+ # to be able to load $ref parameter.
11
+ #
12
+ # $refs in JSON Schema are defined in JSON Pointer syntax:
13
+ # http://tools.ietf.org/html/draft-ietf-appsawg-json-pointer-07
14
+ #
15
+ # @param [String] json_pointer the JSON Pointer expression to evaluate
16
+ # @param [Hash] schema if the pointer refers to a local schema, this is this
17
+ # the hash to evaluate it against. If the pointer contains a uri to a
18
+ # referenced schema, an attempt is made to load
19
+ def self.load_json_pointer json_pointer, schema = {}
20
+ # JSON Pointer is a big, abandoned WIP and we're going to
21
+ # start by only implementing the part's we need ...
22
+ if nil == (json_pointer =~ /^(.*)#(.*)/ )
23
+ raise "invalid json pointer: #{json_pointer}"
24
+ end
25
+
26
+ uri = $1.strip
27
+ pointer = $2
28
+
29
+ if ! uri.empty?
30
+ uri = URI.parse(uri)
31
+ raise "must currently be a relative uri: #{json_pointer}" if uri.absolute?
32
+ path = SchemaTools.schema_path + "/" + uri.path
33
+ open (path) {|f|
34
+ schema = JSON.parse(f.read)
35
+ }
36
+ end
37
+
38
+ return self._retrieve_pointer_from_object pointer, schema
39
+ end
40
+
41
+
42
+ def self._retrieve_pointer_from_object pointer, object
43
+ # assume path to be the JSONPointer expression:
44
+ # json/pointer/expression
45
+ # and obj to be the ruby hash representation of the json
46
+ path = pointer.is_a?(Array) ? pointer : pointer.split("/")
47
+
48
+ while object != nil && component = path.shift
49
+ prev = object
50
+ component = component.to_i if object.is_a?(Array) && component =~ /^\d+$/
51
+ object = object[component]
52
+ end
53
+
54
+ return object
55
+ end
56
+
57
+ end # module
58
+ end # module
59
+
60
+
61
+
62
+
@@ -1,3 +1,3 @@
1
1
  module SchemaTools
2
- VERSION = '0.2.3'
2
+ VERSION = '0.2.4'
3
3
  end
@@ -0,0 +1,13 @@
1
+ {
2
+ "definitions": {
3
+ "id": {
4
+ "description": "some description",
5
+ "readonly": true,
6
+ "type": "integer"
7
+ },
8
+ "some_other_property": {
9
+ "description": "whatever",
10
+ "type": "string"
11
+ }
12
+ }
13
+ }
@@ -0,0 +1,19 @@
1
+ {
2
+ "type":"object",
3
+ "title":"test_object",
4
+ "name":"includes_basic_definitions",
5
+ "description":"test_object",
6
+ "properties": {
7
+ "id":{
8
+ "$ref" : "./basic_definitions.json#definitions/id"
9
+ },
10
+ "id_adding_param": {
11
+ "$ref" : "./basic_definitions.json#definitions/id",
12
+ "maxLength" : 10
13
+ },
14
+ "id_overriding_param" : {
15
+ "$ref" : "./basic_definitions.json#definitions/id",
16
+ "description" : "some other description"
17
+ }
18
+ }
19
+ }
@@ -31,6 +31,14 @@ describe SchemaTools::Modules::Attributes do
31
31
  it 'should add schema_name to class' do
32
32
  subject.class.schema_name.should == :client
33
33
  end
34
+
35
+ it 'should add schema to class' do
36
+ subject.class.schema.should == SchemaTools::Reader.read(:client)
37
+ end
38
+
39
+ it 'should add schema to object' do
40
+ subject.schema.should == SchemaTools::Reader.read(:client)
41
+ end
34
42
  end
35
43
 
36
44
  context 'attributes from dynamic schema' do
@@ -33,6 +33,15 @@ describe SchemaTools::Reader do
33
33
  schema[:properties][:numbers].should_not be_empty
34
34
  end
35
35
 
36
+ it 'should deal with referenced parameters properly' do
37
+ schema = SchemaTools::Reader.read(:includes_basic_definitions)
38
+ schema[:properties].should_not be_empty
39
+ schema[:properties].length.should eq 3
40
+ schema[:properties][:id][:description].should eq "some description"
41
+
42
+ schema[:properties][:id]["$ref"].should be_nil
43
+ end
44
+
36
45
  it 'should enforce correct parameter usage' do
37
46
  expect { SchemaTools::Reader.read(:contact, []) }.to raise_error ArgumentError
38
47
  end
@@ -0,0 +1,71 @@
1
+ require 'spec_helper'
2
+
3
+ describe SchemaTools::RefResolver do
4
+ context 'class methods' do
5
+ it 'should handle simple json pointer' do
6
+ obj = { "bla" => {
7
+ "blub" => :success
8
+ }}
9
+
10
+ pointer = "bla/blub"
11
+ found = SchemaTools::RefResolver._retrieve_pointer_from_object pointer, obj
12
+ # not sure what I am doing wrong here, but:
13
+ # found.should eq :success
14
+ # does not work because
15
+ # undefined method `eq'
16
+ found.should eq :success
17
+
18
+ found = SchemaTools::RefResolver._retrieve_pointer_from_object "non/existant/path", obj
19
+ found.should be_nil
20
+ end
21
+
22
+ it 'should handle json pointer arrays' do
23
+ obj = { "bla" => {
24
+ "blub" => :success,
25
+ "bling" => [3,2,1]
26
+ }}
27
+ pointer = "bla/bling/2"
28
+ found = SchemaTools::RefResolver._retrieve_pointer_from_object pointer, obj
29
+ found.should eq 1
30
+
31
+ pointer = "bla/bling/3"
32
+ found = SchemaTools::RefResolver._retrieve_pointer_from_object pointer, obj
33
+ found.should be_nil
34
+
35
+ end
36
+
37
+ it 'should handle embedded json pointer arrays' do
38
+ obj = { "bla" => {
39
+ "blub" => :success,
40
+ "bling" => [
41
+ {"num" => 3},
42
+ {"num" => 2},
43
+ {"num" => 1}
44
+ ]
45
+ }}
46
+ pointer = "bla/bling/1/num"
47
+ found = SchemaTools::RefResolver._retrieve_pointer_from_object pointer, obj
48
+ found.should eq 2
49
+ end
50
+ end
51
+
52
+ it 'should throw an exception on an invalid path' do
53
+ obj = {}
54
+ expect {
55
+ SchemaTools::RefResolver.load_json_pointer("bla")
56
+ }.to raise_error
57
+ end
58
+
59
+ it 'should reject absolute URI part' do
60
+ obj = {}
61
+ expect {
62
+ SchemaTools::RefResolver.load_json_pointer("http://www.example.com/#some/stuff")
63
+ }.to raise_error
64
+ end
65
+
66
+ it 'should load local ref' do
67
+ pointer = "./basic_definitions.json#definitions"
68
+ obj = SchemaTools::RefResolver.load_json_pointer(pointer)
69
+ obj.length.should eq 2
70
+ end
71
+ end
data/spec/spec_helper.rb CHANGED
@@ -16,6 +16,7 @@ require 'test_helpers'
16
16
  RSpec.configure do |config|
17
17
  end
18
18
 
19
+ I18n.enforce_available_locales = false if I18n.respond_to?('enforce_available_locales=')
19
20
  # set global json schema path for examples
20
21
  SchemaTools.schema_path = File.expand_path('../fixtures', __FILE__)
21
22
 
metadata CHANGED
@@ -1,20 +1,18 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_schema_tools
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
5
- prerelease:
4
+ version: 0.2.4
6
5
  platform: ruby
7
6
  authors:
8
7
  - Georg Leciejewski
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-10-28 00:00:00.000000000 Z
11
+ date: 2014-08-21 00:00:00.000000000 Z
13
12
  dependencies:
14
13
  - !ruby/object:Gem::Dependency
15
14
  name: json
16
15
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
16
  requirements:
19
17
  - - ! '>='
20
18
  - !ruby/object:Gem::Version
@@ -22,7 +20,6 @@ dependencies:
22
20
  type: :runtime
23
21
  prerelease: false
24
22
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
23
  requirements:
27
24
  - - ! '>='
28
25
  - !ruby/object:Gem::Version
@@ -30,7 +27,6 @@ dependencies:
30
27
  - !ruby/object:Gem::Dependency
31
28
  name: rake
32
29
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
30
  requirements:
35
31
  - - ! '>='
36
32
  - !ruby/object:Gem::Version
@@ -38,7 +34,6 @@ dependencies:
38
34
  type: :development
39
35
  prerelease: false
40
36
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
37
  requirements:
43
38
  - - ! '>='
44
39
  - !ruby/object:Gem::Version
@@ -46,7 +41,6 @@ dependencies:
46
41
  - !ruby/object:Gem::Dependency
47
42
  name: simplecov
48
43
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
44
  requirements:
51
45
  - - ! '>='
52
46
  - !ruby/object:Gem::Version
@@ -54,7 +48,6 @@ dependencies:
54
48
  type: :development
55
49
  prerelease: false
56
50
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
51
  requirements:
59
52
  - - ! '>='
60
53
  - !ruby/object:Gem::Version
@@ -62,7 +55,6 @@ dependencies:
62
55
  - !ruby/object:Gem::Dependency
63
56
  name: rspec
64
57
  requirement: !ruby/object:Gem::Requirement
65
- none: false
66
58
  requirements:
67
59
  - - ! '>='
68
60
  - !ruby/object:Gem::Version
@@ -70,7 +62,6 @@ dependencies:
70
62
  type: :development
71
63
  prerelease: false
72
64
  version_requirements: !ruby/object:Gem::Requirement
73
- none: false
74
65
  requirements:
75
66
  - - ! '>='
76
67
  - !ruby/object:Gem::Version
@@ -102,10 +93,13 @@ files:
102
93
  - lib/schema_tools/modules/read.rb
103
94
  - lib/schema_tools/modules/validations.rb
104
95
  - lib/schema_tools/reader.rb
96
+ - lib/schema_tools/ref_resolver.rb
105
97
  - lib/schema_tools/version.rb
106
98
  - spec/fixtures/address.json
99
+ - spec/fixtures/basic_definitions.json
107
100
  - spec/fixtures/client.json
108
101
  - spec/fixtures/contact.json
102
+ - spec/fixtures/includes_basic_definitions.json
109
103
  - spec/fixtures/lead.json
110
104
  - spec/fixtures/page.json
111
105
  - spec/schema_tools/cleaner_spec.rb
@@ -114,30 +108,30 @@ files:
114
108
  - spec/schema_tools/modules/as_schema_spec.rb
115
109
  - spec/schema_tools/modules/attributes_spec.rb
116
110
  - spec/schema_tools/reader_spec.rb
111
+ - spec/schema_tools/ref_resolver_spec.rb
117
112
  - spec/spec_helper.rb
118
113
  - spec/test_helpers.rb
119
114
  homepage: https://github.com/salesking/json_schema_tools
120
115
  licenses: []
116
+ metadata: {}
121
117
  post_install_message:
122
118
  rdoc_options: []
123
119
  require_paths:
124
120
  - lib
125
121
  required_ruby_version: !ruby/object:Gem::Requirement
126
- none: false
127
122
  requirements:
128
123
  - - ! '>='
129
124
  - !ruby/object:Gem::Version
130
125
  version: '0'
131
126
  required_rubygems_version: !ruby/object:Gem::Requirement
132
- none: false
133
127
  requirements:
134
128
  - - ! '>='
135
129
  - !ruby/object:Gem::Version
136
130
  version: '0'
137
131
  requirements: []
138
132
  rubyforge_project:
139
- rubygems_version: 1.8.24
133
+ rubygems_version: 2.2.2
140
134
  signing_key:
141
- specification_version: 3
135
+ specification_version: 4
142
136
  summary: JSON Schema API tools for server and client side
143
137
  test_files: []