hana 1.3.4 → 1.3.5

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.
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.