key_tree 0.5.2 → 0.8.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ee519ff161881da7c9d53d57fe1e762a9e89df557e5f5bb4d3df58e5de1731dd
4
- data.tar.gz: 84b2e06bf6c70acfed4f466a72da5222b9fba028cf551fa7d82a3bbce90351a0
3
+ metadata.gz: efcddf672d03cea0d0be86a2bf3dd9fdd64b072410a941622172dda485e41455
4
+ data.tar.gz: 361648de4ff9c43340b149716bc8beb1ff46960ee48e5dc0b00717c60b017c53
5
5
  SHA512:
6
- metadata.gz: 4d644e3a3d63f34f6edbc0fbc17a2c8f26499d2fe508e186274698b2ff733100f97e5efe62ce2bb4e7c1b35f07282fe5994447e1f7171c57f0cd8408798bbbf8
7
- data.tar.gz: 6dd6f1e13e04bd7a8cbe8cce7d9b36a9ff76ac05c3ffc3fffa5bd12a38fc620f115ff94c37e913b6683aa2980d3c4ddd871b16cebfa622d71a3413fa6a2adf1d
6
+ metadata.gz: 28cda54bf66db156d0c723613f94b94a6535947821dbfc896f00a5f2c8861f8680bc5a23fb6198b97c804ddf8ee0d25654b73e45b174c7319059187fc1394b0e
7
+ data.tar.gz: d0cb7b5c81e267909a7d861d8f1961e0e94e13a839e16aad13f736626d8be6953db87804d2d99ca7af5395a048d164ef0fd8e981cbf891d05af2c2b964186acb
@@ -0,0 +1,37 @@
1
+ %YAML 1.1
2
+ ---
3
+ # This workflow uses actions that are not certified by GitHub.
4
+ # They are provided by a third-party and are governed by
5
+ # separate terms of service, privacy policy, and support
6
+ # documentation.
7
+ # This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
8
+ # For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
9
+
10
+ name: Ruby
11
+
12
+ on:
13
+ push:
14
+ pull_request:
15
+ branches: [ main ]
16
+
17
+ jobs:
18
+ test:
19
+
20
+ runs-on: ubuntu-latest
21
+ strategy:
22
+ matrix:
23
+ ruby-version: ['2.6', '2.7', '3.0']
24
+
25
+ steps:
26
+ - uses: actions/checkout@v2
27
+ - name: Set up Ruby
28
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
29
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
30
+ # uses: ruby/setup-ruby@v1
31
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
32
+ with:
33
+ ruby-version: ${{ matrix.ruby-version }}
34
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
35
+ - name: Run tests
36
+ run: bundle exec rake
37
+ ...
data/.gitignore CHANGED
@@ -11,3 +11,4 @@
11
11
  .rspec_status
12
12
  /vendor
13
13
  Gemfile.lock
14
+ coverage
data/.rubocop.yml CHANGED
@@ -1,3 +1,9 @@
1
+ %YAML 1.1
2
+ ---
3
+ AllCops:
4
+ TargetRubyVersion: 2.6
5
+ NewCops: enable
6
+
1
7
  Metrics/BlockLength:
2
8
  Exclude:
3
9
  - 'spec/*_spec.rb'
@@ -6,7 +12,12 @@ Style/BlockDelimiters:
6
12
  Exclude:
7
13
  - 'spec/*_spec.rb'
8
14
 
9
- # Rubocop 0.56 causes false positives
10
- # https://github.com/bbatsov/rubocop/issues/5887
11
- Lint/SplatKeywordArguments:
12
- Enabled: false
15
+ Style/HashEachMethods:
16
+ Enabled: true
17
+
18
+ Style/HashTransformKeys:
19
+ Enabled: true
20
+
21
+ Style/HashTransformValues:
22
+ Enabled: true
23
+ ...
data/CHANGELOG.md ADDED
@@ -0,0 +1,222 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ Older releases uses an ad-hoc release notes format, and follow at the end.
8
+
9
+
10
+ ## [Unreleased]
11
+
12
+
13
+ ## [0.8.0]
14
+
15
+ This release bumps minimum Ruby version to 2.6, and adds support for Ruby version 3.
16
+
17
+ ### Added
18
+
19
+ - Supports Ruby version 3.
20
+
21
+ ### Changed
22
+
23
+ - Updated dependencies.
24
+
25
+
26
+ ## [0.7.0] - 2019-07-16
27
+
28
+ ### Changed
29
+
30
+ - Removed leftover private methods from `KeyTree::Forest`, `#tree_with_key`
31
+ and `#trees_with_key`
32
+ - Removed `KeyTree::Tree#fetch_default` method and simplified `#[]`
33
+
34
+
35
+ [Unreleased]: https://github.com/notCalle/PROJECT/compare/v0.8.0..HEAD
36
+ [0.8.0]: https://github.com/notCalle/PROJECT/compare/v0.7.0..v0.8.0
37
+ [0.7.0]: https://github.com/notCalle/PROJECT/compare/v0.6.1..v0.7.0
38
+ [0.6.1]: https://github.com/notCalle/PROJECT/releases/tag/v0.6.1
39
+
40
+
41
+ # Release Notes
42
+
43
+ ## v0.6.1 – 2018-05-31
44
+
45
+ ### New methods
46
+
47
+ * `KeyTree::Tree#fetch_default(key, default) { block }`
48
+
49
+ * Using `KeyTree::Refine::DeepHash`
50
+ * `Hash#deep_key_pathify`
51
+
52
+ ### Bug fixes
53
+
54
+ Default processing for forests was broken.
55
+
56
+ * 7ff646ff Fix Forest#fetch default vs KeyError processing
57
+ * 62f6fd73 Add default aware fetch method
58
+ * 00f0b163 Manage deep_fetch KeyError generation on our own
59
+
60
+ #### Handle incoming key pathish keys
61
+
62
+ When a `Hash` had keys that looked like key paths, they were not correctly
63
+ converted to nested hashes with symbol keys.
64
+
65
+ * c23df1dd Change key transform for incoming hashes
66
+ * 09b526c8 Add new hash refinement for key_path-ification
67
+
68
+ ## v0.6.0 – 2018-05-30
69
+
70
+ ### Major changes
71
+
72
+ * Updated to Ruby ~> 2.3
73
+ * Added refinements module for `to_key_*` conversions in core classes
74
+ * `KeyTree::Tree` rewritten from scratch, to use a refinements
75
+ to an internal `Hash` structure instead of subclassing `Hash`
76
+
77
+ ### New methods
78
+
79
+ * `KeyTree::Forest#key_paths`
80
+ * `KeyTree::Forest#to_key_forest`
81
+ * `KeyTree::Forest#to_key_wood`
82
+ * `KeyTree::Path#===`
83
+ * `KeyTree::Path#to_key_path`
84
+ * `KeyTree::Tree#delete(key_path)`
85
+ * `KeyTree::Tree#delete!(key_path)`
86
+ * `KeyTree::Tree#store(key_path, new_value)`
87
+ * `KeyTree::Tree#store!(key_path, new_value)`
88
+ * `KeyTree::Tree#to_key_tree`
89
+ * `KeyTree::Tree#to_key_wood`
90
+
91
+ * Using `KeyTree::Refinements`
92
+ * `Array#to_key_forest`
93
+ * `Array#to_key_path`
94
+ * `Array#to_key_wood`
95
+ * `Hash#to_key_tree`
96
+ * `Hash#to_key_wood`
97
+ * `String#to_key_path`
98
+ * `Symbol#to_key_path`
99
+
100
+ * Using `KeyTree::Refine::DeepHash`
101
+ * `Hash#deep`
102
+ * `Hash#deep_delete(key_path)`
103
+ * `Hash#deep_fetch(key_path, default, &default_proc)`
104
+ * `Hash#deep_merge(other)`
105
+ * `Hash#deep_merge!(other)`
106
+ * `Hash#deep_store(key_path, new_value)`
107
+ * `Hash#deep_transform_keys(&block)`
108
+ * `Hash#deep_transform_keys!(&block)`
109
+
110
+ ### Removed methods
111
+
112
+ * `KeyTree::Tree` no longer inherits `Hash`, but most of the
113
+ inherited methods didn't work properly anyway
114
+
115
+ ## v0.5.3 – 2018-05-25
116
+
117
+ ### Bug fixes
118
+
119
+ #### Fix forest default values
120
+ Previous release broke default value propagation for forests.
121
+
122
+ * c0eccde4 Update forest specs vs default values
123
+ * 35367fd1 Consider Tree default values for Forest#[]
124
+ * 7e10dda5 Add method to find trees with default values
125
+ * 57a320ac Revert "Use proper method to retreive values from trees"
126
+ * 8173775d Make tree_with_key methods private
127
+
128
+ ## v0.5.2 – 2018-05-19
129
+
130
+ ### Bug fixes
131
+
132
+ #### Conform to Hash#fetch API
133
+ `Tree#fetch` confused its block argument with `#default_proc`, but they
134
+ have different arguments, so that didn't work out well.
135
+
136
+ * 0bd0a6e8 Use proper method to retreive values from trees
137
+ * 14128a6a Conform to Hash#fetch API
138
+
139
+ ## v0.5.1 – 2018-05-19
140
+
141
+ ### New methods
142
+
143
+ * `KeyTree::Tree#default_key?(key)`
144
+ * `KeyTree::Tree#format(fmtstr)`
145
+ * `KeyTree::Tree#to_h(string_keys: false)`
146
+ * `KeyTree::Tree#to_json`
147
+ * `KeyTree::Tree#to_yaml`
148
+
149
+ ### Bug fixes
150
+
151
+ #### Make forests aware of default values in trees
152
+
153
+ Ensure that forests pick up default values from a tree.
154
+
155
+ * ebd1cb06 Return trees and forests untouched
156
+ * 3451a430 Propagate default_proc in fetch
157
+ * e121a4c4 Consider trees to have a key if #default_key?
158
+ * 50bc56ec Detect if a default_proc yields a key value
159
+
160
+ ### New features
161
+
162
+ #### Key tree content exporters
163
+
164
+ Support for exporting the contents of a key tree to Hash, JSON, and YAML.
165
+ Also includes a convenience string formatter, that fills format strings
166
+ with values from a `Tree`.
167
+
168
+ * 9b5f05f0 Make exported hash key format selectable
169
+ * e3434d7e Add custom format method
170
+ * fa6a9b16 Serialize the contents of a tree to json or yaml
171
+ * 3fc6466b Convert a tree back into nested hashes
172
+ * e5aecd8b Split symbols into key paths
173
+
174
+ ## v0.5.0 – 2018-04-17
175
+
176
+ ### Changed methods
177
+
178
+ * `KeyTree.load(type, serialization, prefix: nil)`
179
+ * `KeyTree::Forest#[key] { |key, original, incoming| }`
180
+ * `KeyTree::Forest#fetch(key) { |key, original, incoming| }`
181
+ * `KeyTree::Forest#flatten { |key, original, incoming| }`
182
+ * `KeyTree::Tree#merge { |key, original, incoming| }`
183
+ * `KeyTree::Tree#merge! { |key, original, incoming| }`
184
+
185
+ ### New methods
186
+
187
+ * `KeyTree::Loader.fallback(loader)`
188
+
189
+ ### New features
190
+
191
+ #### Merge value selection
192
+ Improve merge related methods in `KeyTree::Tree`, and `KeyTree::Forest`
193
+ to take a `Hash#merge` style block argument, to allow control of the result when a key i present on both sides of a merge operation.
194
+
195
+ * 083b25c Add merge value selector to Forest#[]
196
+ * e813e55 Add merge value selection to Forest#fetch
197
+ * 581bc82 Add method to get list of trees with key
198
+ * 0f66f03 Pass merge value selector via Forest#flatten
199
+ * df9b80e Pass any merge selection block to super
200
+
201
+ #### Key prefix for file loading
202
+ When a key file has a name like `prefix@name.ext`, the `prefix` part will be prepended to all keys loaded from the file.
203
+
204
+ * fbe333a Changed call syntax for KeyTree.load
205
+ * 595902c Load keytree with prefix from files with @ in name
206
+ * d23a7e1 Allow prepending a prefix when loading keys
207
+
208
+ #### Fallback for KeyTree loaders
209
+ Allow a fallback class for handling loading of file types where no loader is specified, e.g. to ignore all files with unrecognized extension for `KeyTree.load_all`.
210
+
211
+ * a9d096c Add tree loader fallback
212
+
213
+ ### Bug fixes
214
+
215
+ #### Proper breadth first flattening
216
+
217
+ * ff327f2 Use tree enumarator for Forest#key? and #prefix?
218
+ * 74fa15d Rewrite Forest#[]
219
+ * 177de08 Use tree enumerator in Forest#[]
220
+ * d161fe1 Use tree enumerator in Forest#flatten
221
+ * b0c94df Add breadth-first enumerator for trees
222
+ * 3468f28 Remove forest vs tree sorting nonsense
data/Gemfile CHANGED
@@ -1,12 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
6
 
5
- begin
6
- require 'git-version-bump'
7
- rescue LoadError
8
- gem 'git-version-bump', '~> 0.15'
9
- else
10
- # Specify your gem's dependencies in key_tree.gemspec
11
- gemspec
12
- end
7
+ # Specify your gem's dependencies in key_tree.gemspec
8
+ gemspec
data/README.md CHANGED
@@ -1,10 +1,15 @@
1
- [![Gem Version](https://badge.fury.io/rb/key_tree.svg)](https://badge.fury.io/rb/key_tree) [![Maintainability](https://api.codeclimate.com/v1/badges/ac48756e80007e0cd6f9/maintainability)](https://codeclimate.com/github/notCalle/ruby-keytree/maintainability)
1
+ [![Gem Version](https://badge.fury.io/rb/key_tree.svg)](https://badge.fury.io/rb/key_tree)
2
+ [![Maintainability](https://api.codeclimate.com/v1/badges/ac48756e80007e0cd6f9/maintainability)](https://codeclimate.com/github/notCalle/ruby-keytree/maintainability)
3
+ [![codecov](https://codecov.io/gh/notCalle/ruby-keytree/branch/master/graph/badge.svg)](https://codecov.io/gh/notCalle/ruby-keytree)
4
+ [![Ruby](https://github.com/notCalle/ruby-keytree/actions/workflows/ruby.yml/badge.svg)](https://github.com/notCalle/ruby-keytree/actions/workflows/ruby.yml)
2
5
 
3
6
  # KeyTree
4
7
 
5
8
  KeyTree manages trees of hashes, and (possibly nested) forests of such trees,
6
9
  allowing access to values by key path.
7
10
 
11
+ See the [changelog](CHANGELOG.md) for recent changes.
12
+
8
13
  ## Installation
9
14
 
10
15
  Add this line to your application's Gemfile:
data/Rakefile CHANGED
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'bundler/setup'
2
4
  require 'bundler/gem_tasks'
3
5
 
data/bin/console CHANGED
@@ -1,4 +1,5 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
4
  require 'bundler/setup'
4
5
  require 'key_tree'
@@ -7,8 +8,8 @@ require 'key_tree'
7
8
  # with your gem easier. You can also use a different console, if you like.
8
9
 
9
10
  # (If you use this, don't forget to add pry to your Gemfile!)
10
- # require "pry"
11
- # Pry.start
11
+ require 'pry'
12
+ Pry.start
12
13
 
13
- require 'irb'
14
- IRB.start(__FILE__)
14
+ # require 'irb'
15
+ # IRB.start(__FILE__)
data/bin/setup CHANGED
@@ -4,6 +4,5 @@ IFS=$'\n\t'
4
4
  set -vx
5
5
 
6
6
  bundle install
7
- bundle update
8
7
 
9
8
  # Do any other automated setup that you need to do here
data/key_tree.gemspec CHANGED
@@ -1,17 +1,30 @@
1
+ # frozen_string_literal: true
1
2
 
2
3
  lib = File.expand_path('lib', __dir__)
3
4
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+
4
6
  require 'key_tree/version'
5
7
 
8
+ dev_deps = {
9
+ 'bundler' => '~> 2.2',
10
+ 'codecov' => '~> 0.5.0',
11
+ 'pry' => '~> 0.14.0',
12
+ 'rake' => '~> 13.0',
13
+ 'rspec' => '~> 3.10',
14
+ 'rubocop' => '~> 1.15',
15
+ 'rubocop-rake' => '~> 0.5.1',
16
+ 'rubocop-rspec' => '~> 2.3',
17
+ 'ruby-prof' => '>= 1.4',
18
+ 'simplecov' => '~> 0.21.0'
19
+ }
20
+
6
21
  Gem::Specification.new do |spec|
7
22
  spec.name = 'key_tree'
8
23
  spec.version = KeyTree::VERSION
9
- spec.date = KeyTree::DATE
10
24
  spec.authors = ['Calle Englund']
11
25
  spec.email = ['calle@discord.bofh.se']
12
26
 
13
27
  spec.summary = 'Manage trees of keys'
14
- spec.description = spec.summary
15
28
  spec.homepage = 'https://github.com/notcalle/ruby-keytree'
16
29
  spec.license = 'MIT'
17
30
 
@@ -22,10 +35,10 @@ Gem::Specification.new do |spec|
22
35
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
23
36
  spec.require_paths = ['lib']
24
37
 
25
- spec.add_dependency 'git-version-bump', '~> 0.15'
38
+ spec.platform = Gem::Platform::RUBY
39
+ spec.required_ruby_version = '>= 2.6', '< 4.0'
40
+
41
+ spec.add_dependency 'git-version-bump', '~> 0.17.0'
26
42
 
27
- spec.add_development_dependency 'bundler', '~> 1.16'
28
- spec.add_development_dependency 'rake', '~> 10.0'
29
- spec.add_development_dependency 'rspec', '~> 3.0'
30
- spec.add_development_dependency 'rubocop', '~> 0.52'
43
+ dev_deps.each { |d| spec.add_development_dependency(*d) }
31
44
  end
data/lib/key_tree.rb CHANGED
@@ -1,7 +1,9 @@
1
- require 'key_tree/version'
2
- require 'key_tree/tree'
1
+ # frozen_string_literal: true
2
+
3
3
  require 'key_tree/forest'
4
4
  require 'key_tree/loader'
5
+ require 'key_tree/refinements'
6
+ require 'key_tree/tree'
5
7
 
6
8
  # Manage a tree of keys
7
9
  #
@@ -13,86 +15,84 @@ require 'key_tree/loader'
13
15
  # -> 2
14
16
  #
15
17
  module KeyTree
16
- def self.[](contents = {})
17
- case contents
18
- when Tree, Forest
19
- contents
20
- when Hash
21
- Tree[contents]
22
- when Array
23
- Forest[*contents]
24
- else
25
- raise ArgumentError, "can't load #{contents.class} into a KeyTree"
18
+ using Refinements
19
+
20
+ class << self
21
+ def [](contents = {})
22
+ contents.to_key_wood
26
23
  end
27
- end
28
24
 
29
- # Load a KeyTree from some external serialization
30
- #
31
- # load +type+: +serialization+
32
- # load +key_prefix+, +type+: +serialization+
33
- #
34
- # +type+ is upcased to form a class name that should provide a
35
- # +.load+ class method (like YAML or JSON does).
36
- #
37
- # If a +key_prefix+ is given, it will be prepended to the loaded data.
38
- #
39
- # Examples:
40
- # load(:yaml, "---\na: 1\n")
41
- # => {"a" => 1}
42
- #
43
- # load(:yaml, "---\nb: 2\n", prefix: 'a')
44
- # => {"a.b" => 2}
45
- #
46
- def self.load(type, serialization, prefix: nil)
47
- type = type.to_sym unless type.nil?
48
- loader = Loader[type]
49
- contents = loader.load(serialization)
50
- contents = { prefix => contents } unless prefix.nil?
25
+ # Load a KeyTree from some external serialization
26
+ #
27
+ # load +type+: +serialization+
28
+ # load +key_prefix+, +type+: +serialization+
29
+ #
30
+ # +type+ is upcased to form a class name that should provide a
31
+ # +.load+ class method (like YAML or JSON does).
32
+ #
33
+ # If a +key_prefix+ is given, it will be prepended to the loaded data.
34
+ #
35
+ # Examples:
36
+ # load(:yaml, "---\na: 1\n")
37
+ # => {"a" => 1}
38
+ #
39
+ # load(:yaml, "---\nb: 2\n", prefix: 'a')
40
+ # => {"a.b" => 2}
41
+ #
42
+ def load(type, serialization, prefix: nil)
43
+ type = type.to_sym unless type.nil?
44
+ loader = Loader[type]
45
+ contents = loader.load(serialization)
46
+ contents = { prefix => contents } unless prefix.nil?
51
47
 
52
- self[contents].with_meta_data do |meta_data|
53
- meta_data << { load: { type: type, loader: loader } }
54
- meta_data << { load: { prefix: prefix } } unless prefix.nil?
48
+ contents.to_key_wood.with_meta_data do |meta_data|
49
+ meta_data << { load: { type: type, loader: loader } }
50
+ meta_data << { load: { prefix: prefix } } unless prefix.nil?
51
+ end
55
52
  end
56
- end
57
53
 
58
- # Open an external file and load contents into a KeyTree
59
- # When the file basename begins with 'prefix@', the prefix
60
- # is prepended to all keys in the filee.
61
- def self.open(file_name)
62
- type = File.extname(file_name)[/[^.]+/]
63
- prefix = File.basename(file_name)[/(.+)@/, 1]
54
+ # Open an external file and load contents into a KeyTree
55
+ # When the file basename begins with 'prefix@', the prefix
56
+ # is prepended to all keys in the filee.
57
+ def open(file_name)
58
+ type = File.extname(file_name)[/[^.]+/]
59
+ prefix = File.basename(file_name)[/(.+)@/, 1]
64
60
 
65
- keytree = File.open(file_name, mode: 'rb:utf-8') do |file|
66
- load_from_file(file, type, prefix)
61
+ keytree = File.open(file_name, mode: 'rb:utf-8') do |file|
62
+ load_from_file(file, type, prefix)
63
+ end
64
+
65
+ return keytree unless block_given?
66
+
67
+ yield keytree
67
68
  end
68
69
 
69
- return keytree unless block_given?
70
- yield(keytree)
71
- end
70
+ # Open all files in a directory and load their contents into
71
+ # a Forest of Trees, optionally following symlinks, and recursing.
72
+ def open_all(dir_name, follow_links: false, recurse: false)
73
+ Dir.children(dir_name).reduce(KeyTree::Forest.new) do |result, file|
74
+ path = File.join(dir_name, file)
75
+ next result if File.symlink?(path) && !follow_links
72
76
 
73
- # Open all files in a directory and load their contents into
74
- # a Forest of Trees, optionally following symlinks, and recursing.
75
- def self.open_all(dir_name, follow_links: false, recurse: false)
76
- Dir.children(dir_name).reduce(KeyTree::Forest.new) do |result, file|
77
- path = File.join(dir_name, file)
78
- next result if File.symlink?(path) && !follow_links
79
- stat = File.stat(path)
80
- # rubocop:disable Security/Open
81
- next result << open(path) if stat.file?
82
- # rubocop:enable Security/Open
83
- next result unless recurse && stat.directory?
84
- result << open_all(path, follow_links: follow_links, recurse: true)
77
+ stat = File.stat(path)
78
+ # rubocop:disable Security/Open
79
+ next result << open(path) if stat.file?
80
+ # rubocop:enable Security/Open
81
+ next result unless recurse && stat.directory?
82
+
83
+ result << open_all(path, follow_links: follow_links, recurse: true)
84
+ end
85
85
  end
86
- end
87
86
 
88
- private_class_method
87
+ private
89
88
 
90
- def self.load_from_file(file, type, prefix)
91
- load(type, file.read, prefix: prefix).with_meta_data do |meta_data|
92
- file_path = file.path
93
- meta_data << { file: { path: file_path,
94
- name: File.basename(file_path),
95
- dir: File.dirname(file_path) } }
89
+ def load_from_file(file, type, prefix)
90
+ load(type, file.read, prefix: prefix).with_meta_data do |meta_data|
91
+ file_path = file.path
92
+ meta_data << { file: { path: file_path,
93
+ name: File.basename(file_path),
94
+ dir: File.dirname(file_path) } }
95
+ end
96
96
  end
97
97
  end
98
98
  end