hash-utils 0.3.1 → 0.4.0
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.
- data/VERSION +1 -1
- data/hash-utils.gemspec +2 -2
- data/lib/hash-utils/array.rb +32 -3
- data/lib/hash-utils/hash.rb +31 -20
- data/lib/hash-utils/numeric.rb +2 -2
- data/lib/hash-utils/string.rb +82 -3
- data/lib/hash-utils/symbol.rb +2 -3
- metadata +5 -5
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.4.0
|
data/hash-utils.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{hash-utils}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.4.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Martin Kozák"]
|
12
|
-
s.date = %q{2011-01-
|
12
|
+
s.date = %q{2011-01-27}
|
13
13
|
s.email = %q{martinkozak@martinkozak.net}
|
14
14
|
s.extra_rdoc_files = [
|
15
15
|
"LICENSE.txt",
|
data/lib/hash-utils/array.rb
CHANGED
@@ -10,7 +10,7 @@ class Array
|
|
10
10
|
##
|
11
11
|
# Moves selected values outside the array, so returns them.
|
12
12
|
#
|
13
|
-
# Works similar to #reject
|
13
|
+
# Works similar to +Hash#reject!+, but returns removed items instead
|
14
14
|
# of remaining items.
|
15
15
|
#
|
16
16
|
# @param [Proc] block selecting block
|
@@ -36,7 +36,7 @@ class Array
|
|
36
36
|
# Checks, all values follow condition expressed in block.
|
37
37
|
# Block must return Boolean.
|
38
38
|
#
|
39
|
-
# If it's empty, returns
|
39
|
+
# If it's empty, returns +true+.
|
40
40
|
#
|
41
41
|
# @param [Proc] block checking block
|
42
42
|
# @return [Boolean] 'true' if yes, 'false' in otherwise
|
@@ -75,5 +75,34 @@ class Array
|
|
75
75
|
|
76
76
|
return false
|
77
77
|
end
|
78
|
-
|
78
|
+
|
79
|
+
##
|
80
|
+
# Converts array to +Hash+.
|
81
|
+
#
|
82
|
+
# Works as alias for +Hash#[]+ method. If you specify the +:flat+
|
83
|
+
# mode, array items will be treaten as arguments to +Hash#[]+
|
84
|
+
# method.
|
85
|
+
#
|
86
|
+
# Should be noted, it cannot be named +#to_hash+, because #to_hash
|
87
|
+
# is called by the +Hash#[]+ itself. Reasons why it's absolutely
|
88
|
+
# undocumented call are unknown.
|
89
|
+
#
|
90
|
+
# @example Equivalent calls
|
91
|
+
# [["aa", "bb"], ["bb", "aa"]].to_h
|
92
|
+
# ["aa", "bb", "bb", "aa"].to_h(:flat)
|
93
|
+
#
|
94
|
+
# @param [Symbol] mode flat mode switch, can be +:flat+ or +nil+
|
95
|
+
# @return Hash new hash
|
96
|
+
# @see http://www.ruby-doc.org/core/classes/Hash.html#M000716
|
97
|
+
# @since 0.4.0
|
98
|
+
#
|
99
|
+
|
100
|
+
def to_h(mode = nil)
|
101
|
+
if mode == :flat
|
102
|
+
Hash[*self]
|
103
|
+
else
|
104
|
+
Hash[self]
|
105
|
+
end
|
106
|
+
end
|
107
|
+
|
79
108
|
end
|
data/lib/hash-utils/hash.rb
CHANGED
@@ -9,7 +9,8 @@
|
|
9
9
|
class Hash
|
10
10
|
|
11
11
|
##
|
12
|
-
# Defines hash by setting the default value or Proc
|
12
|
+
# Defines hash by setting the default value or an +Proc+
|
13
|
+
# and content.
|
13
14
|
#
|
14
15
|
# @param [Hash] values initial values
|
15
16
|
# @param [Object] default default value
|
@@ -94,8 +95,7 @@ class Hash
|
|
94
95
|
end
|
95
96
|
|
96
97
|
##
|
97
|
-
# Returns a copy of
|
98
|
-
# elements removed.
|
98
|
+
# Returns a copy of +self+ with all +nil+ elements removed.
|
99
99
|
#
|
100
100
|
# @return [Hash] new hash
|
101
101
|
# @since 0.1.0
|
@@ -106,8 +106,8 @@ class Hash
|
|
106
106
|
end
|
107
107
|
|
108
108
|
##
|
109
|
-
# Removes
|
110
|
-
# if no changes were made, otherwise returns
|
109
|
+
# Removes +nil+ elements from the hash. Returns +nil+
|
110
|
+
# if no changes were made, otherwise returns +self+.
|
111
111
|
#
|
112
112
|
# @return [Hash] new hash
|
113
113
|
# @since 0.1.0
|
@@ -119,7 +119,7 @@ class Hash
|
|
119
119
|
|
120
120
|
##
|
121
121
|
# Returns a new hash with the results of running block once for
|
122
|
-
# every pair in
|
122
|
+
# every pair in +self+.
|
123
123
|
#
|
124
124
|
# @param [Proc] block evaluating block
|
125
125
|
# @return [Hash] new hash
|
@@ -140,7 +140,7 @@ class Hash
|
|
140
140
|
alias :collect_pairs :map_pairs
|
141
141
|
|
142
142
|
##
|
143
|
-
# Emulates #map_pairs on place. In fact, replaces old hash by
|
143
|
+
# Emulates {#map_pairs} on place. In fact, replaces old hash by
|
144
144
|
# new one.
|
145
145
|
#
|
146
146
|
# @param [Proc] block evaluating block
|
@@ -155,7 +155,7 @@ class Hash
|
|
155
155
|
|
156
156
|
##
|
157
157
|
# Returns a new hash with the results of running block once for
|
158
|
-
# every key in
|
158
|
+
# every key in +self+.
|
159
159
|
#
|
160
160
|
# @param [Proc] block evaluating block
|
161
161
|
# @return [Hash] new hash
|
@@ -171,7 +171,7 @@ class Hash
|
|
171
171
|
alias :collect_keys :map_keys
|
172
172
|
|
173
173
|
##
|
174
|
-
# Emulates #map_keys on place. In fact, replaces old hash by
|
174
|
+
# Emulates {#map_keys} on place. In fact, replaces old hash by
|
175
175
|
# new one.
|
176
176
|
#
|
177
177
|
# @param [Proc] block evaluating block
|
@@ -196,7 +196,7 @@ class Hash
|
|
196
196
|
end
|
197
197
|
|
198
198
|
##
|
199
|
-
# Emulates #keys_to_sym on place. In fact, replaces old hash by
|
199
|
+
# Emulates {#keys_to_sym} on place. In fact, replaces old hash by
|
200
200
|
# new one.
|
201
201
|
#
|
202
202
|
# @since 0.1.0
|
@@ -208,12 +208,12 @@ class Hash
|
|
208
208
|
|
209
209
|
##
|
210
210
|
# Checks, all elements values follow condition expressed in block.
|
211
|
-
# Block must return
|
211
|
+
# Block must return boolean.
|
212
212
|
#
|
213
|
-
# If it's empty, returns
|
213
|
+
# If it's empty, returns +true+.
|
214
214
|
#
|
215
215
|
# @param [Proc] block checking block
|
216
|
-
# @return [Boolean]
|
216
|
+
# @return [Boolean] +true+ if yes, +false+ in otherwise
|
217
217
|
# @since 0.2.0
|
218
218
|
#
|
219
219
|
|
@@ -233,12 +233,12 @@ class Hash
|
|
233
233
|
|
234
234
|
##
|
235
235
|
# Checks, all elements follow condition expressed in block.
|
236
|
-
# Block must return
|
236
|
+
# Block must return boolean.
|
237
237
|
#
|
238
|
-
# If it's empty, returns
|
238
|
+
# If it's empty, returns +true+.
|
239
239
|
#
|
240
240
|
# @param [Proc] block checking block
|
241
|
-
# @return [Boolean]
|
241
|
+
# @return [Boolean] +true+ if yes, +false+ in otherwise
|
242
242
|
# @since 0.2.0
|
243
243
|
#
|
244
244
|
|
@@ -258,10 +258,10 @@ class Hash
|
|
258
258
|
|
259
259
|
##
|
260
260
|
# Checks, at least one element value follows condition expressed in
|
261
|
-
# block. Block must return
|
261
|
+
# block. Block must return boolean.
|
262
262
|
#
|
263
263
|
# @param [Proc] block checking block
|
264
|
-
# @return [Boolean]
|
264
|
+
# @return [Boolean] +true+ if yes, +false+ in otherwise
|
265
265
|
# @since 0.2.0
|
266
266
|
#
|
267
267
|
|
@@ -277,10 +277,10 @@ class Hash
|
|
277
277
|
|
278
278
|
##
|
279
279
|
# Checks, at least one element follows condition expressed in
|
280
|
-
# block. Block must return
|
280
|
+
# block. Block must return boolean.
|
281
281
|
#
|
282
282
|
# @param [Proc] block checking block
|
283
|
-
# @return [Boolean]
|
283
|
+
# @return [Boolean] +true+ if yes, +false+ in otherwise
|
284
284
|
# @since 0.2.0
|
285
285
|
#
|
286
286
|
|
@@ -293,4 +293,15 @@ class Hash
|
|
293
293
|
|
294
294
|
return false
|
295
295
|
end
|
296
|
+
|
297
|
+
##
|
298
|
+
# Compatibility method with {Array#to_h}. Returns itself.
|
299
|
+
#
|
300
|
+
# @return [Hash] itself
|
301
|
+
# @since 0.4.0
|
302
|
+
#
|
303
|
+
|
304
|
+
def to_h(mode = nil)
|
305
|
+
self
|
306
|
+
end
|
296
307
|
end
|
data/lib/hash-utils/numeric.rb
CHANGED
@@ -7,10 +7,10 @@
|
|
7
7
|
|
8
8
|
class Numeric
|
9
9
|
##
|
10
|
-
# Indicates numeric is in some object which supports
|
10
|
+
# Indicates numeric is in some object which supports +#include?+.
|
11
11
|
#
|
12
12
|
# @param [Object] range container for analyzing
|
13
|
-
# @
|
13
|
+
# @return [Boolean] +true+ if yes, +false+ in otherwise
|
14
14
|
# @since 0.3.0
|
15
15
|
#
|
16
16
|
|
data/lib/hash-utils/string.rb
CHANGED
@@ -1,6 +1,9 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
|
3
3
|
|
4
|
+
require "hash-utils/array"
|
5
|
+
require "hash-utils/hash"
|
6
|
+
|
4
7
|
##
|
5
8
|
# String extension.
|
6
9
|
#
|
@@ -13,10 +16,10 @@ class String
|
|
13
16
|
NUMERIC = /^\s*-?\d+(?:\.\d+)?\s*$/
|
14
17
|
|
15
18
|
##
|
16
|
-
# Indicates string is in some object which supports
|
19
|
+
# Indicates string is in some object which supports +#include?+.
|
17
20
|
#
|
18
21
|
# @param [Object] range container for analyzing
|
19
|
-
# @
|
22
|
+
# @return [Boolean] +true+ if yes, +false+ in otherwise
|
20
23
|
# @since 0.3.0
|
21
24
|
#
|
22
25
|
|
@@ -27,7 +30,7 @@ class String
|
|
27
30
|
##
|
28
31
|
# Indicates, string is numeric, so consists of numbers only.
|
29
32
|
#
|
30
|
-
# @return [Boolean]
|
33
|
+
# @return [Boolean] +true+ if yes, +false+ in otherwise
|
31
34
|
# @since 0.3.0
|
32
35
|
#
|
33
36
|
|
@@ -38,4 +41,80 @@ class String
|
|
38
41
|
false
|
39
42
|
end
|
40
43
|
end
|
44
|
+
|
45
|
+
##
|
46
|
+
# Replaces set of substrings by another strings.
|
47
|
+
#
|
48
|
+
# It's equivalent of PHP +strtr()+ function. Supports all objects
|
49
|
+
# convertable to String, but in that case you must give him block
|
50
|
+
# which specifies how to map keys found in the string back to
|
51
|
+
# keys in definition Hash or Array.
|
52
|
+
#
|
53
|
+
# If you specify the +:flat+ mode, definition array items will be
|
54
|
+
# treaten as arguments to +Hash#[]+ method while internal conversion
|
55
|
+
# +Array+ to +Hash+, so then can then use plain array as base for
|
56
|
+
# definitions. See {Array#to_h}.
|
57
|
+
#
|
58
|
+
# @example Equivalent calls
|
59
|
+
# "aa bb".tr("aa" => "bb", "bb" => "aa")
|
60
|
+
# "aa bb".tr([["aa", "bb"], ["bb", "aa"]])
|
61
|
+
# "aa bb".tr(["aa", "bb", "bb", "aa"], :flat)
|
62
|
+
# @example Use with symbols
|
63
|
+
# "aa bb".tr(:aa => "bb", :bb => "aa") { |s| s.to_sym }
|
64
|
+
#
|
65
|
+
# @param [Array, Hash] replacements replacements definition
|
66
|
+
# @param [Symbol] mode flat mode switch, can be +:flat+ or +nil+
|
67
|
+
# @param [Proc] block with keys mapping worker (see description)
|
68
|
+
# @return [String] string with applied replacements
|
69
|
+
# @see http://www.php.net/strtr
|
70
|
+
# @since 0.4.0
|
71
|
+
#
|
72
|
+
|
73
|
+
def tr(defs, mode = nil, &block)
|
74
|
+
if block.nil?
|
75
|
+
block = Proc::new { |s| s }
|
76
|
+
end
|
77
|
+
|
78
|
+
defs, matcher = __prepare_tr(defs, mode)
|
79
|
+
self.gsub(matcher) { |s| defs[block.call(s)] }
|
80
|
+
end
|
81
|
+
|
82
|
+
##
|
83
|
+
# Replaces set of substrings by another strings -- in place.
|
84
|
+
# See {#tr} for details.
|
85
|
+
#
|
86
|
+
# @param [Array, Hash] replacements replacements definition
|
87
|
+
# @param [Symbol] mode flat mode switch, can be +:flat+ or +nil+
|
88
|
+
# @param [Proc] block with keys mapping worker (see description)
|
89
|
+
# @return [String] string with applied replacements
|
90
|
+
# @see #tr
|
91
|
+
# @since 0.4.0
|
92
|
+
#
|
93
|
+
|
94
|
+
def tr!(defs, mode = nil, &block)
|
95
|
+
if block.nil?
|
96
|
+
block = Proc::new { |s| s }
|
97
|
+
end
|
98
|
+
|
99
|
+
defs, matcher = __prepare_tr(defs, mode)
|
100
|
+
self.gsub!(matcher) { |s| defs[block.call(s)] }
|
101
|
+
end
|
102
|
+
|
103
|
+
|
104
|
+
private
|
105
|
+
|
106
|
+
##
|
107
|
+
# Prepares matcher for #tr.
|
108
|
+
#
|
109
|
+
|
110
|
+
def __prepare_tr(defs, mode = nil)
|
111
|
+
defs = defs.to_h(mode)
|
112
|
+
keys = defs.keys
|
113
|
+
keys.map! { |i| i.to_s }
|
114
|
+
|
115
|
+
matcher = Regexp::new("(" << keys.join("|") << ")")
|
116
|
+
return [defs, matcher]
|
117
|
+
end
|
118
|
+
|
41
119
|
end
|
120
|
+
|
data/lib/hash-utils/symbol.rb
CHANGED
@@ -1,17 +1,16 @@
|
|
1
1
|
# encoding: utf-8
|
2
2
|
# (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
|
3
3
|
|
4
|
-
|
5
4
|
##
|
6
5
|
# Symbol extension.
|
7
6
|
#
|
8
7
|
|
9
8
|
class Symbol
|
10
9
|
##
|
11
|
-
# Indicates symbol is in some object which supports
|
10
|
+
# Indicates symbol is in some object which supports +#include?+.
|
12
11
|
#
|
13
12
|
# @param [Object] range container for analyzing
|
14
|
-
# @
|
13
|
+
# @return [Boolean] +true+ if yes, +false+ in otherwise
|
15
14
|
# @since 0.3.0
|
16
15
|
#
|
17
16
|
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 4
|
8
|
+
- 0
|
9
|
+
version: 0.4.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- "Martin Koz\xC3\xA1k"
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2011-01-
|
17
|
+
date: 2011-01-27 00:00:00 +01:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|
@@ -85,7 +85,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
85
85
|
requirements:
|
86
86
|
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
|
-
hash: -
|
88
|
+
hash: -2173078949631025708
|
89
89
|
segments:
|
90
90
|
- 0
|
91
91
|
version: "0"
|