hana 1.3.4 → 1.3.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/hana.rb +38 -4
- data/test/helper.rb +4 -0
- metadata +13 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8967fc878a6eb09d469a2020f6dcef6d78dbced59b3432a7627a1d82064d1cab
|
4
|
+
data.tar.gz: fe88760ea18ff82c272b737e6e7c366dbecda53a1248b6307fc461d056433070
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 196a984b465565c19efd2e0fe6e08aa718b3dd846d36059242bfc36455deb9f0871aa66c32d892fe7b7b0bae80ed75c471a35dab6f9bc35af4c57a9253fb48e5
|
7
|
+
data.tar.gz: b483189d57bd549d4c6072a9bd0adc84a480367fd20720e26c51dd40a48c96dedaf5aced42b64e478dd6ecf4c8554a147efaab9710bd7ee23e20d49871c32507
|
data/lib/hana.rb
CHANGED
@@ -1,11 +1,17 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
module Hana
|
4
|
-
VERSION = '1.3.
|
4
|
+
VERSION = '1.3.5'
|
5
5
|
|
6
6
|
class Pointer
|
7
7
|
include Enumerable
|
8
8
|
|
9
|
+
class Exception < StandardError
|
10
|
+
end
|
11
|
+
|
12
|
+
class FormatError < Exception
|
13
|
+
end
|
14
|
+
|
9
15
|
def initialize path
|
10
16
|
@path = Pointer.parse path
|
11
17
|
end
|
@@ -32,6 +38,11 @@ module Hana
|
|
32
38
|
|
33
39
|
def self.parse path
|
34
40
|
return [''] if path == '/'
|
41
|
+
return [] if path == ''
|
42
|
+
|
43
|
+
unless path.start_with? '/'
|
44
|
+
raise FormatError, "JSON Pointer should start with a slash"
|
45
|
+
end
|
35
46
|
|
36
47
|
parts = path.sub(/^\//, '').split(/(?<!\^)\//).each { |part|
|
37
48
|
part.gsub!(/\^[\/^]|~[01]/) { |m| ESC[m] }
|
@@ -68,6 +79,9 @@ module Hana
|
|
68
79
|
class MissingTargetException < Exception
|
69
80
|
end
|
70
81
|
|
82
|
+
class InvalidPath < Exception
|
83
|
+
end
|
84
|
+
|
71
85
|
def initialize is
|
72
86
|
@is = is
|
73
87
|
end
|
@@ -90,12 +104,22 @@ module Hana
|
|
90
104
|
OP = 'op' # :nodoc:
|
91
105
|
|
92
106
|
def add ins, doc
|
93
|
-
|
107
|
+
unless ins.key?('path')
|
108
|
+
raise Hana::Patch::InvalidPath, "missing 'path' parameter"
|
109
|
+
end
|
110
|
+
|
111
|
+
path = ins['path']
|
112
|
+
|
113
|
+
unless path
|
114
|
+
raise Hana::Patch::InvalidPath, "null is not valid value for 'path'"
|
115
|
+
end
|
116
|
+
|
117
|
+
list = Pointer.parse path
|
94
118
|
key = list.pop
|
95
119
|
dest = Pointer.eval list, doc
|
96
120
|
obj = ins.fetch VALUE
|
97
121
|
|
98
|
-
raise(MissingTargetException, ins[
|
122
|
+
raise(MissingTargetException, ins['path']) unless dest
|
99
123
|
|
100
124
|
if key
|
101
125
|
add_op dest, key, obj
|
@@ -117,6 +141,12 @@ module Hana
|
|
117
141
|
src = Pointer.eval from, doc
|
118
142
|
dest = Pointer.eval to, doc
|
119
143
|
|
144
|
+
unless Array === src
|
145
|
+
unless src.key? from_key
|
146
|
+
raise Hana::Patch::MissingTargetException
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
120
150
|
obj = rm_op src, from_key
|
121
151
|
add_op dest, key, obj
|
122
152
|
doc
|
@@ -134,7 +164,11 @@ module Hana
|
|
134
164
|
raise Patch::IndexError unless from_key =~ /\A\d+\Z/
|
135
165
|
obj = src.fetch from_key.to_i
|
136
166
|
else
|
137
|
-
|
167
|
+
begin
|
168
|
+
obj = src.fetch from_key
|
169
|
+
rescue KeyError => e
|
170
|
+
raise Hana::Patch::MissingTargetException, e.message
|
171
|
+
end
|
138
172
|
end
|
139
173
|
|
140
174
|
add_op dest, key, obj
|
data/test/helper.rb
CHANGED
@@ -67,8 +67,12 @@ module Hana
|
|
67
67
|
[KeyError]
|
68
68
|
when /Unrecognized op 'spam'/ then
|
69
69
|
[Hana::Patch::Exception]
|
70
|
+
when /missing 'path'|null is not valid value for 'path'/ then
|
71
|
+
[Hana::Patch::InvalidPath]
|
70
72
|
when /missing|non-existent/ then
|
71
73
|
[Hana::Patch::MissingTargetException]
|
74
|
+
when /JSON Pointer should start with a slash/ then
|
75
|
+
[Hana::Pointer::FormatError]
|
72
76
|
else
|
73
77
|
[Hana::Patch::FailedTestException]
|
74
78
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: hana
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.3.
|
4
|
+
version: 1.3.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Aaron Patterson
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2019-01-30 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: minitest
|
@@ -28,30 +28,36 @@ dependencies:
|
|
28
28
|
name: rdoc
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
33
|
version: '4.0'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '7'
|
34
37
|
type: :development
|
35
38
|
prerelease: false
|
36
39
|
version_requirements: !ruby/object:Gem::Requirement
|
37
40
|
requirements:
|
38
|
-
- - "
|
41
|
+
- - ">="
|
39
42
|
- !ruby/object:Gem::Version
|
40
43
|
version: '4.0'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '7'
|
41
47
|
- !ruby/object:Gem::Dependency
|
42
48
|
name: hoe
|
43
49
|
requirement: !ruby/object:Gem::Requirement
|
44
50
|
requirements:
|
45
51
|
- - "~>"
|
46
52
|
- !ruby/object:Gem::Version
|
47
|
-
version: '3.
|
53
|
+
version: '3.17'
|
48
54
|
type: :development
|
49
55
|
prerelease: false
|
50
56
|
version_requirements: !ruby/object:Gem::Requirement
|
51
57
|
requirements:
|
52
58
|
- - "~>"
|
53
59
|
- !ruby/object:Gem::Version
|
54
|
-
version: '3.
|
60
|
+
version: '3.17'
|
55
61
|
description: Implementation of [JSON Patch][1] and [JSON Pointer][2] RFC.
|
56
62
|
email:
|
57
63
|
- aaron@tenderlovemaking.com
|
@@ -96,8 +102,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
96
102
|
- !ruby/object:Gem::Version
|
97
103
|
version: '0'
|
98
104
|
requirements: []
|
99
|
-
|
100
|
-
rubygems_version: 2.7.6
|
105
|
+
rubygems_version: 3.0.1
|
101
106
|
signing_key:
|
102
107
|
specification_version: 4
|
103
108
|
summary: Implementation of [JSON Patch][1] and [JSON Pointer][2] RFC.
|