json_data_extractor 0.1.03 → 0.1.04

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: 295cd6c872605a86b0656c236dd11ec26deb323aaea9f6a07478871f52fa5950
4
- data.tar.gz: daad530af7cdb9880d28f92c8f0235c0f095466974fa6ed61d6d46e1113882f2
3
+ metadata.gz: 78d2adf9786c1444ad0307cbc8b5a613be04a8b4ace56c5b1973f619fed58177
4
+ data.tar.gz: 78bdd81ae9c8b6bb68742b64c7d389fa4844fad20b498cd927ca3dd85a03e9a6
5
5
  SHA512:
6
- metadata.gz: a146df922bbe2e84b9ad7a7cffdc64f1f1fe9be243764049a41a5c13ebb7ea31ddd07525e628056b884e5ad53c3ef3780cbe3c5fed6dc46b23f695534b6d4188
7
- data.tar.gz: ef3b8d6ff6589f72e2955c43b95ffea59459b4f7d524fbd7513c7133a540ec27be4257ffaefa08137e13abb131aa0e55a6fdec42df769cca6d44361768815532
6
+ metadata.gz: ac6bc721be1214813aecefc887cfddb7cfb6b55730506dec85fd853d35a01cd403fd1726f93bbabe7af8ed1ad25763df42e8b41ca8794e3a602f87aff040165e
7
+ data.tar.gz: 7c1ba2814904cba8d1041f652d313eb097c2c02e59ccd386abd95cbc64b32414ddfff8e2cf7dfb57c98045b1bb50631490ebde0adaede4b14b4455d1fe9b878e
@@ -1,4 +1,4 @@
1
- lib = File.expand_path('../lib', __FILE__)
1
+ lib = File.expand_path('lib', __dir__)
2
2
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
3
3
  require 'json_data_extractor/version'
4
4
 
@@ -8,30 +8,31 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ['Max Buslaev']
9
9
  spec.email = ['max@buslaev.net']
10
10
 
11
- spec.summary = %q{Transform JSON data structures with the help of a simple schema and JsonPath expressions.
11
+ spec.summary = 'Transform JSON data structures with the help of a simple schema and JsonPath expressions.
12
12
  Use the JsonDataExtractor gem to extract and modify data from complex JSON structures using a straightforward syntax
13
- and a range of built-in or custom modifiers.}
14
- spec.description = %q{json_data_extractor makes it easy to extract data from complex JSON structures,
13
+ and a range of built-in or custom modifiers.'
14
+ spec.description = 'json_data_extractor makes it easy to extract data from complex JSON structures,
15
15
  such as API responses or configuration files, using a schema that defines the path to the data and any necessary
16
- transformations. The schema is defined as a simple Ruby hash that maps keys to paths and optional modifiers.}
16
+ transformations. The schema is defined as a simple Ruby hash that maps keys to paths and optional modifiers.'
17
17
  spec.homepage = 'https://github.com/austerlitz/json_data_extractor'
18
18
  spec.license = 'MIT'
19
19
 
20
20
  # Specify which files should be added to the gem when it is released.
21
21
  # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
22
- spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
22
+ spec.files = Dir.chdir(File.expand_path(__dir__)) do
23
23
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
24
24
  end
25
25
  spec.bindir = 'exe'
26
26
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
27
27
  spec.require_paths = ['lib']
28
28
 
29
+ spec.add_development_dependency 'amazing_print'
29
30
  spec.add_development_dependency 'bundler'
31
+ spec.add_development_dependency 'pry'
30
32
  spec.add_development_dependency 'rake', '~> 10.0'
31
33
  spec.add_development_dependency 'rspec', '~> 3.0'
32
- spec.add_development_dependency 'pry'
33
- spec.add_development_dependency 'amazing_print'
34
34
  spec.add_development_dependency 'rubocop'
35
35
 
36
36
  spec.add_dependency 'jsonpath'
37
+ spec.add_dependency 'oj'
37
38
  end
@@ -8,9 +8,10 @@ module JsonDataExtractor
8
8
  # @param json_data [Hash,String]
9
9
  # @param modifiers [Hash]
10
10
  def initialize(json_data, modifiers = {})
11
- @data = json_data.is_a?(Hash) ? json_data.to_json : json_data
11
+ @data = json_data.is_a?(Hash) ? Oj.dump(json_data, mode: :compat) : json_data
12
12
  @modifiers = modifiers.transform_keys(&:to_sym)
13
13
  @results = {}
14
+ @path_cache = {}
14
15
  end
15
16
 
16
17
  # @param modifier_name [String, Symbol]
@@ -29,7 +30,10 @@ module JsonDataExtractor
29
30
  schema.each do |key, val|
30
31
  element = JsonDataExtractor::SchemaElement.new(val.is_a?(Hash) ? val : { path: val })
31
32
 
32
- extracted_data = JsonPath.on(@data, element.path) if element.path
33
+ path = element.path
34
+ json_path = path ? (@path_cache[path] ||= JsonPath.new(path)) : nil
35
+
36
+ extracted_data = json_path&.on(@data)
33
37
 
34
38
  if extracted_data.nil? || extracted_data.empty?
35
39
  # we either got nothing or the `path` was initially nil
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module JsonDataExtractor
4
- VERSION = '0.1.03'
4
+ VERSION = '0.1.04'
5
5
  end
@@ -1,11 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'jsonpath'
4
+ require 'multi_json'
5
+ require 'oj'
4
6
  require_relative 'json_data_extractor/version'
5
7
  require_relative 'json_data_extractor/configuration'
6
8
  require_relative 'json_data_extractor/extractor'
7
9
  require_relative 'json_data_extractor/schema_element'
8
10
 
11
+ # Set MultiJson to use Oj for performance
12
+ MultiJson.use(:oj)
13
+ Oj.default_options = { mode: :compat }
14
+
9
15
  # Transform JSON data structures with the help of a simple schema and JsonPath expressions.
10
16
  # Use the JsonDataExtractor gem to extract and modify data from complex JSON structures using a straightforward syntax
11
17
  # and a range of built-in or custom modifiers.
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: json_data_extractor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.03
4
+ version: 0.1.04
5
5
  platform: ruby
6
6
  authors:
7
7
  - Max Buslaev
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-12-11 00:00:00.000000000 Z
11
+ date: 2025-04-10 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: amazing_print
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: bundler
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -25,49 +39,49 @@ dependencies:
25
39
  - !ruby/object:Gem::Version
26
40
  version: '0'
27
41
  - !ruby/object:Gem::Dependency
28
- name: rake
42
+ name: pry
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
- - - "~>"
45
+ - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: '10.0'
47
+ version: '0'
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
- - - "~>"
52
+ - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '10.0'
54
+ version: '0'
41
55
  - !ruby/object:Gem::Dependency
42
- name: rspec
56
+ name: rake
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '3.0'
61
+ version: '10.0'
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '3.0'
68
+ version: '10.0'
55
69
  - !ruby/object:Gem::Dependency
56
- name: pry
70
+ name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
- - - ">="
73
+ - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '0'
75
+ version: '3.0'
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ">="
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '0'
82
+ version: '3.0'
69
83
  - !ruby/object:Gem::Dependency
70
- name: amazing_print
84
+ name: rubocop
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -81,13 +95,13 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: rubocop
98
+ name: jsonpath
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - ">="
88
102
  - !ruby/object:Gem::Version
89
103
  version: '0'
90
- type: :development
104
+ type: :runtime
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
@@ -95,7 +109,7 @@ dependencies:
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
111
  - !ruby/object:Gem::Dependency
98
- name: jsonpath
112
+ name: oj
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - ">="