collapsium 0.5.0 → 0.5.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 +4 -4
- data/Gemfile.lock +3 -3
- data/README.md +43 -1
- data/collapsium.gemspec +1 -1
- data/lib/collapsium/version.rb +1 -1
- data/lib/collapsium/viral_capabilities.rb +3 -0
- data/spec/viral_capabilities_spec.rb +13 -0
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a5f69b509b0b797408a7a7b49f205cf1664d9931
|
4
|
+
data.tar.gz: c8cddb20e60be62dcf7522ef8008e9d02a4c256b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5586fb4097ab338d3a2d2d4a55d3ae2bd91eebea7d2a02acbe49500c45da8b735922ea989b2f9fbaa4d0134d26308d4ead461a40b86fec99d1c901c81690bf95
|
7
|
+
data.tar.gz: f57e9dd8df1ee2013db148d3acc86a462d10701dbaf72276997ef3e2a10724c51cd663696745d604cf66069684318d7507e3987235ddb48fe476eb5f762dcf81
|
data/Gemfile.lock
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
collapsium (0.5.
|
4
|
+
collapsium (0.5.1)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
@@ -30,7 +30,7 @@ GEM
|
|
30
30
|
diff-lcs (>= 1.2.0, < 2.0)
|
31
31
|
rspec-support (~> 3.5.0)
|
32
32
|
rspec-support (3.5.0)
|
33
|
-
rubocop (0.
|
33
|
+
rubocop (0.45.0)
|
34
34
|
parser (>= 2.3.1.1, < 3.0)
|
35
35
|
powerpack (~> 0.1)
|
36
36
|
rainbow (>= 1.99.1, < 3.0)
|
@@ -54,7 +54,7 @@ DEPENDENCIES
|
|
54
54
|
collapsium!
|
55
55
|
rake (~> 11.3)
|
56
56
|
rspec (~> 3.5)
|
57
|
-
rubocop (~> 0.
|
57
|
+
rubocop (~> 0.45)
|
58
58
|
simplecov (~> 0.12)
|
59
59
|
yard (~> 0.9)
|
60
60
|
|
data/README.md
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# collapsium
|
2
|
-
*Provides various Hash extensions, and an UberHash class that uses them all.*
|
2
|
+
*Provides various Hash and Array extensions, and an UberHash class that uses them all.*
|
3
3
|
|
4
4
|
Ruby's Hash is a pretty nice class, but various extensions are commonly (or not
|
5
5
|
so commonly) used to make it even more convenient. The most notable would
|
@@ -37,6 +37,10 @@ that is ActiveSupport...
|
|
37
37
|
# },
|
38
38
|
# }
|
39
39
|
```
|
40
|
+
- The `RecursiveDup` module provides a `#recursive_dup` function which `#dup`s
|
41
|
+
recursively.
|
42
|
+
- The `RecursiveSort` module provides a `#recursive_sort` function which sorts
|
43
|
+
recursively.
|
40
44
|
- The `PathedAccess` module provides a pathed access method to nested Hashes:
|
41
45
|
|
42
46
|
```ruby
|
@@ -44,5 +48,43 @@ that is ActiveSupport...
|
|
44
48
|
x.extend(::Collapsium::PathedAccess)
|
45
49
|
x["foo.bar"] # => 42
|
46
50
|
```
|
51
|
+
- The `PrototypeMatch` module provides the ability to match nested structures
|
52
|
+
by prototype:
|
53
|
+
|
54
|
+
```ruby
|
55
|
+
x = { "foo" => { "bar" => 42 } }
|
56
|
+
x.extend(::Collapsium::PrototypeMatch)
|
57
|
+
x.prototype_match("foo" => { "bar" => nil }}) # => true
|
58
|
+
```
|
59
|
+
|
60
|
+
Prototypes can include values, in which case they need to match. Or they can
|
61
|
+
contain nil, in which case any value will match, but the associated key must
|
62
|
+
still exist in the receiver.
|
63
|
+
- Finally, the `ViralCapabilities` module is included in many of the above,
|
64
|
+
and ensures that nested structures retain the capabilites of their parents:
|
65
|
+
|
66
|
+
```ruby
|
67
|
+
x = { "foo" => { "bar" => 42 } }
|
68
|
+
x.extend(::Collapsium::PathedAccess)
|
69
|
+
x.path_prefix # => "." (part of PathedAccess)
|
70
|
+
x["foo"].path_prefix # => ".foo" (virally inherited)
|
71
|
+
```
|
47
72
|
|
48
73
|
Finally, the `UberHash` class just includes all of the above.
|
74
|
+
|
75
|
+
- The `EnvironmentOverride` method allows you to override keys in a nested
|
76
|
+
structure with environment variables:
|
77
|
+
|
78
|
+
```ruby
|
79
|
+
x = ::Collapsium::UberHash.new
|
80
|
+
x.extend(::Collapsium::EnvironmentOverride)
|
81
|
+
|
82
|
+
x["foo.bar"] = 42
|
83
|
+
ENV["FOO_BAR"] = "override"
|
84
|
+
x["foo.bar"] # => "override"
|
85
|
+
```
|
86
|
+
|
87
|
+
Note that `EnvironmentOverride` is not included in `UberHash` by default.
|
88
|
+
It just messes with the predictability of the class too much. However, the
|
89
|
+
[collapsium-config](https://github.com/jfinkhaeuser/collapsium-config) gem
|
90
|
+
uses it extensively to provide easy overrides for configuration values.
|
data/collapsium.gemspec
CHANGED
@@ -35,7 +35,7 @@ Gem::Specification.new do |spec|
|
|
35
35
|
spec.required_ruby_version = '>= 2.0'
|
36
36
|
|
37
37
|
spec.add_development_dependency "bundler", "~> 1.12"
|
38
|
-
spec.add_development_dependency "rubocop", "~> 0.
|
38
|
+
spec.add_development_dependency "rubocop", "~> 0.45"
|
39
39
|
spec.add_development_dependency "rake", "~> 11.3"
|
40
40
|
spec.add_development_dependency "rspec", "~> 3.5"
|
41
41
|
spec.add_development_dependency "simplecov", "~> 0.12"
|
data/lib/collapsium/version.rb
CHANGED
@@ -80,6 +80,12 @@ module ViralityModule
|
|
80
80
|
end
|
81
81
|
end
|
82
82
|
|
83
|
+
class RespondsToHashAncestor < Hash
|
84
|
+
def hash_ancestor
|
85
|
+
return nil
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
83
89
|
describe ::Collapsium::ViralCapabilities do
|
84
90
|
context PrependedHash do
|
85
91
|
let(:tester) do
|
@@ -272,4 +278,11 @@ describe ::Collapsium::ViralCapabilities do
|
|
272
278
|
expect(tester[:bar][:bar].object_id).to eql innermost.object_id
|
273
279
|
end
|
274
280
|
end
|
281
|
+
|
282
|
+
context RespondsToHashAncestor do
|
283
|
+
it "can still be used virally" do
|
284
|
+
tester = PrependedHash.new
|
285
|
+
expect { tester.merge(RespondsToHashAncestor.new) }.not_to raise_error
|
286
|
+
end
|
287
|
+
end
|
275
288
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: collapsium
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Jens Finkhaeuser
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-11-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -30,14 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: '0.
|
33
|
+
version: '0.45'
|
34
34
|
type: :development
|
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: '0.
|
40
|
+
version: '0.45'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|