apimatic_core 0.3.4 → 0.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f03128e2b836d53e911610d9765b660007e9275c08022c55850cc5449813b817
4
- data.tar.gz: 9ac3f6bd7f83457e2b81c6d413296705b09f751da199f974df8b752fac374b6f
3
+ metadata.gz: 748bf7df87d6f81d0b5d593d893451ea2f1a38d4baa0f5a8034d12a9287bf11f
4
+ data.tar.gz: 5fbf6484cb560e4c0fbd9cf41b18dfdb65c1efb52a66de4d559916ca417d3eca
5
5
  SHA512:
6
- metadata.gz: d0fdc305da1030ad466f0790e6c5ed52061f7a56ab197841542c7f0d219885990ff6c70dd429ab3a07b6ff32b7cdebfa03687d4988848ff07ca8dc824ab95311
7
- data.tar.gz: 2a21f5d179433a0f23bf45cdb271f249caab25ce2fe7b9a7066fc84681207d97dc59eea206d2575f399fea8686aca668de6ed8e69632a1efadddf83dbae1eba9
6
+ metadata.gz: 3bfbdc11191f658ac7e3dc9dd5dcc57b6854bcd3690ebeba1a6c77122a543c92f39e486aae6106bd191bf25bed3c599d073be0e49844445b40d61a45f29840ba
7
+ data.tar.gz: 4bf096df545db3b501d85c7a22e945dff7c4f2ef287c88af9b7a782293435a8063373209acddcfd309fc3ba6330b535cb6d4b14509dfcfc0f25802c82205fc7a
@@ -1,5 +1,4 @@
1
1
  require 'erb'
2
- require 'json-pointer'
3
2
 
4
3
  module CoreLibrary
5
4
  # API utility class involved in executing an API
@@ -469,7 +468,7 @@ module CoreLibrary
469
468
  if placeholder.include? '#'
470
469
  # pick the 2nd chunk then remove the last character (i.e. `}`) of the string value
471
470
  node_pointer = placeholder.split('#')[1].delete_suffix('}')
472
- value_pointer = JsonPointer.new(value, node_pointer, symbolize_keys: true)
471
+ value_pointer = JsonPointerHelper.new(value, node_pointer, symbolize_keys: true)
473
472
  extracted_value = json_serialize(value_pointer.value) if value_pointer.exists?
474
473
  elsif !value.nil?
475
474
  extracted_value = json_serialize(value)
@@ -0,0 +1,134 @@
1
+ module CoreLibrary
2
+ # A utility for json specific operations.
3
+ class JsonPointerHelper
4
+ NotFound = Class.new
5
+ WILDCARD = '~'.freeze
6
+ ARRAY_PUSH_KEY = '-'.freeze
7
+
8
+ def self.escape_fragment(fragment)
9
+ return fragment if fragment == WILDCARD
10
+
11
+ fragment.gsub(/~/, '~0').gsub(%r{/}, '~1')
12
+ end
13
+
14
+ def self.unescape_fragment(fragment)
15
+ fragment.gsub(/~1/, '/').gsub(/~0/, '~')
16
+ end
17
+
18
+ def initialize(hash, path, options = {})
19
+ @hash = hash
20
+ @path = path
21
+ @options = options
22
+ end
23
+
24
+ def value
25
+ get_member_value
26
+ end
27
+
28
+ def exists?
29
+ _exists = false
30
+ get_target_member(@hash, path_fragments.dup) do |target, options = {}|
31
+ if options[:wildcard]
32
+ _exists = target.any? { |t| !t.nil? && !t.is_a?(NotFound) }
33
+ else
34
+ _exists = true unless target.is_a?(NotFound)
35
+ end
36
+ end
37
+ _exists
38
+ end
39
+
40
+ private
41
+
42
+ def get_member_value(obj = @hash, fragments = path_fragments.dup)
43
+ return obj if fragments.empty?
44
+
45
+ fragment = fragments.shift
46
+ case obj
47
+ when Hash
48
+ get_member_value(obj[fragment_to_key(fragment)], fragments)
49
+ when Array
50
+ if fragment == WILDCARD
51
+ obj.map { |i| get_member_value(i, fragments.dup) }
52
+ else
53
+ get_member_value(obj[fragment_to_index(fragment)], fragments)
54
+ end
55
+ else
56
+ NotFound.new
57
+ end
58
+ end
59
+
60
+ def get_target_member(obj, fragments, options = {}, &block)
61
+ return yield(obj, {}) if fragments.empty?
62
+
63
+ case obj
64
+ when Hash
65
+ get_target_member_if_hash(obj, fragments, options, &block)
66
+ when Array
67
+ get_target_member_if_array(obj, fragments, options, &block)
68
+ else
69
+ NotFound.new
70
+ end
71
+ end
72
+
73
+ def get_target_member_if_hash(obj, fragments, options = {}, &block)
74
+ fragment = fragments.shift
75
+ key = fragment_to_key(fragment)
76
+ obj = if options[:create_missing]
77
+ obj[key] ||= {}
78
+ else
79
+ obj.key?(key) ? obj[key] : NotFound.new
80
+ end
81
+
82
+ get_target_member(obj, fragments, options, &block)
83
+ end
84
+
85
+ def get_target_member_if_array(obj, fragments, options = {}, &block)
86
+ fragment = fragments.shift
87
+ if fragment == WILDCARD
88
+ if obj.any?
89
+ targets = obj.map do |i|
90
+ get_target_member(i || {}, fragments.dup, options) do |t|
91
+ t
92
+ end
93
+ end
94
+ yield(targets, wildcard: true)
95
+ else
96
+ NotFound.new
97
+ end
98
+ else
99
+ index = fragment_to_index(fragment)
100
+ obj = if options[:create_missing]
101
+ obj[index] ||= {}
102
+ else
103
+ index >= obj.size ? NotFound.new : obj[index]
104
+ end
105
+
106
+ get_target_member(obj, fragments, &block)
107
+ end
108
+ end
109
+
110
+ def path_fragments
111
+ @path_fragments ||= @path.sub(%r{\A/}, '').split('/').map { |fragment| unescape_fragment(fragment) }
112
+ end
113
+
114
+ def escape_fragment(fragment)
115
+ JsonPointerHelper.escape_fragment(fragment)
116
+ end
117
+
118
+ def unescape_fragment(fragment)
119
+ JsonPointerHelper.unescape_fragment(fragment)
120
+ end
121
+
122
+ def fragment_to_key(fragment)
123
+ if @options[:symbolize_keys]
124
+ fragment.to_sym
125
+ else
126
+ fragment
127
+ end
128
+ end
129
+
130
+ def fragment_to_index(fragment)
131
+ fragment.to_i
132
+ end
133
+ end
134
+ end
data/lib/apimatic_core.rb CHANGED
@@ -3,7 +3,6 @@ require 'json'
3
3
  require 'certifi'
4
4
  require 'apimatic_core_interfaces'
5
5
  require 'cgi'
6
- require 'json-pointer'
7
6
 
8
7
  require_relative 'apimatic-core/request_builder'
9
8
  require_relative 'apimatic-core/response_handler'
@@ -44,6 +43,7 @@ require_relative 'apimatic-core/utilities/file_helper'
44
43
  require_relative 'apimatic-core/utilities/xml_helper'
45
44
  require_relative 'apimatic-core/utilities/auth_helper'
46
45
  require_relative 'apimatic-core/utilities/union_type_helper'
46
+ require_relative 'apimatic-core/utilities/json_pointer_helper'
47
47
 
48
48
  require_relative 'apimatic-core/authentication/header_auth'
49
49
  require_relative 'apimatic-core/authentication/query_auth'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: apimatic_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.4
4
+ version: 0.3.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - APIMatic Ltd.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-01-17 00:00:00.000000000 Z
11
+ date: 2024-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: apimatic_core_interfaces
@@ -78,20 +78,6 @@ dependencies:
78
78
  - - "~>"
79
79
  - !ruby/object:Gem::Version
80
80
  version: '1.0'
81
- - !ruby/object:Gem::Dependency
82
- name: json-pointer
83
- requirement: !ruby/object:Gem::Requirement
84
- requirements:
85
- - - ">="
86
- - !ruby/object:Gem::Version
87
- version: '0'
88
- type: :runtime
89
- prerelease: false
90
- version_requirements: !ruby/object:Gem::Requirement
91
- requirements:
92
- - - ">="
93
- - !ruby/object:Gem::Version
94
- version: '0'
95
81
  - !ruby/object:Gem::Dependency
96
82
  name: faraday
97
83
  requirement: !ruby/object:Gem::Requirement
@@ -206,6 +192,7 @@ files:
206
192
  - lib/apimatic-core/utilities/comparison_helper.rb
207
193
  - lib/apimatic-core/utilities/date_time_helper.rb
208
194
  - lib/apimatic-core/utilities/file_helper.rb
195
+ - lib/apimatic-core/utilities/json_pointer_helper.rb
209
196
  - lib/apimatic-core/utilities/union_type_helper.rb
210
197
  - lib/apimatic-core/utilities/xml_helper.rb
211
198
  - lib/apimatic_core.rb
@@ -228,7 +215,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
228
215
  - !ruby/object:Gem::Version
229
216
  version: '0'
230
217
  requirements: []
231
- rubygems_version: 3.4.10
218
+ rubygems_version: 3.4.19
232
219
  signing_key:
233
220
  specification_version: 4
234
221
  summary: A library that contains apimatic-apimatic-core logic and utilities for consuming