glob 0.3.0 → 0.3.1

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: 1364c317c2dde1a64f6f201956383cd023185d64349b101e8d167326701cc4fa
4
- data.tar.gz: 76c07526698da02bb9792d29f3bafaa170fe03750f5bd335f7f80efb06114167
3
+ metadata.gz: daa19b4757ede88d7bc2ff99732f6e0a42b33608fbbef748c21c18f73a01538c
4
+ data.tar.gz: c8ee66c99f7ce11218ff7fc4031ad0a53e8fe7afb9eaa0de8b9220be92c88690
5
5
  SHA512:
6
- metadata.gz: 4fcc6b11d949bb8e941794c39b6e83efc39c7fd94be7d51a2314d3b50cd7afe680448759cd28c6abe17f4f8566ba5ff31332c0806a014b1c1f4fa8a490117332
7
- data.tar.gz: 5a15abeb7a6a9845fb00563f4b7ef5a53e0d432ca92f6fc239315ba38bd76fa84e1f68f9128c3aeec94834df1a2a94b50d32b3e929021af004fe1fbaab32d256
6
+ metadata.gz: 56d9f2f4ba26236f4ce29c51a806c6a158c5576222ab2ccc7d801423a6be0ae759ef2b8db21f465d03de2f97aac4b2b7de0a21dcc9d35ceaa74397e720783014
7
+ data.tar.gz: 8ebc481895cc295261e1914b690ccd4b3807419564c833e258a9efccabf8f2ead910e599007e663227821ca7d03ced3dae9dc491608c832f8e0886956dce579a
data/CHANGELOG.md CHANGED
@@ -11,6 +11,14 @@ Prefix your message with one of the following:
11
11
  - [Security] in case of vulnerabilities.
12
12
  -->
13
13
 
14
+ ## v0.3.1 - 2022-09-01
15
+
16
+ - [Fixed] Handle keys with dots properly by using `\\.` as a escape sequence.
17
+
18
+ ## v0.3.0 - 2022-08-01
19
+
20
+ - [Added] Patterns can have groups like in `{a,b}.*`.
21
+
14
22
  ## v0.2.2 - 2022-02-01
15
23
 
16
24
  - [Fixed] Properly handle numeric keys.
data/README.md CHANGED
@@ -72,6 +72,38 @@ glob.to_h
72
72
 
73
73
  Notice that the return result will have symbolized keys.
74
74
 
75
+ If the contains dots, then the result will use `\\.` as the escape sequence.
76
+ Similarly, you need to escape keys with dots when filtering results.
77
+
78
+ ```ruby
79
+ glob = Glob.new(
80
+ formats: {
81
+ ".txt" => "Text",
82
+ ".json" => "JSON",
83
+ ".rb" => "Ruby"
84
+ }
85
+ )
86
+
87
+ glob << "*"
88
+
89
+ glob.paths
90
+ #=> ["formats.\\.json", "formats.\\.rb", "formats.\\.txt"]
91
+
92
+ glob.to_h
93
+ #=> {:formats=>{:".json"=>"JSON", :".rb"=>"Ruby", :".txt"=>"Text"}}
94
+
95
+ # Remove all existing matchers
96
+ glob.matchers.clear
97
+
98
+ glob << "formats.\\.rb"
99
+
100
+ glob.paths
101
+ #=> ["formats.\\.rb"]
102
+
103
+ glob.to_h
104
+ #=> {:formats=>{:".rb"=>"Ruby"}}
105
+ ```
106
+
75
107
  ## Maintainer
76
108
 
77
109
  - [Nando Vieira](https://github.com/fnando)
data/lib/glob/map.rb CHANGED
@@ -13,15 +13,19 @@ module Glob
13
13
 
14
14
  def call
15
15
  @target
16
- .map {|(key, value)| compute(value, key) }
16
+ .map {|(key, value)| compute(value, escape(key)) }
17
17
  .flatten
18
18
  .sort
19
19
  end
20
20
 
21
+ private def escape(key)
22
+ key.to_s.gsub(".", "\\.")
23
+ end
24
+
21
25
  private def compute(value, path)
22
26
  if value.is_a?(Hash)
23
27
  value.map do |key, other_value|
24
- compute(other_value, "#{path}.#{key}")
28
+ compute(other_value, "#{path}.#{escape(key)}")
25
29
  end
26
30
  else
27
31
  path.to_s
data/lib/glob/query.rb CHANGED
@@ -18,7 +18,7 @@ module Glob
18
18
  symbolized_target = SymbolizeKeys.call(@target)
19
19
 
20
20
  paths.each_with_object({}) do |path, buffer|
21
- segments = path.split(".").map(&:to_sym)
21
+ segments = path.split(/(?<!\\)\./).map {|key| unescape(key).to_sym }
22
22
  value = symbolized_target.dig(*segments)
23
23
  set_path_value(segments, buffer, value)
24
24
  end
@@ -41,6 +41,10 @@ module Glob
41
41
  @map ||= Map.call(@target)
42
42
  end
43
43
 
44
+ private def unescape(key)
45
+ key.to_s.gsub(/\\\./, ".")
46
+ end
47
+
44
48
  private def set_path_value(segments, target, value)
45
49
  while (segment = segments.shift)
46
50
  if segments.empty?
data/lib/glob/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Glob
4
- VERSION = "0.3.0"
4
+ VERSION = "0.3.1"
5
5
  end
data/test/glob_test.rb CHANGED
@@ -220,4 +220,24 @@ class GlobTest < Minitest::Test
220
220
 
221
221
  assert_equal expected, glob.paths
222
222
  end
223
+
224
+ test "with keys that contain dots" do
225
+ data = {
226
+ "keys.with.dots" => "dots",
227
+ node: {
228
+ "more.keys.with.dots" => "more dots"
229
+ }
230
+ }
231
+
232
+ glob = Glob.new(data)
233
+
234
+ glob << "*"
235
+
236
+ assert_equal %w[keys\\.with\\.dots node.more\\.keys\\.with\\.dots],
237
+ glob.paths
238
+ assert_equal Glob::SymbolizeKeys.call(data), glob.to_h
239
+
240
+ assert_equal ({node: {"more.keys.with.dots": "more dots"}}),
241
+ Glob.filter(data, ["node.more\\.keys\\.with\\.dots"])
242
+ end
223
243
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: glob
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.0
4
+ version: 0.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nando Vieira
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-08-01 00:00:00.000000000 Z
11
+ date: 2022-09-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: minitest
@@ -152,10 +152,10 @@ metadata:
152
152
  rubygems_mfa_required: 'true'
153
153
  homepage_uri: https://github.com/fnando/glob
154
154
  bug_tracker_uri: https://github.com/fnando/glob/issues
155
- source_code_uri: https://github.com/fnando/glob/tree/v0.3.0
156
- changelog_uri: https://github.com/fnando/glob/tree/v0.3.0/CHANGELOG.md
157
- documentation_uri: https://github.com/fnando/glob/tree/v0.3.0/README.md
158
- license_uri: https://github.com/fnando/glob/tree/v0.3.0/LICENSE.md
155
+ source_code_uri: https://github.com/fnando/glob/tree/v0.3.1
156
+ changelog_uri: https://github.com/fnando/glob/tree/v0.3.1/CHANGELOG.md
157
+ documentation_uri: https://github.com/fnando/glob/tree/v0.3.1/README.md
158
+ license_uri: https://github.com/fnando/glob/tree/v0.3.1/LICENSE.md
159
159
  post_install_message:
160
160
  rdoc_options: []
161
161
  require_paths: