json_data_extractor 0.0.12 → 0.0.14
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 +4 -4
- data/README.md +30 -1
- data/lib/json_data_extractor.rb +7 -4
- data/lib/src/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2a35a6bf0ed27b3f5a0ef9a13e96ff21ac28ff873772696aef65069821dbf23e
|
4
|
+
data.tar.gz: 9dba998316601c445cebe5872f04e18c68575196b9ed52e4128f01b47139049a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 204620707292cb9e1f805db3bbc72b44e6dca7f1dc86dceefa8b9b1126f437fa70bc152af38bb502741d620884f141b46664a6a6c80fb135bc20f394b8d62300
|
7
|
+
data.tar.gz: '0482bfd00032c8e07c0a97ce88c6bbfba824bc6ea7eb6ec7aecd329c92982afae2853333f096695d68f52f737a01cca253a9f199616a22e565211b60b9d0f6eb'
|
data/README.md
CHANGED
@@ -120,6 +120,35 @@ The resulting json will be:
|
|
120
120
|
|
121
121
|
```
|
122
122
|
|
123
|
+
|
124
|
+
### Handling Default Values
|
125
|
+
|
126
|
+
With JsonDataExtractor, you can specify default values in your schema for keys that might be absent in the input JSON. Use the `path` and `default` keys in the schema for this purpose.
|
127
|
+
|
128
|
+
```ruby
|
129
|
+
schema = {
|
130
|
+
absent_value: { path: nil },
|
131
|
+
default: { path: '$.some_real_path', default: 'foo' },
|
132
|
+
default_with_lambda: { path: '$.table', default: -> { 'DEFAULT' } },
|
133
|
+
absent_with_default: { path: nil, default: 'bar' }
|
134
|
+
}
|
135
|
+
```
|
136
|
+
|
137
|
+
- `absent_value`: Will be `nil` in the output as there's no corresponding key in the input JSON and no default is provided.
|
138
|
+
- `default`: Will either take the value from `$.some_real_path` in the input JSON or 'foo' if the path does not exist.
|
139
|
+
- `default_with_lambda`: Will take the value from `$..table` in the input JSON or 'DEFAULT' if the path does not exist.
|
140
|
+
- `absent_with_default`: Will be 'bar' in the output as there's no corresponding key in the input JSON but a default is provided.
|
141
|
+
|
142
|
+
#### Simplified Syntax for Absent Values
|
143
|
+
|
144
|
+
For keys that you expect to be absent in the input JSON but still want to include in the output with a `nil` value, you can use a simplified syntax by setting the schema value to `nil`.
|
145
|
+
|
146
|
+
```ruby
|
147
|
+
schema = {
|
148
|
+
absent_value: nil
|
149
|
+
}
|
150
|
+
```
|
151
|
+
|
123
152
|
### Modifiers
|
124
153
|
|
125
154
|
Modifiers can be supplied on object creation and/or added later by calling `#add_modifier` method.
|
@@ -191,7 +220,7 @@ schema = {
|
|
191
220
|
map: FUEL_TYPES
|
192
221
|
}
|
193
222
|
}
|
194
|
-
result =
|
223
|
+
result = JsonDataExtractor.new(data).extract(schema) # => {"fuel":["Petrol","Diesel",nil,"Unknown"]}
|
195
224
|
```
|
196
225
|
|
197
226
|
A map is essentially a dictionary that defines key-value pairs, where the keys represent the source
|
data/lib/json_data_extractor.rb
CHANGED
@@ -20,9 +20,11 @@ class JsonDataExtractor
|
|
20
20
|
def extract(schema)
|
21
21
|
results = {}
|
22
22
|
schema.each do |key, val|
|
23
|
+
default_value = nil
|
23
24
|
if val.is_a?(Hash)
|
24
25
|
val.transform_keys!(&:to_sym)
|
25
26
|
path = val[:path]
|
27
|
+
default_value = val[:default]
|
26
28
|
maps = Array([val[:maps] || val[:map]]).flatten.compact.map do |map|
|
27
29
|
if map.is_a?(Hash)
|
28
30
|
map
|
@@ -48,11 +50,12 @@ class JsonDataExtractor
|
|
48
50
|
maps = []
|
49
51
|
end
|
50
52
|
|
51
|
-
extracted_data = JsonPath.on(@data, path)
|
53
|
+
extracted_data = JsonPath.on(@data, path) if path
|
52
54
|
|
53
|
-
if extracted_data.empty?
|
54
|
-
results[key] = nil
|
55
|
+
if extracted_data.nil? || extracted_data.empty?
|
56
|
+
results[key] = default_value.is_a?(Proc) ? default_value.call : (default_value || nil)
|
55
57
|
else
|
58
|
+
extracted_data.map! { |val| val.nil? ? default_value : val }
|
56
59
|
transformed_data = apply_modifiers(extracted_data, modifiers)
|
57
60
|
results[key] = apply_maps(transformed_data, maps)
|
58
61
|
|
@@ -107,7 +110,7 @@ class JsonDataExtractor
|
|
107
110
|
elsif value.respond_to?(modifier)
|
108
111
|
value.send(modifier)
|
109
112
|
elsif self.class.configuration.strict_modifiers
|
110
|
-
raise ArgumentError, "
|
113
|
+
raise ArgumentError, "Modifier: <:#{modifier}> cannot be applied to value <#{value.inspect}>"
|
111
114
|
else
|
112
115
|
value
|
113
116
|
end
|
data/lib/src/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: json_data_extractor
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.14
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Max Buslaev
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2023-
|
11
|
+
date: 2023-11-07 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|