jsi 0.1.0 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -18,8 +18,9 @@ document_types.each do |document_type|
18
18
  let(:document) { document_type[:document] }
19
19
  # by default the node is the whole document
20
20
  let(:path) { [] }
21
+ let(:pointer) { JSI::JSON::Pointer.new(path) }
21
22
  # the node being tested
22
- let(:node) { JSI::JSON::Node.new_by_type(document, path) }
23
+ let(:node) { JSI::JSON::Node.new_by_type(document, pointer) }
23
24
 
24
25
  describe '#each' do
25
26
  it 'iterates, one argument' do
@@ -80,43 +81,43 @@ document_types.each do |document_type|
80
81
  it('#empty?') { assert_equal(false, node.empty?) }
81
82
  it('#has_key?') { assert_equal(true, node.has_key?('a')) }
82
83
  it('#include?') { assert_equal(false, node.include?('q')) }
83
- it('#key?') { assert_equal(true, node.key?('c')) }
84
- it('#keys') { assert_equal(['a', 'c'], node.keys) }
85
- it('#length') { assert_equal(2, node.length) }
86
- it('#member?') { assert_equal(false, node.member?(0)) }
87
- it('#size') { assert_equal(2, node.size) }
84
+ it('#key?') { assert_equal(true, node.key?('c')) }
85
+ it('#keys') { assert_equal(['a', 'c'], node.keys) }
86
+ it('#length') { assert_equal(2, node.length) }
87
+ it('#member?') { assert_equal(false, node.member?(0)) }
88
+ it('#size') { assert_equal(2, node.size) }
88
89
  end
89
90
  describe 'key + value methods' do
90
- it('#<') { assert_equal(true, node < {'a' => 'b', 'c' => node['c'], 'x' => 'y'}) } if {}.respond_to?(:<)
91
- it('#<=') { assert_equal(true, node <= node) } if {}.respond_to?(:<=)
92
- it('#>') { assert_equal(true, node > {}) } if {}.respond_to?(:>)
93
- it('#>=') { assert_equal(false, node >= {'foo' => 'bar'}) } if {}.respond_to?(:>=)
94
- it('#any?') { assert_equal(false, node.any? { |k, v| v == 3 }) }
95
- it('#assoc') { assert_equal(['a', 'b'], node.assoc('a')) }
96
- it('#dig') { assert_equal('e', node.dig('c', 'd')) } if {}.respond_to?(:dig)
97
- it('#each_pair') { assert_equal([['a', 'b'], ['c', node['c']]], node.each_pair.to_a) }
98
- it('#each_value') { assert_equal(['b', node['c']], node.each_value.to_a) }
99
- it('#fetch') { assert_equal('b', node.fetch('a')) }
91
+ it('#<') { assert_equal(true, node < {'a' => 'b', 'c' => node['c'], 'x' => 'y'}) } if {}.respond_to?(:<)
92
+ it('#<=') { assert_equal(true, node <= node) } if {}.respond_to?(:<=)
93
+ it('#>') { assert_equal(true, node > {}) } if {}.respond_to?(:>)
94
+ it('#>=') { assert_equal(false, node >= {'foo' => 'bar'}) } if {}.respond_to?(:>=)
95
+ it('#any?') { assert_equal(false, node.any? { |k, v| v == 3 }) }
96
+ it('#assoc') { assert_equal(['a', 'b'], node.assoc('a')) }
97
+ it('#dig') { assert_equal('e', node.dig('c', 'd')) } if {}.respond_to?(:dig)
98
+ it('#each_pair') { assert_equal([['a', 'b'], ['c', node['c']]], node.each_pair.to_a) }
99
+ it('#each_value') { assert_equal(['b', node['c']], node.each_value.to_a) }
100
+ it('#fetch') { assert_equal('b', node.fetch('a')) }
100
101
  it('#fetch_values') { assert_equal(['b'], node.fetch_values('a')) } if {}.respond_to?(:fetch_values)
101
- it('#has_value?') { assert_equal(true, node.has_value?('b')) }
102
- it('#invert') { assert_equal({'b' => 'a', node['c'] => 'c'}, node.invert) }
103
- it('#key') { assert_equal('a', node.key('b')) }
104
- it('#rassoc') { assert_equal(['a', 'b'], node.rassoc('b')) }
105
- it('#to_h') { assert_equal({'a' => 'b', 'c' => node['c']}, node.to_h) }
106
- it('#to_proc') { assert_equal('b', node.to_proc.call('a')) } if {}.respond_to?(:to_proc)
102
+ it('#has_value?') { assert_equal(true, node.has_value?('b')) }
103
+ it('#invert') { assert_equal({'b' => 'a', node['c'] => 'c'}, node.invert) }
104
+ it('#key') { assert_equal('a', node.key('b')) }
105
+ it('#rassoc') { assert_equal(['a', 'b'], node.rassoc('b')) }
106
+ it('#to_h') { assert_equal({'a' => 'b', 'c' => node['c']}, node.to_h) }
107
+ it('#to_proc') { assert_equal('b', node.to_proc.call('a')) } if {}.respond_to?(:to_proc)
107
108
  if {}.respond_to?(:transform_values)
108
109
  it('#transform_values') { assert_equal({'a' => nil, 'c' => nil}, node.transform_values { |_| nil }) }
109
110
  end
110
- it('#value?') { assert_equal(false, node.value?('0')) }
111
- it('#values') { assert_equal(['b', node['c']], node.values) }
112
- it('#values_at') { assert_equal(['b'], node.values_at('a')) }
111
+ it('#value?') { assert_equal(false, node.value?('0')) }
112
+ it('#values') { assert_equal(['b', node['c']], node.values) }
113
+ it('#values_at') { assert_equal(['b'], node.values_at('a')) }
113
114
  end
114
115
  describe 'modified copy methods' do
115
116
  # I'm going to rely on the #merge test above to test the modified copy functionality and just do basic
116
117
  # tests of all the modified copy methods here
117
- it('#merge') { assert_equal(JSI::JSON::Node.new_doc(node.content.to_hash), node.merge({})) }
118
- it('#reject') { assert_equal(JSI::JSON::Node.new_doc({}), node.reject { true }) }
119
- it('#select') { assert_equal(JSI::JSON::Node.new_doc({}), node.select { false }) }
118
+ it('#merge') { assert_equal(JSI::JSON::Node.new_doc(node.content), node.merge({})) }
119
+ it('#reject') { assert_equal(JSI::JSON::Node.new_doc({}), node.reject { true }) }
120
+ it('#select') { assert_equal(JSI::JSON::Node.new_doc({}), node.select { false }) }
120
121
  # Hash#compact only available as of ruby 2.5.0
121
122
  if {}.respond_to?(:compact)
122
123
  it('#compact') { assert_equal(JSI::JSON::Node.new_doc({"a" => "b", "c" => node.content.to_hash["c"]}), node.compact) }
@@ -2,13 +2,22 @@ require_relative 'test_helper'
2
2
 
3
3
  describe JSI::JSON::Node do
4
4
  let(:path) { [] }
5
- let(:node) { JSI::JSON::Node.new(document, path) }
5
+ let(:pointer) { JSI::JSON::Pointer.new(path) }
6
+ let(:node) { JSI::JSON::Node.new(document, pointer) }
6
7
 
7
8
  describe 'initialization' do
8
9
  it 'initializes' do
9
- node = JSI::JSON::Node.new({'a' => 'b'}, [])
10
+ node = JSI::JSON::Node.new({'a' => 'b'}, pointer)
10
11
  assert_equal({'a' => 'b'}, node.document)
11
- assert_equal([], node.path)
12
+ assert_equal(JSI::JSON::Pointer.new([]), node.pointer)
13
+ end
14
+ it 'initializes, pointer is not pointer' do
15
+ err = assert_raises(TypeError) { JSI::JSON::Node.new({'a' => 'b'}, []) }
16
+ assert_equal('pointer must be a JSI::JSON::Pointer. got: [] (Array)', err.message)
17
+ end
18
+ it 'initializes, document is another Node' do
19
+ err = assert_raises(TypeError) { JSI::JSON::Node.new(JSI::JSON::Node.new({'a' => 'b'}, pointer), pointer) }
20
+ assert_equal("document of a Node should not be another JSI::JSON::Node: #<JSI::JSON::Node fragment=\"#\" {\"a\"=>\"b\"}>", err.message)
12
21
  end
13
22
  end
14
23
  describe 'initialization by .new_by_type' do
@@ -31,15 +40,20 @@ describe JSI::JSON::Node do
31
40
  end
32
41
  describe '#pointer' do
33
42
  it 'is a JSI::JSON::Pointer' do
34
- assert_instance_of(JSI::JSON::Pointer, JSI::JSON::Node.new({}, []).pointer)
43
+ assert_instance_of(JSI::JSON::Pointer, JSI::JSON::Node.new({}, pointer).pointer)
44
+ end
45
+ end
46
+ describe '#path' do
47
+ it 'is an array of reference tokens' do
48
+ assert_equal(['a'], JSI::JSON::Node.new({}, JSI::JSON::Pointer.new(['a'])).path)
35
49
  end
36
50
  end
37
51
  describe '#content' do
38
52
  it 'returns the content at the root' do
39
- assert_equal({'a' => 'b'}, JSI::JSON::Node.new({'a' => 'b'}, []).content)
53
+ assert_equal({'a' => 'b'}, JSI::JSON::Node.new({'a' => 'b'}, pointer).content)
40
54
  end
41
55
  it 'returns the content from the deep' do
42
- assert_equal('b', JSI::JSON::Node.new([0, {'x' => [{'a' => ['b']}]}], [1, 'x', 0, 'a', 0]).content)
56
+ assert_equal('b', JSI::JSON::Node.new([0, {'x' => [{'a' => ['b']}]}], JSI::JSON::Pointer.new([1, 'x', 0, 'a', 0])).content)
43
57
  end
44
58
  end
45
59
  describe '#deref' do
@@ -65,7 +79,7 @@ describe JSI::JSON::Node do
65
79
  it 'subscripts a node consisting of a $ref WITHOUT following' do
66
80
  subscripted = node['a']
67
81
  assert_equal({'$ref' => 'bar', 'foo' => 'bar'}, subscripted.content)
68
- assert_equal(['a'], subscripted.path)
82
+ assert_equal(JSI::JSON::Pointer.new(['a']), subscripted.pointer)
69
83
  end
70
84
  it 'looks for a node in #/schemas with the name of the $ref' do
71
85
  assert_equal({'description' => ['baz']}, node['a'].deref.content)
@@ -73,7 +87,7 @@ describe JSI::JSON::Node do
73
87
  it 'follows a $ref when subscripting past it' do
74
88
  subscripted = node['a']['description']
75
89
  assert_equal(['baz'], subscripted.content)
76
- assert_equal(['schemas', 'bar', 'description'], subscripted.path)
90
+ assert_equal(JSI::JSON::Pointer.new(['schemas', 'bar', 'description']), subscripted.pointer)
77
91
  end
78
92
  it 'does not follow a $ref when subscripting a key that is present' do
79
93
  subscripted = node['a']['foo']
@@ -103,13 +117,20 @@ describe JSI::JSON::Node do
103
117
  subscripted = node[1]['x']
104
118
  assert_instance_of(JSI::JSON::ArrayNode, subscripted)
105
119
  assert_equal([{'a' => ['b']}], subscripted.content)
106
- assert_equal([1, 'x'], subscripted.path)
120
+ assert_equal(JSI::JSON::Pointer.new([1, 'x']), subscripted.pointer)
107
121
  end
108
122
  it 'returns HashNode for a Hash' do
109
123
  subscripted = node[1]
110
124
  assert_instance_of(JSI::JSON::HashNode, subscripted)
111
125
  assert_equal({'x' => [{'a' => ['b']}]}, subscripted.content)
112
- assert_equal([1], subscripted.path)
126
+ assert_equal(JSI::JSON::Pointer.new([1]), subscripted.pointer)
127
+ end
128
+ describe 'content does not respond to []' do
129
+ let(:document) { Object.new }
130
+ it 'cannot subscript' do
131
+ err = assert_raises(NoMethodError) { node['x'] }
132
+ assert_equal("undefined method `[]`\nsubscripting with \"x\" (String) from Object. content is: #{document.pretty_inspect.chomp}", err.message)
133
+ end
113
134
  end
114
135
  end
115
136
  describe 'with dereferencing' do
@@ -122,12 +143,12 @@ describe JSI::JSON::Node do
122
143
  it 'subscripts a node consisting of a $ref WITHOUT following' do
123
144
  subscripted = node['a']
124
145
  assert_equal({'$ref' => '#/foo', 'description' => 'hi'}, subscripted.content)
125
- assert_equal(['a'], subscripted.path)
146
+ assert_equal(JSI::JSON::Pointer.new(['a']), subscripted.pointer)
126
147
  end
127
148
  it 'follows a $ref when subscripting past it' do
128
149
  subscripted = node['a']['bar']
129
150
  assert_equal(['baz'], subscripted.content)
130
- assert_equal(['foo', 'bar'], subscripted.path)
151
+ assert_equal(JSI::JSON::Pointer.new(['foo', 'bar']), subscripted.pointer)
131
152
  end
132
153
  it 'does not follow a $ref when subscripting a key that is present' do
133
154
  subscripted = node['a']['description']
@@ -140,7 +161,7 @@ describe JSI::JSON::Node do
140
161
  it 'assigns' do
141
162
  node[0] = 'abcdefg'
142
163
  assert_equal(['abcdefg', {'x' => [{'a' => ['b']}]}], document)
143
- string_node = JSI::JSON::Node.new(document, [0])
164
+ string_node = JSI::JSON::Node.new(document, JSI::JSON::Pointer.new([0]))
144
165
  string_node[0..2] = '0'
145
166
  assert_equal(['0defg', {'x' => [{'a' => ['b']}]}], document)
146
167
  node[0] = node[1]
@@ -161,19 +182,19 @@ describe JSI::JSON::Node do
161
182
  let(:document) { {'a' => {'b' => []}} }
162
183
  it 'finds a parent' do
163
184
  sub = node['a']['b']
164
- assert_equal(['a', 'b'], sub.path)
185
+ assert_equal(JSI::JSON::Pointer.new(['a', 'b']), sub.pointer)
165
186
  parent = sub.parent_node
166
- assert_equal(['a'], parent.path)
187
+ assert_equal(JSI::JSON::Pointer.new(['a']), parent.pointer)
167
188
  assert_equal({'b' => []}, parent.content)
168
189
  assert_equal(node['a'], parent)
169
190
  root_from_sub = sub.parent_node.parent_node
170
- assert_equal([], root_from_sub.path)
191
+ assert_equal(JSI::JSON::Pointer.new([]), root_from_sub.pointer)
171
192
  assert_equal({'a' => {'b' => []}}, root_from_sub.content)
172
193
  assert_equal(node, root_from_sub)
173
194
  err = assert_raises(JSI::JSON::Pointer::ReferenceError) do
174
195
  root_from_sub.parent_node
175
196
  end
176
- assert_match(/\Acannot access parent of root node: #\{<JSI::JSON::HashNode/, err.message)
197
+ assert_match(/\Acannot access parent of root pointer: #<JSI::JSON::Pointer/, err.message)
177
198
  end
178
199
  end
179
200
  describe '#pointer_path' do
@@ -234,11 +255,11 @@ describe JSI::JSON::Node do
234
255
  assert_equal(node.document_node[0].content.object_id, unmodified_dup.document_node[0].content.object_id)
235
256
  end
236
257
  it 'raises subscripting string from array' do
237
- err = assert_raises(TypeError) { JSI::JSON::Node.new(document, ['x']).modified_copy(&:dup) }
258
+ err = assert_raises(TypeError) { JSI::JSON::Node.new(document, JSI::JSON::Pointer.new(['x'])).modified_copy(&:dup) }
238
259
  assert_match(%r(\Abad subscript "x" with remaining subpath: \[\] for array: \[.*\]\z)m, err.message)
239
260
  end
240
261
  it 'raises subscripting from invalid subpath' do
241
- err = assert_raises(TypeError) { JSI::JSON::Node.new(document, [0, 0, 'what']).modified_copy(&:dup) }
262
+ err = assert_raises(TypeError) { JSI::JSON::Node.new(document, JSI::JSON::Pointer.new([0, 0, 'what'])).modified_copy(&:dup) }
242
263
  assert_match(%r(bad subscript: "what" with remaining subpath: \[\] for content: "b"\z)m, err.message)
243
264
  end
244
265
  end
@@ -257,23 +278,24 @@ describe JSI::JSON::Node do
257
278
  end
258
279
  end
259
280
  describe '#fingerprint' do
281
+ let(:pointer) { JSI::JSON::Pointer.new([]) }
260
282
  it 'hashes consistently' do
261
- assert_equal('x', {JSI::JSON::Node.new([0], []) => 'x'}[JSI::JSON::Node.new([0], [])])
283
+ assert_equal('x', {JSI::JSON::Node.new([0], pointer) => 'x'}[JSI::JSON::Node.new([0], pointer)])
262
284
  end
263
285
  it 'hashes consistently regardless of the Node being decorated as a subclass' do
264
- assert_equal('x', {JSI::JSON::Node.new_doc([0]) => 'x'}[JSI::JSON::Node.new([0], [])])
265
- assert_equal('x', {JSI::JSON::Node.new([0], []) => 'x'}[JSI::JSON::Node.new_doc([0])])
286
+ assert_equal('x', {JSI::JSON::Node.new_doc([0]) => 'x'}[JSI::JSON::Node.new([0], pointer)])
287
+ assert_equal('x', {JSI::JSON::Node.new([0], pointer) => 'x'}[JSI::JSON::Node.new_doc([0])])
266
288
  end
267
289
  it '==' do
268
- assert_equal(JSI::JSON::Node.new([0], []), JSI::JSON::Node.new([0], []))
269
- assert_equal(JSI::JSON::Node.new_doc([0]), JSI::JSON::Node.new([0], []))
270
- assert_equal(JSI::JSON::Node.new([0], []), JSI::JSON::Node.new_doc([0]))
290
+ assert_equal(JSI::JSON::Node.new([0], pointer), JSI::JSON::Node.new([0], pointer))
291
+ assert_equal(JSI::JSON::Node.new_doc([0]), JSI::JSON::Node.new([0], pointer))
292
+ assert_equal(JSI::JSON::Node.new([0], pointer), JSI::JSON::Node.new_doc([0]))
271
293
  assert_equal(JSI::JSON::Node.new_doc([0]), JSI::JSON::Node.new_doc([0]))
272
294
  end
273
295
  it '!=' do
274
- refute_equal(JSI::JSON::Node.new([0], []), JSI::JSON::Node.new({}, []))
275
- refute_equal(JSI::JSON::Node.new_doc([0]), JSI::JSON::Node.new({}, []))
276
- refute_equal(JSI::JSON::Node.new([0], []), JSI::JSON::Node.new_doc({}))
296
+ refute_equal(JSI::JSON::Node.new([0], pointer), JSI::JSON::Node.new({}, pointer))
297
+ refute_equal(JSI::JSON::Node.new_doc([0]), JSI::JSON::Node.new({}, pointer))
298
+ refute_equal(JSI::JSON::Node.new([0], pointer), JSI::JSON::Node.new_doc({}))
277
299
  refute_equal(JSI::JSON::Node.new_doc([0]), JSI::JSON::Node.new_doc({}))
278
300
  refute_equal({}, JSI::JSON::Node.new_doc({}))
279
301
  refute_equal(JSI::JSON::Node.new_doc({}), {})
@@ -35,13 +35,13 @@ describe JSI::JSON::Pointer do
35
35
  "/m~0n" , 8,
36
36
  ]
37
37
  evaluations.each_slice(2) do |pointer, value|
38
- assert_equal(value, JSI::JSON::Pointer.new(:pointer, pointer).evaluate(document))
38
+ assert_equal(value, JSI::JSON::Pointer.from_pointer(pointer).evaluate(document))
39
39
  end
40
40
  end
41
41
 
42
42
  it 'raises for invalid syntax' do
43
43
  err = assert_raises(JSI::JSON::Pointer::PointerSyntaxError) do
44
- JSI::JSON::Pointer.new(:pointer, "this does not begin with slash").evaluate(document)
44
+ JSI::JSON::Pointer.from_pointer("this does not begin with slash").evaluate(document)
45
45
  end
46
46
  assert_equal("Invalid pointer syntax in \"this does not begin with slash\": pointer must begin with /", err.message)
47
47
  end
@@ -80,19 +80,27 @@ describe JSI::JSON::Pointer do
80
80
  '#/m~0n', 8,
81
81
  ]
82
82
  evaluations.each_slice(2) do |fragment, value|
83
- assert_equal(value, JSI::JSON::Pointer.new(:fragment, fragment).evaluate(document))
83
+ assert_equal(value, JSI::JSON::Pointer.from_fragment(fragment).evaluate(document))
84
84
  end
85
85
  end
86
86
 
87
87
  it 'raises for invalid syntax' do
88
88
  err = assert_raises(JSI::JSON::Pointer::PointerSyntaxError) do
89
- JSI::JSON::Pointer.new(:fragment, "this does not begin with #").evaluate(document)
89
+ JSI::JSON::Pointer.from_fragment("this does not begin with #").evaluate(document)
90
90
  end
91
91
  assert_equal("Invalid fragment syntax in \"this does not begin with #\": fragment must begin with #", err.message)
92
92
  err = assert_raises(JSI::JSON::Pointer::PointerSyntaxError) do
93
- JSI::JSON::Pointer.new(:fragment, "#this does not begin with slash").evaluate(document)
93
+ JSI::JSON::Pointer.from_fragment("#this does not begin with slash").evaluate(document)
94
94
  end
95
95
  assert_equal("Invalid pointer syntax in \"this does not begin with slash\": pointer must begin with /", err.message)
96
96
  end
97
97
  end
98
+ describe 'initialize' do
99
+ describe 'invalid reference_tokens' do
100
+ it 'raises' do
101
+ err = assert_raises(TypeError) { JSI::JSON::Pointer.new({}) }
102
+ assert_equal("reference_tokens must be an array. got: {}", err.message)
103
+ end
104
+ end
105
+ end
98
106
  end
@@ -17,7 +17,7 @@ describe JSI::Schema do
17
17
  it 'initializes from a JSI' do
18
18
  schema_jsi = SomeMetaschema.new('type' => 'object')
19
19
  schema = JSI::Schema.new(schema_jsi)
20
- assert_equal(schema_jsi.instance, schema.schema_node)
20
+ assert_equal(schema_jsi, schema.schema_node)
21
21
  assert_equal(schema_jsi, schema.schema_object)
22
22
  end
23
23
  it 'cannot instantiate from some unknown object' do
@@ -167,27 +167,27 @@ describe JSI::Schema do
167
167
  let(:schema) { JSI::Schema.new({id: 'https://schemas.jsi.unth.net/test/validation', type: 'object'}) }
168
168
  describe 'without errors' do
169
169
  let(:instance) { {'foo' => 'bar'} }
170
- it '#fully_validate' do
171
- assert_equal([], schema.fully_validate(instance))
170
+ it '#fully_validate_instance' do
171
+ assert_equal([], schema.fully_validate_instance(instance))
172
172
  end
173
- it '#validate' do
174
- assert_equal(true, schema.validate(instance))
173
+ it '#validate_instance' do
174
+ assert_equal(true, schema.validate_instance(instance))
175
175
  end
176
- it '#validate!' do
177
- assert_equal(true, schema.validate!(instance))
176
+ it '#validate_instance!' do
177
+ assert_equal(true, schema.validate_instance!(instance))
178
178
  end
179
179
  end
180
180
  describe 'with errors' do
181
181
  let(:instance) { ['no'] }
182
- it '#fully_validate' do
183
- assert_equal(["The property '#/' of type array did not match the following type: object in schema https://schemas.jsi.unth.net/test/validation"], schema.fully_validate(instance))
182
+ it '#fully_validate_instance' do
183
+ assert_equal(["The property '#/' of type array did not match the following type: object in schema https://schemas.jsi.unth.net/test/validation"], schema.fully_validate_instance(instance))
184
184
  end
185
- it '#validate' do
186
- assert_equal(false, schema.validate(instance))
185
+ it '#validate_instance' do
186
+ assert_equal(false, schema.validate_instance(instance))
187
187
  end
188
- it '#validate!' do
188
+ it '#validate_instance!' do
189
189
  err = assert_raises(JSON::Schema::ValidationError) do
190
- schema.validate!(instance)
190
+ schema.validate_instance!(instance)
191
191
  end
192
192
  assert_equal("The property '#/' of type array did not match the following type: object", err.message)
193
193
  end
@@ -0,0 +1,8 @@
1
+ require_relative 'test_helper'
2
+
3
+ require 'spreedly_openapi'
4
+ describe 'spreedly openapi' do
5
+ it 'instantiates the spreedly openapi doc' do
6
+ SpreedlyOpenAPI::Document.inspect
7
+ end
8
+ end
@@ -2,8 +2,10 @@ require 'coveralls'
2
2
  if Coveralls.will_run?
3
3
  Coveralls.wear!
4
4
  end
5
-
6
5
  require 'simplecov'
6
+
7
+ require 'byebug'
8
+
7
9
  $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
8
10
  require 'jsi'
9
11
 
@@ -16,8 +18,6 @@ require 'minitest/reporters'
16
18
 
17
19
  Minitest::Reporters.use! Minitest::Reporters::SpecReporter.new
18
20
 
19
- require 'byebug'
20
-
21
21
  class JSISpec < Minitest::Spec
22
22
  if ENV['JSI_TEST_ALPHA']
23
23
  # :nocov:
@@ -6,23 +6,23 @@ describe JSI::Util do
6
6
  assert_equal({'a' => 'b', 'c' => 'd', nil => 3}, JSI.stringify_symbol_keys({a: 'b', 'c' => 'd', nil => 3}))
7
7
  end
8
8
  it 'stringifies HashNode keys' do
9
- actual = JSI.stringify_symbol_keys(JSI::JSON::HashNode.new({a: 'b', 'c' => 'd', nil => 3}, []))
10
- expected = JSI::JSON::HashNode.new({'a' => 'b', 'c' => 'd', nil => 3}, [])
9
+ actual = JSI.stringify_symbol_keys(JSI::JSON::Node.new_doc({a: 'b', 'c' => 'd', nil => 3}))
10
+ expected = JSI::JSON::Node.new_doc({'a' => 'b', 'c' => 'd', nil => 3})
11
11
  assert_equal(expected, actual)
12
12
  end
13
13
  it 'stringifies JSI hash keys' do
14
14
  klass = JSI.class_for_schema(type: 'object')
15
- expected = JSI.stringify_symbol_keys(klass.new(JSI::JSON::HashNode.new({a: 'b', 'c' => 'd', nil => 3}, [])))
16
- actual = klass.new(JSI::JSON::HashNode.new({'a' => 'b', 'c' => 'd', nil => 3}, []))
15
+ expected = JSI.stringify_symbol_keys(klass.new(JSI::JSON::Node.new_doc({a: 'b', 'c' => 'd', nil => 3})))
16
+ actual = klass.new(JSI::JSON::Node.new_doc({'a' => 'b', 'c' => 'd', nil => 3}))
17
17
  assert_equal(expected, actual)
18
18
  end
19
19
  describe 'non-hash-like argument' do
20
20
  it 'errors' do
21
21
  err = assert_raises(ArgumentError) { JSI.stringify_symbol_keys(nil) }
22
22
  assert_equal("expected argument to be a hash; got NilClass: nil", err.message)
23
- err = assert_raises(ArgumentError) { JSI.stringify_symbol_keys(JSI::JSON::Node.new(3, [])) }
23
+ err = assert_raises(ArgumentError) { JSI.stringify_symbol_keys(JSI::JSON::Node.new_doc(3)) }
24
24
  assert_equal("expected argument to be a hash; got JSI::JSON::Node: #<JSI::JSON::Node fragment=\"#\" 3>", err.message)
25
- err = assert_raises(ArgumentError) { JSI.stringify_symbol_keys(JSI.class_for_schema({}).new(JSI::JSON::Node.new(3, []))) }
25
+ err = assert_raises(ArgumentError) { JSI.stringify_symbol_keys(JSI.class_for_schema({}).new(JSI::JSON::Node.new_doc(3))) }
26
26
  assert_match(%r(\Aexpected argument to be a hash; got JSI::SchemaClasses\["[^"]+#"\]: #<JSI::SchemaClasses\["[^"]+#"\]\n #<JSI::JSON::Node fragment="#" 3>\n>\z)m, err.message)
27
27
  end
28
28
  end
@@ -48,14 +48,14 @@ describe JSI::Util do
48
48
  assert_equal(expected, actual)
49
49
  end
50
50
  it 'deep stringifies HashNode keys' do
51
- actual = JSI.deep_stringify_symbol_keys(JSI::JSON::HashNode.new({a: 'b', 'c' => {d: 0}, nil => 3}, []))
52
- expected = JSI::JSON::HashNode.new({'a' => 'b', 'c' => {'d' => 0}, nil => 3}, [])
51
+ actual = JSI.deep_stringify_symbol_keys(JSI::JSON::Node.new_doc({a: 'b', 'c' => {d: 0}, nil => 3}))
52
+ expected = JSI::JSON::Node.new_doc({'a' => 'b', 'c' => {'d' => 0}, nil => 3})
53
53
  assert_equal(expected, actual)
54
54
  end
55
55
  it 'deep stringifies JSI instance' do
56
56
  klass = JSI.class_for_schema(type: 'object')
57
- actual = JSI.deep_stringify_symbol_keys(klass.new(JSI::JSON::HashNode.new({a: 'b', 'c' => {d: 0}, nil => 3}, [])))
58
- expected = klass.new(JSI::JSON::HashNode.new({'a' => 'b', 'c' => {'d' => 0}, nil => 3}, []))
57
+ actual = JSI.deep_stringify_symbol_keys(klass.new(JSI::JSON::Node.new_doc({a: 'b', 'c' => {d: 0}, nil => 3})))
58
+ expected = klass.new(JSI::JSON::Node.new_doc({'a' => 'b', 'c' => {'d' => 0}, nil => 3}))
59
59
  assert_equal(expected, actual)
60
60
  end
61
61
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jsi
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ethan
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-08-19 00:00:00.000000000 Z
11
+ date: 2019-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema
@@ -83,7 +83,7 @@ dependencies:
83
83
  description: JSI represents json-schemas as ruby classes and json-schema instances
84
84
  as instances of those classes
85
85
  email:
86
- - ethan@unth
86
+ - ethan@unth.net
87
87
  executables: []
88
88
  extensions: []
89
89
  extra_rdoc_files: []
@@ -103,7 +103,10 @@ files:
103
103
  - lib/jsi/json.rb
104
104
  - lib/jsi/json/node.rb
105
105
  - lib/jsi/json/pointer.rb
106
+ - lib/jsi/pathed_node.rb
106
107
  - lib/jsi/schema.rb
108
+ - lib/jsi/schema_classes.rb
109
+ - lib/jsi/simple_wrap.rb
107
110
  - lib/jsi/typelike_modules.rb
108
111
  - lib/jsi/util.rb
109
112
  - lib/jsi/version.rb
@@ -118,6 +121,7 @@ files:
118
121
  - test/jsi_test.rb
119
122
  - test/jsi_typelike_as_json_test.rb
120
123
  - test/schema_test.rb
124
+ - test/spreedly_openapi_test.rb
121
125
  - test/test_helper.rb
122
126
  - test/util_test.rb
123
127
  homepage: https://github.com/notEthan/jsi
@@ -156,5 +160,6 @@ test_files:
156
160
  - test/jsi_test.rb
157
161
  - test/jsi_typelike_as_json_test.rb
158
162
  - test/schema_test.rb
163
+ - test/spreedly_openapi_test.rb
159
164
  - test/test_helper.rb
160
165
  - test/util_test.rb