hash-utils 1.0.0 → 2.0.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,7 @@
1
1
  # encoding: utf-8
2
- # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
2
+ # (c) 2011-2012 Martin Kozák (martinkozak@martinkozak.net)
3
+
4
+ require "hash-utils/object"
3
5
 
4
6
  ##
5
7
  # +TrueClass+ extension.
@@ -15,8 +17,10 @@ class TrueClass
15
17
  # @since 0.17.0
16
18
  #
17
19
 
18
- def boolean?
19
- true
20
+ if not self.__hash_utils_instance_respond_to? :boolean?
21
+ def boolean?
22
+ true
23
+ end
20
24
  end
21
25
 
22
26
  ##
@@ -26,8 +30,10 @@ class TrueClass
26
30
  # @since 0.15.0
27
31
  #
28
32
 
29
- def false?
30
- false
33
+ if not self.__hash_utils_instance_respond_to? :false?
34
+ def false?
35
+ false
36
+ end
31
37
  end
32
38
 
33
39
  ##
@@ -37,8 +43,10 @@ class TrueClass
37
43
  # @since 0.15.0
38
44
  #
39
45
 
40
- def true?
41
- true
46
+ if not self.__hash_utils_instance_respond_to? :true?
47
+ def true?
48
+ true
49
+ end
42
50
  end
43
51
 
44
52
  ##
@@ -50,8 +58,10 @@ class TrueClass
50
58
  # @since 0.19.0
51
59
  #
52
60
 
53
- def convert(t, f)
54
- t
61
+ if not self.__hash_utils_instance_respond_to? :convert
62
+ def convert(t, f)
63
+ t
64
+ end
55
65
  end
56
66
 
57
67
  ##
@@ -63,8 +73,10 @@ class TrueClass
63
73
  # @since 0.19.0
64
74
  #
65
75
 
66
- def to_i(t = 1, f = 0)
67
- self.convert(t, f)
76
+ if not self.__hash_utils_instance_respond_to? :to_i
77
+ def to_i(t = 1, f = 0)
78
+ self.convert(t, f)
79
+ end
68
80
  end
69
81
 
70
82
  end
@@ -83,8 +95,10 @@ class FalseClass
83
95
  # @since 0.17.0
84
96
  #
85
97
 
86
- def boolean?
87
- true
98
+ if not self.__hash_utils_instance_respond_to? :boolean?
99
+ def boolean?
100
+ true
101
+ end
88
102
  end
89
103
 
90
104
  ##
@@ -94,8 +108,10 @@ class FalseClass
94
108
  # @since 0.15.0
95
109
  #
96
110
 
97
- def false?
98
- true
111
+ if not self.__hash_utils_instance_respond_to? :false?
112
+ def false?
113
+ true
114
+ end
99
115
  end
100
116
 
101
117
  ##
@@ -105,8 +121,10 @@ class FalseClass
105
121
  # @since 0.15.0
106
122
  #
107
123
 
108
- def true?
109
- false
124
+ if not self.__hash_utils_instance_respond_to? :true?
125
+ def true?
126
+ false
127
+ end
110
128
  end
111
129
 
112
130
  ##
@@ -118,8 +136,10 @@ class FalseClass
118
136
  # @since 0.19.0
119
137
  #
120
138
 
121
- def convert(t, f)
122
- f
139
+ if not self.__hash_utils_instance_respond_to? :convert
140
+ def convert(t, f)
141
+ f
142
+ end
123
143
  end
124
144
 
125
145
  ##
@@ -131,8 +151,10 @@ class FalseClass
131
151
  # @since 0.19.0
132
152
  #
133
153
 
134
- def to_i(t = 1, f = 0)
135
- self.convert(t, f)
154
+ if not self.__hash_utils_instance_respond_to? :to_i
155
+ def to_i(t = 1, f = 0)
156
+ self.convert(t, f)
157
+ end
136
158
  end
137
159
 
138
160
  end
@@ -1,7 +1,8 @@
1
1
  # encoding: utf-8
2
- # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
2
+ # (c) 2011-2012 Martin Kozák (martinkozak@martinkozak.net)
3
3
 
4
4
  require "ruby-version"
5
+ require "hash-utils/object"
5
6
 
6
7
  ##
7
8
  # File extension.
@@ -11,51 +12,57 @@ require "ruby-version"
11
12
  class File
12
13
 
13
14
 
14
- if Ruby::Version < [1, 9, 3]
15
-
16
- ##
17
- # Writes data to file and closes it in single call.
18
- #
19
- # @note Data were written in binary mode since +0.11.1+,
20
- # but since +0.19.0+, they are written non-binary again.
21
- # Binary writing is implemented via {File#binwrite}.
22
- # @note Since Ruby 1.9.3 replaced by STL native version.
23
- #
24
- # @param [String] filepath path to file
25
- # @param [String] data data for write
26
- # @return [Integer] length of really written data
27
- # @since 0.11.0
28
- #
29
-
30
- def self.write(filepath, data = "")
31
- len = nil
32
- File.open(filepath, "w") do |io|
33
- len = io.write(data)
15
+ if not self.respond_to? :write
16
+ if Ruby::Version < [1, 9, 3]
17
+
18
+ ##
19
+ # Writes data to file and closes it in single call.
20
+ #
21
+ # @note Data were written in binary mode since +0.11.1+,
22
+ # but since +0.19.0+, they are written non-binary again.
23
+ # Binary writing is implemented via {File#binwrite}.
24
+ # @note Since Ruby 1.9.3 replaced by STL native version.
25
+ #
26
+ # @param [String] filepath path to file
27
+ # @param [String] data data for write
28
+ # @return [Integer] length of really written data
29
+ # @since 0.11.0
30
+ #
31
+
32
+ def self.write(filepath, data = "")
33
+ len = nil
34
+ File.open(filepath, "w") do |io|
35
+ len = io.write(data)
36
+ end
37
+ return len
34
38
  end
35
- return len
39
+
36
40
  end
37
41
  end
38
42
 
39
- if Ruby::Version < [1, 9, 3]
40
-
41
- ##
42
- # Writes binary data to file and closes it
43
- # in single call.
44
- #
45
- # @note Since Ruby 1.9.3 replaced by STL native version.
46
- #
47
- # @param [String] filepath path to file
48
- # @param [String] data data for write
49
- # @return [Integer] length of really written data
50
- # @since 0.19.0
51
- #
52
-
53
- def self.binwrite(filepath, data = "")
54
- len = nil
55
- File.open(filepath, "wb") do |io|
56
- len = io.write(data)
43
+ if not self.respond_to? :binwrite
44
+ if Ruby::Version < [1, 9, 3]
45
+
46
+ ##
47
+ # Writes binary data to file and closes it
48
+ # in single call.
49
+ #
50
+ # @note Since Ruby 1.9.3 replaced by STL native version.
51
+ #
52
+ # @param [String] filepath path to file
53
+ # @param [String] data data for write
54
+ # @return [Integer] length of really written data
55
+ # @since 0.19.0
56
+ #
57
+
58
+ def self.binwrite(filepath, data = "")
59
+ len = nil
60
+ File.open(filepath, "wb") do |io|
61
+ len = io.write(data)
62
+ end
63
+ return len
57
64
  end
58
- return len
65
+
59
66
  end
60
67
  end
61
68
 
@@ -67,8 +74,19 @@ class File
67
74
  # @since 0.11.0
68
75
  #
69
76
 
70
- def self.touch(filepath)
71
- File.open(filepath, "wb").close()
77
+ if not self.respond_to? :touch
78
+ def self.touch(filepath)
79
+ File.open(filepath, "wb").close()
80
+ end
81
+ end
82
+
83
+ ##
84
+ # Alias for #close.
85
+ # @since 2.0.0
86
+ #
87
+
88
+ if not self.__hash_utils_instance_respond_to? :close!
89
+ alias :close! :close
72
90
  end
73
91
 
74
92
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: utf-8
2
- # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
2
+ # (c) 2011-2012 Martin Kozák (martinkozak@martinkozak.net)
3
3
 
4
4
  require "hash-utils/object"
5
5
 
@@ -18,11 +18,13 @@ module Gem
18
18
  # @since 0.17.1
19
19
  #
20
20
 
21
- def self.available?(name)
22
- begin
23
- return Gem::Specification::find_by_name(name.to_s).to_b
24
- rescue Gem::LoadError
25
- return false
21
+ if not self.respond_to? :available?
22
+ def self.available?(name)
23
+ begin
24
+ return Gem::Specification::find_by_name(name.to_s).to_b
25
+ rescue Gem::LoadError
26
+ return false
27
+ end
26
28
  end
27
29
  end
28
30
 
@@ -36,12 +38,14 @@ module Gem
36
38
  # @since 0.17.1
37
39
  #
38
40
 
39
- def self.require_available(name, file = nil)
40
- if self.available? name
41
- require file.nil? ? name : file
42
- true
43
- else
44
- false
41
+ if not self.respond_to? :require_available
42
+ def self.require_available(name, file = nil)
43
+ if self.available? name
44
+ require file.nil? ? name : file
45
+ true
46
+ else
47
+ false
48
+ end
45
49
  end
46
50
  end
47
51
 
@@ -1,6 +1,7 @@
1
1
  # encoding: utf-8
2
- # (c) 2011 Martin Kozák (martinkozak@martinkozak.net)
2
+ # (c) 2011-2012 Martin Kozák (martinkozak@martinkozak.net)
3
3
 
4
+ require "hash-utils/object"
4
5
  require "hash-utils/array"
5
6
 
6
7
  ##
@@ -20,9 +21,11 @@ class Hash
20
21
  # @since 0.3.0
21
22
  #
22
23
 
23
- def self.define(values = { }, default = nil, &block)
24
- hash = self[values]
25
- self::create(default, hash, &block)
24
+ if not self.respond_to? :define
25
+ def self.define(values = { }, default = nil, &block)
26
+ hash = self[values]
27
+ self::create(default, hash, &block)
28
+ end
26
29
  end
27
30
 
28
31
  ##
@@ -35,14 +38,12 @@ class Hash
35
38
  # @since 0.3.0
36
39
  #
37
40
 
38
- def self.create(default = nil, hash = { }, &block)
39
- hash.default = default
40
-
41
- if not block.nil?
42
- hash.default_proc = block
41
+ if not self.respond_to? :create
42
+ def self.create(default = nil, hash = { }, &block)
43
+ hash.default = default
44
+ hash.default_proc = block if not block.nil?
45
+ return hash
43
46
  end
44
-
45
- return hash
46
47
  end
47
48
 
48
49
  ##
@@ -52,9 +53,11 @@ class Hash
52
53
  # @return [Hash] new hash
53
54
  # @since 0.3.0
54
55
  #
55
-
56
- def recreate
57
- self.class::create(self.default, &self.default_proc)
56
+
57
+ if not self.__hash_utils_instance_respond_to? :recreate
58
+ def recreate
59
+ self.class::create(self.default, &self.default_proc)
60
+ end
58
61
  end
59
62
 
60
63
  ##
@@ -65,8 +68,10 @@ class Hash
65
68
  # @since 0.3.0
66
69
  #
67
70
 
68
- def recreate!
69
- self.replace(self.recreate)
71
+ if not self.__hash_utils_instance_respond_to? :recreate!
72
+ def recreate!
73
+ self.replace(self.recreate)
74
+ end
70
75
  end
71
76
 
72
77
  ##
@@ -78,47 +83,26 @@ class Hash
78
83
  # @since 0.3.0
79
84
  #
80
85
 
81
- def remove!(&block)
82
- result = self.recreate
83
- delete = [ ]
84
-
85
- self.each_pair do |k, v|
86
- if block.call(k, v)
87
- result[k] = v
88
- delete << k
86
+ if not self.__hash_utils_instance_respond_to? :remove!
87
+ def remove!(&block)
88
+ result = self.recreate
89
+ delete = [ ]
90
+
91
+ self.each_pair do |k, v|
92
+ if block.call(k, v)
93
+ result[k] = v
94
+ delete << k
95
+ end
89
96
  end
97
+
98
+ delete.each do |k|
99
+ self.delete(k)
100
+ end
101
+
102
+ return result
90
103
  end
91
-
92
- delete.each do |k|
93
- self.delete(k)
94
- end
95
-
96
- return result
97
- end
98
-
99
- ##
100
- # Returns a copy of +self+ with all +nil+ elements removed.
101
- #
102
- # @return [Hash] new hash
103
- # @since 0.1.0
104
- #
105
-
106
- def compact
107
- self.clean()
108
- end
109
-
110
- ##
111
- # Removes +nil+ elements from the hash. Returns +nil+
112
- # if no changes were made, otherwise returns +self+.
113
- #
114
- # @return [Hash] new hash
115
- # @since 0.1.0
116
- #
117
-
118
- def compact!
119
- self.clean!
120
104
  end
121
-
105
+
122
106
  ##
123
107
  # Removes given value from the hash. It's +nil+ by default,
124
108
  # so behaves just as {#compact}.
@@ -144,7 +128,30 @@ class Hash
144
128
  def clean!(value = nil)
145
129
  self.reject! { |k, v| v === value }
146
130
  end
147
-
131
+
132
+ ##
133
+ # Returns a copy of +self+ with all +nil+ elements removed.
134
+ #
135
+ # @return [Hash] new hash
136
+ # @since 0.1.0
137
+ #
138
+
139
+ if not self.__hash_utils_instance_respond_to? :compact
140
+ alias :compact :clean
141
+ end
142
+
143
+ ##
144
+ # Removes +nil+ elements from the hash. Returns +nil+
145
+ # if no changes were made, otherwise returns +self+.
146
+ #
147
+ # @return [Hash] new hash
148
+ # @since 0.1.0
149
+ #
150
+
151
+ if not self.__hash_utils_instance_respond_to? :compact!
152
+ alias :compact! :clean!
153
+ end
154
+
148
155
  ##
149
156
  # Returns a new hash with the results of running block once for
150
157
  # every pair in +self+.
@@ -154,18 +161,22 @@ class Hash
154
161
  # @since 0.1.0
155
162
  #
156
163
 
157
- def map_pairs(&block)
158
- new = self.recreate
159
-
160
- self.each_pair do |k, v|
161
- new_k, new_v = block.call(k, v)
162
- new[new_k] = new_v
164
+ if not self.__hash_utils_instance_respond_to? :map_pairs
165
+ def map_pairs(&block)
166
+ _new = self.recreate
167
+
168
+ self.each_pair do |k, v|
169
+ new_k, new_v = block.call(k, v)
170
+ _new[new_k] = new_v
171
+ end
172
+
173
+ return _new
163
174
  end
164
-
165
- return new
166
175
  end
167
176
 
168
- alias :collect_pairs :map_pairs
177
+ if not self.__hash_utils_instance_respond_to? :collect_pairs
178
+ alias :collect_pairs :map_pairs
179
+ end
169
180
 
170
181
  ##
171
182
  # Emulates {#map_pairs} on place. In fact, replaces old hash by
@@ -176,11 +187,15 @@ class Hash
176
187
  # @since 0.1.0
177
188
  #
178
189
 
179
- def map_pairs!(&block)
180
- self.replace(self.map_pairs(&block))
190
+ if not self.__hash_utils_instance_respond_to? :map_pairs!
191
+ def map_pairs!(&block)
192
+ self.replace(self.map_pairs(&block))
193
+ end
181
194
  end
182
195
 
183
- alias :collect_pairs! :map_pairs!
196
+ if not self.__hash_utils_instance_respond_to? :collect_pairs!
197
+ alias :collect_pairs! :map_pairs!
198
+ end
184
199
 
185
200
  ##
186
201
  # Returns a new hash with the results of running block once for
@@ -191,13 +206,17 @@ class Hash
191
206
  # @since 0.1.0
192
207
  #
193
208
 
194
- def map_keys(&block)
195
- self.map_pairs do |k, v|
196
- [block.call(k), v]
209
+ if not self.__hash_utils_instance_respond_to? :map_keys
210
+ def map_keys(&block)
211
+ self.map_pairs do |k, v|
212
+ [block.call(k), v]
213
+ end
197
214
  end
198
215
  end
199
216
 
200
- alias :collect_keys :map_keys
217
+ if not self.__hash_utils_instance_respond_to? :collect_keys
218
+ alias :collect_keys :map_keys
219
+ end
201
220
 
202
221
  ##
203
222
  # Emulates {#map_keys} on place. In fact, replaces old hash by
@@ -208,11 +227,15 @@ class Hash
208
227
  # @since 0.1.0
209
228
  #
210
229
 
211
- def map_keys!(&block)
212
- self.replace(self.map_keys(&block))
230
+ if not self.__hash_utils_instance_respond_to? :map_keys!
231
+ def map_keys!(&block)
232
+ self.replace(self.map_keys(&block))
233
+ end
213
234
  end
214
235
 
215
- alias :collect_keys! :map_keys!
236
+ if not self.__hash_utils_instance_respond_to? :collect_keys!
237
+ alias :collect_keys! :map_keys!
238
+ end
216
239
 
217
240
  ##
218
241
  # Returns a new hash with the results of running block once for
@@ -223,13 +246,17 @@ class Hash
223
246
  # @since 0.11.0
224
247
  #
225
248
 
226
- def map_values(&block)
227
- self.map_pairs do |k, v|
228
- [k, block.call(v)]
249
+ if not self.__hash_utils_instance_respond_to? :map_values
250
+ def map_values(&block)
251
+ self.map_pairs do |k, v|
252
+ [k, block.call(v)]
253
+ end
229
254
  end
230
255
  end
231
256
 
232
- alias :collect_values :map_values
257
+ if not self.__hash_utils_instance_respond_to? :collect_values
258
+ alias :collect_values :map_values
259
+ end
233
260
 
234
261
  ##
235
262
  # Emulates {#map_values} on place. In fact, replaces old hash by
@@ -240,11 +267,15 @@ class Hash
240
267
  # @since 0.11.0
241
268
  #
242
269
 
243
- def map_values!(&block)
244
- self.replace(self.map_values(&block))
270
+ if not self.__hash_utils_instance_respond_to? :map_values!
271
+ def map_values!(&block)
272
+ self.replace(self.map_values(&block))
273
+ end
245
274
  end
246
275
 
247
- alias :collect_values! :map_values!
276
+ if not self.__hash_utils_instance_respond_to? :collect_values!
277
+ alias :collect_values! :map_values!
278
+ end
248
279
 
249
280
  ##
250
281
  # Converts all keys to symbols. Since version +0.14.1+ converts
@@ -254,17 +285,21 @@ class Hash
254
285
  # @since 0.1.0
255
286
  #
256
287
 
257
- def keys_to_sym
258
- self.map_keys do |k|
259
- if k.kind_of? String
260
- k.to_sym
261
- else
262
- k
288
+ if not self.__hash_utils_instance_respond_to? :keys_to_sym
289
+ def keys_to_sym
290
+ self.map_keys do |k|
291
+ if k.kind_of? String
292
+ k.to_sym
293
+ else
294
+ k
295
+ end
263
296
  end
264
297
  end
265
298
  end
266
299
 
267
- alias :symbolize_keys :keys_to_sym
300
+ if not self.__hash_utils_instance_respond_to? :symbolize_keys
301
+ alias :symbolize_keys :keys_to_sym
302
+ end
268
303
 
269
304
  ##
270
305
  # Emulates {#keys_to_sym} on place. In fact, replaces old hash by
@@ -274,48 +309,15 @@ class Hash
274
309
  # @since 0.1.0
275
310
  #
276
311
 
277
- def keys_to_sym!
278
- self.replace(self.keys_to_sym)
312
+ if not self.__hash_utils_instance_respond_to? :keys_to_sym!
313
+ def keys_to_sym!
314
+ self.replace(self.keys_to_sym)
315
+ end
279
316
  end
280
317
 
281
- alias :"symbolize_keys!" :"keys_to_sym!"
282
-
283
- ##
284
- # Checks, all elements values follow condition expressed in block.
285
- # Block must return boolean.
286
- #
287
- # If it's empty, returns +true+.
288
- #
289
- # @param [Proc] block checking block
290
- # @return [Boolean] +true+ if yes, +false+ in otherwise
291
- # @note This method is currently in conflict with Ruby 1.9.2
292
- # +Hash#all?+ method. Given block arity is checked, so code should
293
- # be compatible for now, but this method will be probably moved
294
- # around +0.13.0+ for performance reasons of sure to deprecated
295
- # module.
296
- # @deprecated (since 0.10.0, conflict with built-in method)
297
- # @since 0.2.0
298
- #
299
- #
300
- # REMOVED SINCE 0.15.0
301
- #
302
- # def all?(&block)
303
- # if block.arity == 2
304
- # self.all_pairs? &block
305
- # end
306
- #
307
- # if self.empty? or block.nil?
308
- # return true
309
- # end
310
- #
311
- # self.each_value do |v|
312
- # if block.call(v) == false
313
- # return false
314
- # end
315
- # end
316
- #
317
- # return true
318
- # end
318
+ if not self.__hash_utils_instance_respond_to? :symbolize_keys!
319
+ alias :symbolize_keys! :keys_to_sym!
320
+ end
319
321
 
320
322
  ##
321
323
  # Checks, all elements follow condition expressed in block.
@@ -329,19 +331,19 @@ class Hash
329
331
  # Ruby built-in +#all?+.
330
332
  # @since 0.2.0
331
333
  #
332
-
333
- def all_pairs?(&block)
334
- if self.empty?
335
- return true
336
- end
337
-
338
- self.each_pair do |k, v|
339
- if block.call(k, v) == false
340
- return false
334
+
335
+ if not self.__hash_utils_instance_respond_to? :all_pairs?
336
+ def all_pairs?(&block)
337
+ return true if self.empty?
338
+
339
+ self.each_pair do |k, v|
340
+ if block.call(k, v) == false
341
+ return false
342
+ end
341
343
  end
344
+
345
+ return true
342
346
  end
343
-
344
- return true
345
347
  end
346
348
 
347
349
  ##
@@ -352,10 +354,12 @@ class Hash
352
354
  # @return [Boolean] +true+ if yes, +false+ in otherwise
353
355
  # @since 0.2.0
354
356
  #
355
-
356
- def some?(&block)
357
- self.one? do |pair|
358
- block.call(pair[1])
357
+
358
+ if not self.__hash_utils_instance_respond_to? :some?
359
+ def some?(&block)
360
+ self.one? do |pair|
361
+ block.call(pair[1])
362
+ end
359
363
  end
360
364
  end
361
365
 
@@ -368,7 +372,9 @@ class Hash
368
372
  # @since 0.2.0
369
373
  #
370
374
 
371
- alias :some_pairs? :one?
375
+ if not self.__hash_utils_instance_respond_to? :some_pairs?
376
+ alias :some_pairs? :one?
377
+ end
372
378
 
373
379
  ##
374
380
  # Compatibility method with {Array#to_h}. Returns itself.
@@ -377,8 +383,10 @@ class Hash
377
383
  # @since 0.4.0
378
384
  #
379
385
 
380
- def to_h(mode = nil)
381
- self
386
+ if not self.__hash_utils_instance_respond_to? :to_h
387
+ def to_h(mode = nil)
388
+ self
389
+ end
382
390
  end
383
391
 
384
392
  ##
@@ -389,8 +397,10 @@ class Hash
389
397
  # @since 0.5.0
390
398
  #
391
399
 
392
- def sort!(&block)
393
- self.replace(Hash[self.sort(&block)])
400
+ if not self.__hash_utils_instance_respond_to? :sort!
401
+ def sort!(&block)
402
+ self.replace(Hash[self.sort(&block)])
403
+ end
394
404
  end
395
405
 
396
406
  ##
@@ -406,11 +416,13 @@ class Hash
406
416
  # @since 0.5.0
407
417
  #
408
418
 
409
- def ksort(&block)
410
- if block.nil?
411
- block = Proc::new { |a, b| a <=> b }
419
+ if not self.__hash_utils_instance_respond_to? :ksort
420
+ def ksort(&block)
421
+ if block.nil?
422
+ block = Proc::new { |a, b| a <=> b }
423
+ end
424
+ Hash[self.sort { |a, b| block.call(a[0], b[0]) }]
412
425
  end
413
- Hash[self.sort { |a, b| block.call(a[0], b[0]) }]
414
426
  end
415
427
 
416
428
  ##
@@ -422,10 +434,12 @@ class Hash
422
434
  # @since 0.5.0
423
435
  #
424
436
 
425
- def ksort!(&block)
426
- self.replace(self.ksort(&block))
437
+ if not self.__hash_utils_instance_respond_to? :ksort!
438
+ def ksort!(&block)
439
+ self.replace(self.ksort(&block))
440
+ end
427
441
  end
428
-
442
+
429
443
  ##
430
444
  # Sorts hash according to values. Keeps key associations.
431
445
  # It's equivalent of PHP asort().
@@ -440,11 +454,13 @@ class Hash
440
454
  # @since 0.5.0
441
455
  #
442
456
 
443
- def asort(&block)
444
- if block.nil?
445
- block = Proc::new { |a, b| a <=> b }
457
+ if not self.__hash_utils_instance_respond_to? :asort
458
+ def asort(&block)
459
+ if block.nil?
460
+ block = Proc::new { |a, b| a <=> b }
461
+ end
462
+ Hash[self.sort { |a, b| block.call(a[1], b[1]) }]
446
463
  end
447
- Hash[self.sort { |a, b| block.call(a[1], b[1]) }]
448
464
  end
449
465
 
450
466
  ##
@@ -456,8 +472,10 @@ class Hash
456
472
  # @since 0.5.0
457
473
  #
458
474
 
459
- def asort!(&block)
460
- self.replace(self.asort(&block))
475
+ if not self.__hash_utils_instance_respond_to? :asort!
476
+ def asort!(&block)
477
+ self.replace(self.asort(&block))
478
+ end
461
479
  end
462
480
 
463
481
  ##
@@ -470,8 +488,10 @@ class Hash
470
488
  # @since 0.5.0
471
489
  #
472
490
 
473
- def reverse
474
- Hash[self.to_a.reverse]
491
+ if not self.__hash_utils_instance_respond_to? :reverse
492
+ def reverse
493
+ Hash[self.to_a.reverse]
494
+ end
475
495
  end
476
496
 
477
497
  ##
@@ -481,8 +501,10 @@ class Hash
481
501
  # @since 0.5.0
482
502
  #
483
503
 
484
- def reverse!
485
- self.replace(self.reverse)
504
+ if not self.__hash_utils_instance_respond_to? :reverse!
505
+ def reverse!
506
+ self.replace(self.reverse)
507
+ end
486
508
  end
487
509
 
488
510
  ##
@@ -493,17 +515,21 @@ class Hash
493
515
  # @since 0.9.0
494
516
  #
495
517
 
496
- def has_all?(keys)
497
- keys.each do |key|
498
- if not self.has_key? key
499
- return false
518
+ if not self.__hash_utils_instance_respond_to? :has_all?
519
+ def has_all?(keys)
520
+ keys.each do |key|
521
+ if not self.has_key? key
522
+ return false
523
+ end
500
524
  end
525
+
526
+ return true
501
527
  end
502
-
503
- return true
504
528
  end
505
529
 
506
- alias :has_keys? :has_all?
530
+ if not self.__hash_utils_instance_respond_to? :has_keys?
531
+ alias :has_keys? :has_all?
532
+ end
507
533
 
508
534
  ##
509
535
  # Indicates, some of the keys are available in Hash.
@@ -513,14 +539,16 @@ class Hash
513
539
  # @since 0.9.0
514
540
  #
515
541
 
516
- def has_some?(keys)
517
- keys.each do |key|
518
- if self.has_key? key
519
- return true
542
+ if not self.__hash_utils_instance_respond_to? :has_some?
543
+ def has_some?(keys)
544
+ keys.each do |key|
545
+ if self.has_key? key
546
+ return true
547
+ end
520
548
  end
549
+
550
+ return false
521
551
  end
522
-
523
- return false
524
552
  end
525
553
 
526
554
  ##
@@ -539,13 +567,15 @@ class Hash
539
567
  # @since 0.10.0
540
568
  #
541
569
 
542
- def self.combine(keys, values)
543
- result = { }
544
- keys.each_index do |i|
545
- result[keys[i]] = values[i]
570
+ if not self.respond_to? :combine
571
+ def self.combine(keys, values)
572
+ result = { }
573
+ keys.each_index do |i|
574
+ result[keys[i]] = values[i]
575
+ end
576
+
577
+ return result
546
578
  end
547
-
548
- return result
549
579
  end
550
580
 
551
581
  ##
@@ -557,21 +587,23 @@ class Hash
557
587
  # @since 0.12.0
558
588
  #
559
589
 
560
- def deep_merge!(*args)
561
- fm = args.map { |hash| [self, hash] }
562
-
563
- while not fm.empty?
564
- _in, _out = fm.shift
565
- _out.each_pair do |k, v|
566
- if v.kind_of? Hash
567
- fm << [_in[k], _out[k]]
568
- else
569
- _in[k] = v
590
+ if not self.__hash_utils_instance_respond_to? :deep_merge!
591
+ def deep_merge!(*args)
592
+ fm = args.map { |hash| [self, hash] }
593
+
594
+ while not fm.empty?
595
+ _in, _out = fm.shift
596
+ _out.each_pair do |k, v|
597
+ if v.kind_of? Hash
598
+ fm << [_in[k], _out[k]]
599
+ else
600
+ _in[k] = v
601
+ end
570
602
  end
571
603
  end
604
+
605
+ return self
572
606
  end
573
-
574
- return self
575
607
  end
576
608
 
577
609
  ##
@@ -584,25 +616,27 @@ class Hash
584
616
  # @since 0.12.0
585
617
  #
586
618
 
587
- def deep_merge(*args)
588
- result = self.dup
589
- fm = args.map { |hash| [result, hash] }
590
-
591
- while not fm.empty?
592
- _in, _out = fm.shift
593
- _out.each_pair do |k, v|
594
- if _in[k].kind_of? Hash
595
- _in[k] = _in[k].dup
596
- fm << [_in[k], _out[k]]
597
- else
598
- _in[k] = v
619
+ if not self.__hash_utils_instance_respond_to? :deep_merge
620
+ def deep_merge(*args)
621
+ result = self.dup
622
+ fm = args.map { |hash| [result, hash] }
623
+
624
+ while not fm.empty?
625
+ _in, _out = fm.shift
626
+ _out.each_pair do |k, v|
627
+ if _in[k].kind_of? Hash
628
+ _in[k] = _in[k].dup
629
+ fm << [_in[k], _out[k]]
630
+ else
631
+ _in[k] = v
632
+ end
599
633
  end
600
634
  end
635
+
636
+ return result
601
637
  end
602
-
603
- return result
604
638
  end
605
-
639
+
606
640
  ##
607
641
  # Iterates through items with given key only. None-existing values
608
642
  # are ignored.
@@ -612,10 +646,12 @@ class Hash
612
646
  # @since 0.15.0
613
647
  #
614
648
 
615
- def get_pairs(*args)
616
- self.take_pairs(*args) do |i|
617
- if not i.second.nil?
618
- yield i
649
+ if not self.__hash_utils_instance_respond_to? :get_pairs
650
+ def get_pairs(*args)
651
+ self.take_pairs(*args) do |i|
652
+ if not i[1].nil?
653
+ yield i
654
+ end
619
655
  end
620
656
  end
621
657
  end
@@ -634,13 +670,15 @@ class Hash
634
670
  # @since 0.15.0
635
671
  #
636
672
 
637
- def get_items(*args)
638
- result = { }
639
- self.get_pairs(*args) do |key, value|
640
- result[key] = value
673
+ if not self.__hash_utils_instance_respond_to? :get_items
674
+ def get_items(*args)
675
+ result = { }
676
+ self.get_pairs(*args) do |key, value|
677
+ result[key] = value
678
+ end
679
+
680
+ return result
641
681
  end
642
-
643
- return result
644
682
  end
645
683
 
646
684
  ##
@@ -654,14 +692,16 @@ class Hash
654
692
  # @return [Array] array of values
655
693
  # @since 0.15.0
656
694
  #
657
-
658
- def get_values(*args)
659
- result = [ ]
660
- self.get_pairs(*args) do |key, value|
661
- result << value
695
+
696
+ if not self.__hash_utils_instance_respond_to? :get_values
697
+ def get_values(*args)
698
+ result = [ ]
699
+ self.get_pairs(*args) do |key, value|
700
+ result << value
701
+ end
702
+
703
+ return result
662
704
  end
663
-
664
- return result
665
705
  end
666
706
 
667
707
  ##
@@ -673,9 +713,11 @@ class Hash
673
713
  # @since 0.15.0
674
714
  #
675
715
 
676
- def take_pairs(*args)
677
- args.each do |i|
678
- yield [i, self[i]]
716
+ if not self.__hash_utils_instance_respond_to? :take_pairs
717
+ def take_pairs(*args)
718
+ args.each do |i|
719
+ yield [i, self[i]]
720
+ end
679
721
  end
680
722
  end
681
723
 
@@ -692,14 +734,16 @@ class Hash
692
734
  # @return [Hash] new hash
693
735
  # @since 0.15.0
694
736
  #
695
-
696
- def take_items(*args)
697
- result = { }
698
- self.take_pairs(*args) do |key, value|
699
- result[key] = value
737
+
738
+ if not self.__hash_utils_instance_respond_to? :take_items
739
+ def take_items(*args)
740
+ result = { }
741
+ self.take_pairs(*args) do |key, value|
742
+ result[key] = value
743
+ end
744
+
745
+ return result
700
746
  end
701
-
702
- return result
703
747
  end
704
748
 
705
749
  ##
@@ -714,14 +758,16 @@ class Hash
714
758
  # @return [Array] array of values
715
759
  # @since 0.15.0
716
760
  #
717
-
718
- def take_values(*args)
719
- result = [ ]
720
- self.take_pairs(*args) do |key, value|
721
- result << value
761
+
762
+ if not self.__hash_utils_instance_respond_to? :take_values
763
+ def take_values(*args)
764
+ result = [ ]
765
+ self.take_pairs(*args) do |key, value|
766
+ result << value
767
+ end
768
+
769
+ return result
722
770
  end
723
-
724
- return result
725
771
  end
726
772
 
727
773
  ##
@@ -739,8 +785,10 @@ class Hash
739
785
  # @since 0.16.0
740
786
  #
741
787
 
742
- def sum
743
- self.values.sum
788
+ if not self.__hash_utils_instance_respond_to? :sum
789
+ def sum
790
+ self.values.sum
791
+ end
744
792
  end
745
793
 
746
794
  ##
@@ -755,32 +803,26 @@ class Hash
755
803
  # @since 0.16.0
756
804
  #
757
805
 
758
- def avg
759
- self.values.avg
806
+ if not self.__hash_utils_instance_respond_to? :avg
807
+ def avg
808
+ self.values.avg
809
+ end
760
810
  end
761
811
 
762
- alias :average :avg
763
-
764
- ##
765
- # Indicates, object is +Array+.
766
- #
767
- # @return [Boolean] +true+ if yes, +false+ in otherwise
768
- # @since 0.17.0
769
- #
770
-
771
- def array?
772
- self.kind_of? Array
812
+ if not self.__hash_utils_instance_respond_to? :average
813
+ alias :average :avg
773
814
  end
774
-
815
+
775
816
  ##
776
817
  # Indicates, object is +Hash+.
777
818
  #
778
819
  # @return [Boolean] +true+ if yes, +false+ in otherwise
779
820
  # @since 0.17.0
780
821
  #
781
-
782
- def hash?
783
- true
822
+ if not self.__hash_utils_instance_respond_to? :hash?
823
+ def hash?
824
+ true
825
+ end
784
826
  end
785
827
 
786
828
  end