hana 1.3.4 → 1.3.5

Sign up to get free protection for your applications and to get access to all the features.
Files changed (4) hide show
  1. checksums.yaml +4 -4
  2. data/lib/hana.rb +38 -4
  3. data/test/helper.rb +4 -0
  4. metadata +13 -8
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 556063c84c12bf3c25887a6021dbe2231ab3f4a63ef142ad9497031c7fdb6f14
4
- data.tar.gz: 41a7f89c78c4cec3c97c5e8a1f9e409e3a7f6b7edc84ac8f21c7b794fce665f5
3
+ metadata.gz: 8967fc878a6eb09d469a2020f6dcef6d78dbced59b3432a7627a1d82064d1cab
4
+ data.tar.gz: fe88760ea18ff82c272b737e6e7c366dbecda53a1248b6307fc461d056433070
5
5
  SHA512:
6
- metadata.gz: 6922f6fccc85b67181b4d262df950bbb76df8ace31be13acd1ad943aae40b3ab2f936a41af2e18cf546345409d51236c8a74a8a7be6bc05ec6a14c5456e9442b
7
- data.tar.gz: 15c8575ff781dfe4dbb01bc77f80383d4a216a69d8e0282c64175837da52e29d5b92d88bb8ad0a891159ce33c2b9185d895337410400a8038650e623f0931c49
6
+ metadata.gz: 196a984b465565c19efd2e0fe6e08aa718b3dd846d36059242bfc36455deb9f0871aa66c32d892fe7b7b0bae80ed75c471a35dab6f9bc35af4c57a9253fb48e5
7
+ data.tar.gz: b483189d57bd549d4c6072a9bd0adc84a480367fd20720e26c51dd40a48c96dedaf5aced42b64e478dd6ecf4c8554a147efaab9710bd7ee23e20d49871c32507
@@ -1,11 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Hana
4
- VERSION = '1.3.4'
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
- list = Pointer.parse ins[PATH]
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[PATH]) unless dest
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
- obj = src.fetch from_key
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
@@ -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
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: 2018-02-17 00:00:00.000000000 Z
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.16'
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.16'
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
- rubyforge_project:
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.