hash_extend 1.1.3 → 1.2.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/README.md +73 -6
- data/lib/hash_extend.rb +21 -38
- data/lib/hash_extend/version.rb +1 -1
- metadata +39 -21
data/README.md
CHANGED
@@ -22,7 +22,11 @@ Or install it yourself as:
|
|
22
22
|
|
23
23
|
## Usage
|
24
24
|
|
25
|
-
### stealth_delete
|
25
|
+
### stealth_delete -- Deprecated -> Use except
|
26
|
+
|
27
|
+
method 'stealth_delete' is deprecated and will be deleted in version 2.4 - Use 'except' to fit Rails's ActiveSupport
|
28
|
+
|
29
|
+
--
|
26
30
|
|
27
31
|
Delete key(s) passed by, but return the hash instead of the deleted value
|
28
32
|
|
@@ -143,6 +147,31 @@ Code
|
|
143
147
|
end
|
144
148
|
```
|
145
149
|
|
150
|
+
--
|
151
|
+
|
152
|
+
FYI : ActiveSupport provide method 'slice'.
|
153
|
+
|
154
|
+
```ruby
|
155
|
+
h = Hash[:one, 1, :two, 2, :three, 3] #=> {:one=>1, :two=>2, :three=>3}
|
156
|
+
h.slice(:one, :three) #=> {:three=>3, :one=>1}
|
157
|
+
h #=> {:one=>1, :two=>2, :three=>3}
|
158
|
+
|
159
|
+
h.slice(:six) #=> {}
|
160
|
+
```
|
161
|
+
|
162
|
+
WARNING : slice! has not the same behavior. Check out ActiveSupport guides for more information : http://guides.rubyonrails.org/active_support_core_extensions.html
|
163
|
+
|
164
|
+
--
|
165
|
+
|
166
|
+
FYI : Rails 3's ActiveSupport provide method 'extract!'. (this gem provide method 'extract!' for Rails < 3)
|
167
|
+
|
168
|
+
```ruby
|
169
|
+
h = Hash[:one, 1, :two, 2, :three, 3] #=> {:one=>1, :two=>2, :three=>3}
|
170
|
+
h.extract!(:one, :three) #=> {:one=>1, :three=>3}
|
171
|
+
h #=> {:two=>2}
|
172
|
+
|
173
|
+
h.extract!(:six) #=> {:six=>nil}
|
174
|
+
```
|
146
175
|
|
147
176
|
### insert
|
148
177
|
|
@@ -230,13 +259,19 @@ Code
|
|
230
259
|
```
|
231
260
|
|
232
261
|
|
233
|
-
### select_by
|
262
|
+
### select_by -- Deprecated -> Use except
|
263
|
+
|
264
|
+
method 'select_by' is deprecated and will be deleted in version 2.4 - Use 'slice' to fit Rails's ActiveSupport
|
265
|
+
|
266
|
+
method 'select_by!' is deprecated and will be deleted in version 2.4 - Use 'extract!' to fit Rails's ActiveSupport
|
267
|
+
|
268
|
+
--
|
234
269
|
|
235
270
|
Select into hash from a collection of keys. Usefull to select correct params after a form.
|
236
271
|
|
237
272
|
```ruby
|
238
|
-
select_by! *
|
239
|
-
select_by *
|
273
|
+
select_by! *keys
|
274
|
+
select_by *keys
|
240
275
|
```
|
241
276
|
|
242
277
|
Demo
|
@@ -255,8 +290,40 @@ Demo
|
|
255
290
|
Code
|
256
291
|
|
257
292
|
```ruby
|
258
|
-
def select_by! *
|
259
|
-
self.delete_if{ |field, _| !
|
293
|
+
def select_by! *keys
|
294
|
+
self.delete_if{ |field, _| !keys.include? field.to_sym }
|
295
|
+
end
|
296
|
+
```
|
297
|
+
|
298
|
+
### extract -- Only for Rails < 3
|
299
|
+
|
300
|
+
Select into hash from a collection of keys
|
301
|
+
|
302
|
+
```ruby
|
303
|
+
extract! *keys
|
304
|
+
```
|
305
|
+
|
306
|
+
Demo
|
307
|
+
|
308
|
+
```ruby
|
309
|
+
h = Hash[:one, 1, :two, 2, :three, 3] #=> {:two=>2, :three=>3, :one=>1}
|
310
|
+
h.extract! :one, :three #=> {:one=>1, :three=>3}
|
311
|
+
h #=> {:two=>2}
|
312
|
+
|
313
|
+
{:one=>1, :two=>2, :three=>3, :four=>4}.extract! :one, :six
|
314
|
+
#=> {:one=>1, :six=>nil}
|
315
|
+
|
316
|
+
{:one=>1, :two=>2, :three=>3, :four=>4}.extract! :six, :seven
|
317
|
+
#=> {:six=>nil, :seven=>nil}
|
318
|
+
```
|
319
|
+
|
320
|
+
Code
|
321
|
+
|
322
|
+
```ruby
|
323
|
+
def extract! *keys
|
324
|
+
hash = {}
|
325
|
+
keys.each {|key| hash[key] = delete(key) }
|
326
|
+
hash
|
260
327
|
end
|
261
328
|
```
|
262
329
|
|
data/lib/hash_extend.rb
CHANGED
@@ -1,49 +1,19 @@
|
|
1
1
|
require "hash_extend/version"
|
2
2
|
|
3
3
|
class Hash
|
4
|
-
|
5
|
-
|
6
|
-
unless method_defined? :except!
|
7
|
-
|
8
|
-
def except! *keys
|
9
|
-
|
10
|
-
p "is personnal methods"
|
11
|
-
|
12
|
-
keys.each do |key|
|
13
|
-
delete key
|
14
|
-
end
|
15
|
-
return self
|
16
|
-
end
|
17
|
-
|
18
|
-
end
|
19
|
-
|
20
|
-
unless method_defined? :youpi
|
21
|
-
|
22
|
-
def youpi
|
23
|
-
|
24
|
-
p "youpi"
|
25
|
-
|
26
|
-
end
|
27
|
-
|
28
|
-
end
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
4
|
# delete key(s) but return self instead of deleted value
|
35
5
|
def stealth_delete! *keys
|
36
|
-
|
6
|
+
warn "WARNING : method 'stealth_delete!' is deprecated and will be deleted in version X.Y - Use 'except!' to fit Rails' ActiveSupport"
|
37
7
|
except! keys
|
38
|
-
warn "WARNING : 'stealth_delete!' is deprecated and will be deleted in version X.Y - Use 'extract!' to fit Rails 3's ActiveSupport"
|
39
8
|
end
|
40
9
|
|
41
10
|
def stealth_delete *keys
|
42
|
-
|
43
|
-
except
|
44
|
-
warn "WARNING : method 'stealth_delete' is deprecated and will be deleted in version X.Y - Use 'extract' to fit Rails 3's ActiveSupport"
|
11
|
+
warn "WARNING : method 'stealth_delete' is deprecated and will be deleted in version X.Y - Use 'except' to fit Rails' ActiveSupport"
|
12
|
+
except keys
|
45
13
|
end
|
46
14
|
|
15
|
+
|
16
|
+
|
47
17
|
# modify values from hash through block
|
48
18
|
def map_values!
|
49
19
|
self.each do |key, value|
|
@@ -105,13 +75,26 @@ class Hash
|
|
105
75
|
end
|
106
76
|
|
107
77
|
# something like #keep_if, but instead of block, pass collection of keys to select
|
108
|
-
def select_by! *
|
109
|
-
|
78
|
+
def select_by! *keys
|
79
|
+
warn "WARNING : method 'select_by!' is deprecated and will be deleted in version 1.3 - Use 'extract!' to fit Rails's ActiveSupport"
|
80
|
+
self.delete_if{ |field, _| !keys.include? field.to_sym }
|
110
81
|
end
|
111
82
|
|
83
|
+
def select_by *keys
|
84
|
+
warn "WARNING : method 'select_by' is deprecated and will be deleted in version 1.3 - Use 'slice' to fit Rails's ActiveSupport"
|
85
|
+
slice *keys
|
86
|
+
end
|
87
|
+
|
88
|
+
unless method_defined? :extract!
|
89
|
+
def extract! *keys
|
90
|
+
hash = {}
|
91
|
+
keys.each {|key| hash[key] = delete(key) }
|
92
|
+
hash
|
93
|
+
end
|
94
|
+
end
|
112
95
|
|
113
96
|
# duplicate method without self modification
|
114
|
-
[:
|
97
|
+
[:map_values, :compact].each do |method_name|
|
115
98
|
|
116
99
|
unless method_defined? method_name
|
117
100
|
|
data/lib/hash_extend/version.rb
CHANGED
metadata
CHANGED
@@ -1,23 +1,33 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: hash_extend
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
hash: 31
|
5
5
|
prerelease:
|
6
|
+
segments:
|
7
|
+
- 1
|
8
|
+
- 2
|
9
|
+
- 0
|
10
|
+
version: 1.2.0
|
6
11
|
platform: ruby
|
7
|
-
authors:
|
12
|
+
authors:
|
8
13
|
- Thomas Petrachi
|
9
14
|
autorequire:
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
|
-
|
17
|
+
|
18
|
+
date: 2012-12-01 00:00:00 Z
|
13
19
|
dependencies: []
|
20
|
+
|
14
21
|
description: Extend ruby Hash. No override.
|
15
|
-
email:
|
22
|
+
email:
|
16
23
|
- thomas.petrachi@vodeclic.com
|
17
24
|
executables: []
|
25
|
+
|
18
26
|
extensions: []
|
27
|
+
|
19
28
|
extra_rdoc_files: []
|
20
|
-
|
29
|
+
|
30
|
+
files:
|
21
31
|
- .gitignore
|
22
32
|
- Gemfile
|
23
33
|
- Gemfile.lock
|
@@ -30,28 +40,36 @@ files:
|
|
30
40
|
- spec/lib/hash_extend_spec.rb
|
31
41
|
homepage: https://github.com/petrachi/hash_extend
|
32
42
|
licenses: []
|
43
|
+
|
33
44
|
post_install_message:
|
34
45
|
rdoc_options: []
|
35
|
-
|
46
|
+
|
47
|
+
require_paths:
|
36
48
|
- lib
|
37
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
38
50
|
none: false
|
39
|
-
requirements:
|
40
|
-
- -
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
|
43
|
-
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
hash: 3
|
55
|
+
segments:
|
56
|
+
- 0
|
57
|
+
version: "0"
|
58
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
44
59
|
none: false
|
45
|
-
requirements:
|
46
|
-
- -
|
47
|
-
- !ruby/object:Gem::Version
|
48
|
-
|
60
|
+
requirements:
|
61
|
+
- - ">="
|
62
|
+
- !ruby/object:Gem::Version
|
63
|
+
hash: 3
|
64
|
+
segments:
|
65
|
+
- 0
|
66
|
+
version: "0"
|
49
67
|
requirements: []
|
68
|
+
|
50
69
|
rubyforge_project:
|
51
70
|
rubygems_version: 1.8.24
|
52
71
|
signing_key:
|
53
72
|
specification_version: 3
|
54
|
-
summary: Adding methods %w{stealth_delete map_values map_keys delete_many insert compact
|
55
|
-
|
56
|
-
test_files:
|
73
|
+
summary: Adding methods %w{stealth_delete map_values map_keys delete_many insert compact select_by}
|
74
|
+
test_files:
|
57
75
|
- spec/lib/hash_extend_spec.rb
|