y_support 2.0.33 → 2.0.34
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/lib/y_support/core_ext/hash/misc.rb +44 -9
- data/lib/y_support/version.rb +1 -1
- data/test/misc_test.rb +3 -1
- data/test/unicode_test.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b8837638588e1c76d7fea644f117253c4250cb13
|
4
|
+
data.tar.gz: 3ede5fb44abe873b9fc068ecb6b3f059a9264e98
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 16aec56e99572375aaa49450202c4700247b20ba5b6457935fc2aeb6a100e99699436cafb88618d53c6c6895f860e973b5899b2d13fe926d300fb26a054d0fd6
|
7
|
+
data.tar.gz: b10e770494ad0f115b9b2f9f75cdcbb6123a51d6a4ba98dddf2f796062408359ffaa69a4e262a909d7436a2a02cd1cff45d26bc15a427df6f1fae9331c4035a9
|
@@ -3,6 +3,49 @@
|
|
3
3
|
require 'active_support/core_ext/hash/reverse_merge'
|
4
4
|
|
5
5
|
class Hash
|
6
|
+
class << self
|
7
|
+
# This kluge method guards against overwriting of the #slice method by
|
8
|
+
# ActiveSupport.
|
9
|
+
#
|
10
|
+
def method_added( sym )
|
11
|
+
if sym == :slice then
|
12
|
+
puts "Method added activated on :slice"
|
13
|
+
# Unless it is our method, overwrite it.
|
14
|
+
unless instance_method( sym ).source_location.include? 'y_support'
|
15
|
+
puts "Self is #{self}"
|
16
|
+
puts "Self class is #{self.class}"
|
17
|
+
# Let's now make a cache of this very method being called
|
18
|
+
ma = singleton_class.instance_method :method_added
|
19
|
+
# Let's remove the :method_added hook, or otherwise infinite recursion
|
20
|
+
# would ensue.
|
21
|
+
singleton_class.class_exec { remove_method :method_added }
|
22
|
+
# And let's redefine the +:slice+ method now:
|
23
|
+
warn "Attempt to overwrite Hash#slice method has occured, reverting."
|
24
|
+
|
25
|
+
class_exec do
|
26
|
+
# A bit like Array#slice, but only takes 1 argument, which is either
|
27
|
+
# a Range, or an Array, and returns the selection of the hash for
|
28
|
+
# the keys that match the range or are present in the array.
|
29
|
+
#
|
30
|
+
define_method sym do |matcher|
|
31
|
+
self.class[ case matcher
|
32
|
+
when Array then
|
33
|
+
select { |key, _| matcher.include? key }
|
34
|
+
else
|
35
|
+
select { |key, _| matcher === key }
|
36
|
+
end ]
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
# Finally, let's bind the +:method_added+ method to self again.
|
41
|
+
singleton_class.class_exec do
|
42
|
+
define_method :method_added do |sym| ma.bind( self ).call( sym ) end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
6
49
|
# reversed merge!: defaults.merge( self! )
|
7
50
|
alias :default! :reverse_merge!
|
8
51
|
|
@@ -63,7 +106,7 @@ class Hash
|
|
63
106
|
|
64
107
|
# Checking mainly against the collision with ActiveSupport's Hash#slice.
|
65
108
|
if Hash.instance_methods.include? :slice then
|
66
|
-
|
109
|
+
warn "Collision: Method #slice already defined on Hash! (%s)" %
|
67
110
|
Hash.instance_method( :slice ).source_location
|
68
111
|
end
|
69
112
|
|
@@ -111,12 +154,4 @@ class Hash
|
|
111
154
|
end.each { |line| puts line }
|
112
155
|
return nil
|
113
156
|
end
|
114
|
-
|
115
|
-
class << self
|
116
|
-
def method_added( sym )
|
117
|
-
if sym == :slice then
|
118
|
-
fail LoadError, "Attempt to overwrite YSupport's Hash##{sym} method!"
|
119
|
-
end
|
120
|
-
end
|
121
|
-
end
|
122
157
|
end
|
data/lib/y_support/version.rb
CHANGED
data/test/misc_test.rb
CHANGED
@@ -169,7 +169,9 @@ describe Hash do
|
|
169
169
|
end
|
170
170
|
|
171
171
|
it "should be safeguarded against redefining #slice" do
|
172
|
-
|
172
|
+
m = Hash.instance_method :slice
|
173
|
+
class Hash; def slice( *args ); fail "This should not happen!" end end
|
174
|
+
{}.slice( :a )
|
173
175
|
end
|
174
176
|
end
|
175
177
|
|
data/test/unicode_test.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: y_support
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.0.
|
4
|
+
version: 2.0.34
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- boris
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2013-08-
|
11
|
+
date: 2013-08-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|