enumpath 0.1.1 → 0.1.2

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.
@@ -32,7 +32,7 @@ module Enumpath
32
32
  # @yieldparam remaining_path [Array] the union member plus remaining_path
33
33
  # @yieldparam enum [Enumerable] enum
34
34
  # @yieldparam resolved_path [Array] resolved_path
35
- def apply(remaining_path, enum, resolved_path, &block)
35
+ def apply(remaining_path, enum, resolved_path)
36
36
  parts = operator.split(SPLIT_REGEX).map { |part| part.strip.gsub(/^['"]|['"]$/, '') }
37
37
  Enumpath.log('Applying union parts') { { parts: parts } }
38
38
  parts.each { |part| yield([part] + remaining_path, enum, resolved_path) }
@@ -23,7 +23,7 @@ module Enumpath
23
23
  # @yieldparam remaining_path [Array] the key of the given member plus remaining_path
24
24
  # @yieldparam enum [Enumerable] enum
25
25
  # @yieldparam resolved_path [Array] resolved_path
26
- def apply(remaining_path, enum, resolved_path, &block)
26
+ def apply(remaining_path, enum, resolved_path)
27
27
  keys = keys(enum)
28
28
  Enumpath.log('Applying wildcard to keys') { { keys: keys } }
29
29
  keys.each { |key| yield([key.to_s] + remaining_path, enum, resolved_path) }
data/lib/enumpath/path.rb CHANGED
@@ -46,13 +46,8 @@ module Enumpath
46
46
  def trace(path_segments, enum, resolved_path = [], nesting_level = 0)
47
47
  Enumpath.logger.level = nesting_level
48
48
  if path_segments.any?
49
- Enumpath.log("Applying") { { operator: path_segments, to: enum } }
50
- segment = path_segments.first
51
- remaining_path = path_segments[1..-1]
52
- operator = Enumpath::Operator.detect(segment, enum)
53
- operator&.apply(remaining_path, enum, resolved_path) do |s, e, c|
54
- trace(s, e, c, nesting_level + 1)
55
- end
49
+ Enumpath.log('Applying') { { operator: path_segments, to: enum } }
50
+ apply_segments(path_segments, enum, resolved_path, nesting_level)
56
51
  else
57
52
  Enumpath.log('Storing') { { resolved_path: resolved_path, enum: enum } }
58
53
  results.store(resolved_path, enum)
@@ -60,7 +55,14 @@ module Enumpath
60
55
  Enumpath.logger.level = nesting_level
61
56
  end
62
57
 
63
- private
58
+ def apply_segments(path_segments, enum, resolved_path, nesting_level)
59
+ segment = path_segments.first
60
+ remaining_path = path_segments[1..-1]
61
+ operator = Enumpath::Operator.detect(segment, enum)
62
+ operator&.apply(remaining_path, enum, resolved_path) do |s, e, c|
63
+ trace(s, e, c, nesting_level + 1)
64
+ end
65
+ end
64
66
 
65
67
  def cache
66
68
  @cache ||= Enumpath.path_cache
@@ -16,34 +16,43 @@ module Enumpath
16
16
 
17
17
  def normalize(path)
18
18
  return path if path.is_a?(Array)
19
+
19
20
  normalized_path = path.dup
20
- normalized_path, filter_expressions = remove_filter_expressions(normalized_path)
21
- normalized_path.gsub!(/'?\.'?|\['?/, ';') # Replace "'?.'?" or "['?" with ";"
22
- normalized_path.gsub!(/;;;|;;/, ';..;') # Replace ";;;" or ";;" with ";..;"
23
- normalized_path.gsub!(/;\z|'?\]|'\z/, '') # Replace ";$" or "'?]" or "'$" with ""
24
- normalized_path = restore_filter_expressions(normalized_path, filter_expressions)
25
- normalized_path.gsub!(/\A\$(;|\z)/, '') # Remove root operator
21
+ filter_expressions = remove_filter_expressions!(normalized_path)
22
+ replace_tokens!(normalized_path)
23
+ restore_filter_expressions!(normalized_path, filter_expressions)
24
+ remove_root!(normalized_path)
26
25
  normalized_path = normalized_path.split(';') # Split into segment parts
27
- normalized_path.reject! do |segment| # Get rid of any blank segments
28
- segment.nil? || segment.size == 0
29
- end
26
+ normalized_path.reject! { |segment| segment.nil? || segment.size.zero? } # Remove blanks
30
27
  Enumpath.log('Path normalized') { { original: path, normalized: normalized_path } }
31
28
  normalized_path
32
29
  end
33
30
 
34
31
  # Move filter expressions (`[?(expr)]`) to the temporary array and replace with an index notation
35
- def remove_filter_expressions(path)
32
+ def remove_filter_expressions!(path)
36
33
  filter_expressions = []
37
- stripped_path = path.gsub(FILTER_EXPRESSION_REGEX) do
38
- filter_expressions << $1
34
+ path.gsub!(FILTER_EXPRESSION_REGEX) do
35
+ filter_expressions << Regexp.last_match(1)
39
36
  "[##{filter_expressions.size - 1}]"
40
37
  end
41
- [stripped_path, filter_expressions]
38
+ filter_expressions
39
+ end
40
+
41
+ def replace_tokens!(path)
42
+ path.gsub!(/'?\.'?|\['?/, ';') # Replace "'?.'?" or "['?" with ";"
43
+ path.gsub!(/;;;|;;/, ';..;') # Replace ";;;" or ";;" with ";..;"
44
+ path.gsub!(/;\z|'?\]|'\z/, '') # Replace ";$" or "'?]" or "'$" with ""
42
45
  end
43
46
 
44
47
  # Replace index notations with their corresponding filter expressions (`?(expr)`) from the temporary array
45
- def restore_filter_expressions(path_expression, filter_expressions)
46
- path_expression.gsub(INDEX_NOTATION_REGEX) { filter_expressions[$1.to_i] }
48
+ def restore_filter_expressions!(path, filter_expressions)
49
+ path.gsub!(INDEX_NOTATION_REGEX) do
50
+ filter_expressions[Regexp.last_match(1).to_i]
51
+ end
52
+ end
53
+
54
+ def remove_root!(path)
55
+ path.gsub!(/\A\$(;|\z)/, '') # Remove root operator
47
56
  end
48
57
  end
49
58
  end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Enumpath
4
- VERSION = "0.1.1"
4
+ VERSION = '0.1.2'
5
5
  end
metadata CHANGED
@@ -1,57 +1,57 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: enumpath
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
4
+ version: 0.1.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Bloom
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-07 00:00:00.000000000 Z
11
+ date: 2021-04-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: to_regexp
14
+ name: mini_cache
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 0.2.1
19
+ version: 1.1.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 0.2.1
26
+ version: 1.1.0
27
27
  - !ruby/object:Gem::Dependency
28
- name: mini_cache
28
+ name: to_regexp
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.1.0
33
+ version: 0.2.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.1.0
40
+ version: 0.2.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.16'
47
+ version: '2.1'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '1.16'
54
+ version: '2.1'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: null-logger
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,6 +94,20 @@ dependencies:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
96
  version: '12.3'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - "~>"
102
+ - !ruby/object:Gem::Version
103
+ version: '3.8'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - "~>"
109
+ - !ruby/object:Gem::Version
110
+ version: '3.8'
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: rspec-benchmark
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -109,19 +123,33 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: 0.3.0
111
125
  - !ruby/object:Gem::Dependency
112
- name: rspec
126
+ name: rspec_junit_formatter
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: '3.8'
131
+ version: '0.4'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: '3.8'
138
+ version: '0.4'
139
+ - !ruby/object:Gem::Dependency
140
+ name: yard
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: 0.9.26
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: 0.9.26
125
153
  description: |
126
154
  Enumpath is an implementation of the JSONPath spec for Ruby objects,
127
155
  plus some added sugar. It's like Ruby's native Enumerable#dig method,
@@ -131,15 +159,19 @@ description: |
131
159
  (Extract, Transform, Load) processes by allowing you to define paths
132
160
  through your data in a simple, easily readable, easily storable syntax.
133
161
  email:
134
- - open-source@youearnedit.com
135
162
  - chrisbloom7@gmail.com
136
163
  executables: []
137
164
  extensions: []
138
165
  extra_rdoc_files: []
139
166
  files:
167
+ - ".github/ISSUE_TEMPLATE/bug_report.md"
168
+ - ".github/ISSUE_TEMPLATE/feature_request.md"
169
+ - ".github/workflows/greetings.yml"
170
+ - ".github/workflows/rubocop-analysis.yml"
171
+ - ".github/workflows/ruby.yml"
140
172
  - ".gitignore"
141
173
  - ".rspec"
142
- - ".travis.yml"
174
+ - ".rubocop.yml"
143
175
  - ".yardopts"
144
176
  - CONTRIBUTING.md
145
177
  - Gemfile
@@ -167,11 +199,11 @@ files:
167
199
  - lib/enumpath/resolver/simple.rb
168
200
  - lib/enumpath/results.rb
169
201
  - lib/enumpath/version.rb
170
- homepage: https://github.com/youearnedit/enumpath
202
+ homepage: https://github.com/chrisbloom7/enumpath
171
203
  licenses:
172
204
  - Apache-2.0
173
205
  metadata: {}
174
- post_install_message:
206
+ post_install_message:
175
207
  rdoc_options: []
176
208
  require_paths:
177
209
  - lib
@@ -186,9 +218,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
186
218
  - !ruby/object:Gem::Version
187
219
  version: '0'
188
220
  requirements: []
189
- rubyforge_project:
190
- rubygems_version: 2.7.7
191
- signing_key:
221
+ rubygems_version: 3.0.3
222
+ signing_key:
192
223
  specification_version: 4
193
224
  summary: A JSONPath-compatible library for navigating nested Ruby objects using path
194
225
  expressions
data/.travis.yml DELETED
@@ -1,5 +0,0 @@
1
- sudo: false
2
- language: ruby
3
- rvm:
4
- - 2.5.1
5
- before_install: gem install bundler -v 1.16.1