deep_nest 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 588a15e28dc8a68fb2b1a1510bc2a70f74974d193dcc62958dda711b60adffbd
4
+ data.tar.gz: ca41c512276eac8a9febb577c90800baa52d728b76848647422ce62c45c3ccc4
5
+ SHA512:
6
+ metadata.gz: 79dc95591b1d300ce02bee14bb391c6f6a7f59bf8afdeda256644933a6f3324d3736ecf9e0bc9771419379aaf85aa07d089dddf31439a1c6b49b556ac58babdd
7
+ data.tar.gz: 1db08aeba7fbcfd89c98ae28b280ec5a68f59d2cf81f585e859cef0e424505757b3e3324adfdd23f56a54c2f2b0ec4116c8b72855c51857e337cef324e122965
data/.gitignore ADDED
@@ -0,0 +1,10 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /_yardoc/
4
+ /coverage/
5
+ /pkg/
6
+ /spec/reports/
7
+ /tmp/
8
+ /doc/
9
+ /docs/
10
+ .DS_Store
data/.rspec ADDED
@@ -0,0 +1 @@
1
+ --require spec_helper
data/.yardopts ADDED
@@ -0,0 +1 @@
1
+ --output-dir docs/
data/CHANGELOG.md ADDED
@@ -0,0 +1,23 @@
1
+ # DeepNest
2
+
3
+ ## 0.1.1
4
+
5
+ ### Include DeepNest in native Ruby classes
6
+
7
+ - Add helper namespace to use self in recursive methods (i.e. can use `structure.deep_dup` instead of `DeepNest.deep_dup(structure)`).
8
+ - Add patch file to allow users to monkey patch recursive methods in native Hash and Array Ruby classes.
9
+ - Add patch spec.
10
+
11
+ ## 0.1.0
12
+
13
+ ### Initial Release
14
+
15
+ - Add recursive methods
16
+ - deep_dup(structure) that returns a deep copy of the passed hash or array.
17
+ - deep_merge(hash1, hash2, &block) that returns a hash with the passed hashes recursively merged. An optional block can be passed to merge values.
18
+ - deep_equal?(struct1, struct2) that returns true if the passed objects are same in structure and values, false otherwise.
19
+ - deep_transform_keys(structure, &block) that returns a hash or array with all hash keys modified by the passed block.
20
+ - deep_transform_values(structure, &block) that returns a hash or array with all hash values modified by the passed block.
21
+ - deep_stringify_keys(structure) that returns hash or array with all hash keys converted to strings.
22
+ - deep_stringify_values(structure) that returns a hash or array with all hash keys converted to symbols.
23
+
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in deep_nest.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
data/Gemfile.lock ADDED
@@ -0,0 +1,76 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ deep_nest (0.1.1)
5
+
6
+ GEM
7
+ remote: https://rubygems.org/
8
+ specs:
9
+ coderay (1.1.3)
10
+ diff-lcs (1.5.0)
11
+ fabrication (2.30.0)
12
+ ffi (1.15.5)
13
+ formatador (1.1.0)
14
+ guard (2.18.0)
15
+ formatador (>= 0.2.4)
16
+ listen (>= 2.7, < 4.0)
17
+ lumberjack (>= 1.0.12, < 2.0)
18
+ nenv (~> 0.1)
19
+ notiffany (~> 0.0)
20
+ pry (>= 0.13.0)
21
+ shellany (~> 0.0)
22
+ thor (>= 0.18.1)
23
+ guard-compat (1.2.1)
24
+ guard-rspec (4.7.3)
25
+ guard (~> 2.1)
26
+ guard-compat (~> 1.1)
27
+ rspec (>= 2.99.0, < 4.0)
28
+ listen (3.8.0)
29
+ rb-fsevent (~> 0.10, >= 0.10.3)
30
+ rb-inotify (~> 0.9, >= 0.9.10)
31
+ lumberjack (1.2.8)
32
+ method_source (1.0.0)
33
+ nenv (0.3.0)
34
+ notiffany (0.1.3)
35
+ nenv (~> 0.1)
36
+ shellany (~> 0.0)
37
+ pry (0.14.2)
38
+ coderay (~> 1.1)
39
+ method_source (~> 1.0)
40
+ rake (13.0.6)
41
+ rb-fsevent (0.11.2)
42
+ rb-inotify (0.10.1)
43
+ ffi (~> 1.0)
44
+ rspec (3.12.0)
45
+ rspec-core (~> 3.12.0)
46
+ rspec-expectations (~> 3.12.0)
47
+ rspec-mocks (~> 3.12.0)
48
+ rspec-core (3.12.1)
49
+ rspec-support (~> 3.12.0)
50
+ rspec-expectations (3.12.2)
51
+ diff-lcs (>= 1.2.0, < 2.0)
52
+ rspec-support (~> 3.12.0)
53
+ rspec-mocks (3.12.3)
54
+ diff-lcs (>= 1.2.0, < 2.0)
55
+ rspec-support (~> 3.12.0)
56
+ rspec-support (3.12.0)
57
+ shellany (0.0.1)
58
+ thor (1.2.1)
59
+ webrick (1.7.0)
60
+ yard (0.9.28)
61
+ webrick (~> 1.7.0)
62
+
63
+ PLATFORMS
64
+ arm64-darwin-22
65
+
66
+ DEPENDENCIES
67
+ deep_nest!
68
+ fabrication (~> 2.30.0)
69
+ guard (~> 2.18.0)
70
+ guard-rspec (~> 4.7.3)
71
+ rake (~> 13.0)
72
+ rspec (~> 3.12.0)
73
+ yard (~> 0.9.28)
74
+
75
+ BUNDLED WITH
76
+ 2.3.26
data/Guardfile ADDED
@@ -0,0 +1,6 @@
1
+ guard :rspec, cmd: "bundle exec rspec" do
2
+ watch(%r{^spec/.+_spec\.rb$})
3
+ watch(%r{^lib/(.+)\.(rb|thor)$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
4
+ watch("spec/spec_helper.rb") { "spec" }
5
+ watch(%r{spec/support/shared_examples/(.+).rb$}) { "spec" }
6
+ end
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # DeepNest
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/deep_nest`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Install the gem and add to the application's Gemfile by executing:
10
+
11
+ $ bundle add deep_nest
12
+
13
+ If bundler is not being used to manage dependencies, install the gem by executing:
14
+
15
+ $ gem install deep_nest
16
+
17
+ ## Usage
18
+
19
+ TODO: Write usage instructions here
20
+
21
+ ## Development
22
+
23
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
24
+
25
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
26
+
27
+ ## Contributing
28
+
29
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/deep_nest.
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,15 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ require "bundler/setup"
5
+ require "deep_nest"
6
+
7
+ # You can add fixtures and/or initialization code here to make experimenting
8
+ # with your gem easier. You can also use a different console, if you like.
9
+
10
+ # (If you use this, don't forget to add pry to your Gemfile!)
11
+ # require "pry"
12
+ # Pry.start
13
+
14
+ require "irb"
15
+ IRB.start(__FILE__)
data/bin/setup ADDED
@@ -0,0 +1,8 @@
1
+ #!/usr/bin/env bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+ set -vx
5
+
6
+ bundle install
7
+
8
+ # Do any other automated setup that you need to do here
data/deep_nest.gemspec ADDED
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative "lib/deep_nest/version"
4
+
5
+ Gem::Specification.new do |spec|
6
+ spec.name = "deep_nest"
7
+ spec.version = DeepNest::VERSION
8
+ spec.authors = ["Mattie Hansen"]
9
+ spec.email = ["mattie.hansen@realmfive.com"]
10
+
11
+ spec.summary = "Recursive methods for Ruby structures."
12
+ spec.homepage = "https://github.com/RealmFive/deep_nest"
13
+ spec.required_ruby_version = Gem::Requirement.new(">= 2.7.2")
14
+
15
+ spec.metadata["homepage_uri"] = spec.homepage
16
+ spec.metadata["source_code_uri"] = spec.homepage
17
+ spec.metadata["changelog_uri"] = "#{spec.homepage}/CHANGELOG.md"
18
+
19
+ # Specify which files should be added to the gem when it is released.
20
+ # The `git ls-files -z` loads the files in the RubyGem that have been added into git.
21
+ spec.files = Dir.chdir(File.expand_path('..', __FILE__)) do
22
+ `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features|Guardfile|doc|tmp)/}) }
23
+ end
24
+ spec.bindir = "exe"
25
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
26
+ spec.require_paths = ["lib"]
27
+
28
+ spec.add_development_dependency 'fabrication', '~> 2.30.0'
29
+ spec.add_development_dependency 'guard', '~> 2.18.0'
30
+ spec.add_development_dependency 'guard-rspec', '~> 4.7.3'
31
+ spec.add_development_dependency 'rspec', '~> 3.12.0'
32
+ spec.add_development_dependency 'yard', '~> 0.9.28'
33
+ end
@@ -0,0 +1,95 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative '../deep_nest'
4
+
5
+ ##
6
+ # Namespace for helper methods to use self in recursive methods
7
+ module DeepNest
8
+ ##
9
+ # Default error class for Methods module.
10
+ class Error < StandardError; end
11
+
12
+ module Helpers
13
+ ##
14
+ # Returns a deep copy of the passed hash or array.
15
+ #
16
+ # @param self [Hash, Array] The hash or array to be deep copied.
17
+ #
18
+ # @return [Hash, Array] The deep copy of the passed hash or array.
19
+ def deep_dup
20
+ DeepNest.deep_dup(self)
21
+ end
22
+
23
+ ##
24
+ # Returns a hash with the passed hashes recursively merged. An optional block can be passed to merge values.
25
+ #
26
+ # @param self [Hash] The first hash to be merged.
27
+ #
28
+ # @param other_hash [Hash] The second hash to be merged.
29
+ #
30
+ # @yield [&block] Operation to merge values of the hashes.
31
+ #
32
+ # @return [Hash] The hash with recursively merged hashes.
33
+ def deep_merge(other_hash, &block)
34
+ DeepNest.deep_merge(self, other_hash, &block)
35
+ end
36
+
37
+ ##
38
+ # Returns true if the passed parameters are same in structure and values, false otherwise.
39
+ #
40
+ # @param self [Hash, Array] First structure to be compared.
41
+ #
42
+ # @param other_structure [Hash, Array] Second structure to be compared.
43
+ #
44
+ # @return [true] If parameters are equal in structure and values.
45
+ #
46
+ # @return [false] If parameters are not equal in structure and values.
47
+ def deep_equal?(other_structure)
48
+ DeepNest.deep_equal?(self, other_structure)
49
+ end
50
+
51
+ ##
52
+ # Returns a hash or array with all hash keys modified by the passed block.
53
+ #
54
+ # @param self [Hash, Array] The hash or array to transform the keys.
55
+ #
56
+ # @yield [&block] Operation to modify the keys.
57
+ #
58
+ # @return [Hash, Array] The hash or array with transformed keys.
59
+ def deep_transform_keys(&block)
60
+ DeepNest.deep_transform_keys(self, &block)
61
+ end
62
+
63
+ ##
64
+ # Returns a hash or array with all hash values modified by the passed block.
65
+ #
66
+ # @param self [Hash, Array] The hash or array to transform the values.
67
+ #
68
+ # @yield [&block] Operation to modify the values.
69
+ #
70
+ # @return [Hash, Array] The hash or array with transformed values.
71
+ def deep_transform_values(&block)
72
+ DeepNest.deep_transform_values(self, &block)
73
+ end
74
+
75
+ ##
76
+ # Returns a hash or array with all hash keys converted to strings.
77
+ #
78
+ # @param self [Hash, Array] The hash or array to stringify the keys
79
+ #
80
+ # @return [Hash, Array] The hash or array with stringified keys.
81
+ def deep_stringify_keys
82
+ DeepNest.deep_stringify_keys(self)
83
+ end
84
+
85
+ ##
86
+ # Returns a hash or array with all hash keys converted to symbols.
87
+ #
88
+ # @param self [Hash, Array] The hash or array to symbolize the keys
89
+ #
90
+ # @return [Hash, Array] The hash or array with symbolized keys.
91
+ def deep_symbolize_keys
92
+ DeepNest.deep_symbolize_keys(self)
93
+ end
94
+ end
95
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'helpers'
4
+
5
+ ##
6
+ # The native Hash Ruby class with monkey patched helper methods.
7
+ class Hash
8
+ include DeepNest::Helpers
9
+ end
10
+
11
+ ##
12
+ # The native Array Ruby class with monkey patched helper methods.
13
+ class Array
14
+ include DeepNest::Helpers
15
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module DeepNest
4
+ VERSION = '0.1.1'
5
+ end
data/lib/deep_nest.rb ADDED
@@ -0,0 +1,139 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'deep_nest/version'
4
+ require_relative 'deep_nest/helpers'
5
+
6
+ ##
7
+ # Primary namespace for the deep_nest gem.
8
+ module DeepNest
9
+ ##
10
+ # Default error class for DeepNest module.
11
+ class Error < StandardError; end
12
+ class << self
13
+ ##
14
+ # Returns a deep copy of the passed hash or array.
15
+ #
16
+ # @param structure [Hash, Array] The hash or array to be deep copied.
17
+ #
18
+ # @return [Hash, Array] The deep copy of the passed hash or array.
19
+ def deep_dup(structure)
20
+ case structure
21
+ when Array
22
+ structure.map { |x| deep_dup(x) }
23
+ when Hash
24
+ structure.transform_values { |v| deep_dup(v) }
25
+ else
26
+ structure.dup
27
+ end
28
+ end
29
+
30
+ ##
31
+ # Returns a hash with the passed hashes recursively merged. An optional block can be passed to merge values.
32
+ #
33
+ # @param hash1 [Hash] The first hash to be merged.
34
+ #
35
+ # @param hash2 [Hash] The second hash to be merged.
36
+ #
37
+ # @yield [&block] Operation to merge values of the hashes.
38
+ #
39
+ # @return [Hash] The hash with recursively merged hashes.
40
+ def deep_merge(hash1, hash2, &block)
41
+ raise Error, 'Parameters must be hashes' unless hash1.is_a?(Hash) && hash2.is_a?(Hash)
42
+
43
+ hash1.merge(hash2) do |k, v1, v2|
44
+ if v1.is_a?(Hash) && v2.is_a?(Hash)
45
+ deep_merge(v1, v2, &block)
46
+ elsif block_given?
47
+ block.call(k, v1, v2)
48
+ else
49
+ v2
50
+ end
51
+ end
52
+ end
53
+
54
+ ##
55
+ # Returns true if the passed parameters are same in structure and values, false otherwise.
56
+ #
57
+ # @param struct1 [Hash, Array] First structure to be compared.
58
+ #
59
+ # @param struct2 [Hash, Array] Second structure to be compared.
60
+ #
61
+ # @return [true] If parameters are equal in structure and values.
62
+ #
63
+ # @return [false] If parameters are not equal in structure and values.
64
+ def deep_equal?(struct1, struct2)
65
+ if struct1.eql?(struct2)
66
+ case struct1
67
+ when Array
68
+ struct1.zip(struct2).each { |e1, e2| deep_equal?(e1, e2) }
69
+ when Hash
70
+ struct1.merge(struct2).each { |v1, v2| deep_equal?(v1, v2) }
71
+ else
72
+ true
73
+ end
74
+ else
75
+ false
76
+ end
77
+ end
78
+
79
+ ##
80
+ # Returns a hash or array with all hash keys modified by the passed block.
81
+ #
82
+ # @param structure [Hash, Array] The hash or array to transform the keys.
83
+ #
84
+ # @yield [&block] Operation to modify the keys.
85
+ #
86
+ # @return [Hash, Array] The hash or array with transformed keys.
87
+ def deep_transform_keys(structure, &block)
88
+ case structure
89
+ when Hash
90
+ structure.each_with_object({}) do |(k, v), result|
91
+ result[yield(k)] = deep_transform_keys(v, &block)
92
+ end
93
+ when Array
94
+ structure.map { |e| deep_transform_keys(e, &block) }
95
+ else
96
+ structure
97
+ end
98
+ end
99
+
100
+ ##
101
+ # Returns a hash or array with all hash values modified by the passed block.
102
+ #
103
+ # @param structure [Hash, Array] The hash or array to transform the values.
104
+ #
105
+ # @yield [&block] Operation to modify the values.
106
+ #
107
+ # @return [Hash, Array] The hash or array with transformed values.
108
+ def deep_transform_values(structure, &block)
109
+ case structure
110
+ when Hash
111
+ structure.transform_values { |v| deep_transform_values(v, &block) }
112
+ when Array
113
+ structure.map { |e| deep_transform_values(e, &block) }
114
+ else
115
+ yield(structure)
116
+ end
117
+ end
118
+
119
+ ##
120
+ # Returns a hash or array with all hash keys converted to strings.
121
+ #
122
+ # @param structure [Hash, Array] The hash or array to stringify the keys
123
+ #
124
+ # @return [Hash, Array] The hash or array with stringified keys.
125
+ def deep_stringify_keys(structure)
126
+ deep_transform_keys(structure, &:to_s)
127
+ end
128
+
129
+ ##
130
+ # Returns a hash or array with all hash keys converted to symbols.
131
+ #
132
+ # @param structure [Hash, Array] The hash or array to symbolize the keys
133
+ #
134
+ # @return [Hash, Array] The hash or array with symbolized keys.
135
+ def deep_symbolize_keys(structure)
136
+ deep_transform_keys(structure, &:to_sym)
137
+ end
138
+ end
139
+ end
data/sig/deep_nest.rbs ADDED
@@ -0,0 +1,4 @@
1
+ module DeepNest
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,132 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: deep_nest
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.1
5
+ platform: ruby
6
+ authors:
7
+ - Mattie Hansen
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2023-03-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: fabrication
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 2.30.0
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 2.30.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: guard
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 2.18.0
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 2.18.0
41
+ - !ruby/object:Gem::Dependency
42
+ name: guard-rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 4.7.3
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 4.7.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.12.0
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.12.0
69
+ - !ruby/object:Gem::Dependency
70
+ name: yard
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: 0.9.28
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: 0.9.28
83
+ description:
84
+ email:
85
+ - mattie.hansen@realmfive.com
86
+ executables: []
87
+ extensions: []
88
+ extra_rdoc_files: []
89
+ files:
90
+ - ".gitignore"
91
+ - ".rspec"
92
+ - ".yardopts"
93
+ - CHANGELOG.md
94
+ - Gemfile
95
+ - Gemfile.lock
96
+ - Guardfile
97
+ - README.md
98
+ - Rakefile
99
+ - bin/console
100
+ - bin/setup
101
+ - deep_nest.gemspec
102
+ - lib/deep_nest.rb
103
+ - lib/deep_nest/helpers.rb
104
+ - lib/deep_nest/patch.rb
105
+ - lib/deep_nest/version.rb
106
+ - sig/deep_nest.rbs
107
+ homepage: https://github.com/RealmFive/deep_nest
108
+ licenses: []
109
+ metadata:
110
+ homepage_uri: https://github.com/RealmFive/deep_nest
111
+ source_code_uri: https://github.com/RealmFive/deep_nest
112
+ changelog_uri: https://github.com/RealmFive/deep_nest/CHANGELOG.md
113
+ post_install_message:
114
+ rdoc_options: []
115
+ require_paths:
116
+ - lib
117
+ required_ruby_version: !ruby/object:Gem::Requirement
118
+ requirements:
119
+ - - ">="
120
+ - !ruby/object:Gem::Version
121
+ version: 2.7.2
122
+ required_rubygems_version: !ruby/object:Gem::Requirement
123
+ requirements:
124
+ - - ">="
125
+ - !ruby/object:Gem::Version
126
+ version: '0'
127
+ requirements: []
128
+ rubygems_version: 3.4.6
129
+ signing_key:
130
+ specification_version: 4
131
+ summary: Recursive methods for Ruby structures.
132
+ test_files: []