enumpath 0.1.1 → 0.1.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -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