nutella 0.1.1 → 0.2
Sign up to get free protection for your applications and to get access to all the features.
- data/Rakefile +1 -0
- data/lib/nutella/core_ext/hash.rb +42 -0
- data/lib/nutella/version.rb +1 -1
- data/spec/nutella/core_ext/hash_spec.rb +49 -0
- metadata +6 -3
data/Rakefile
CHANGED
@@ -0,0 +1,42 @@
|
|
1
|
+
class Hash
|
2
|
+
# Grab the given keys out of a hash.
|
3
|
+
#
|
4
|
+
# @example Selects two keys out of a hash
|
5
|
+
# { a: 1, b: 2, c: 3, d: 4 }.slice :a, :c # => { a: 1, c: 3 }
|
6
|
+
#
|
7
|
+
# @example Limits an options hash to valid keys before passing to a method
|
8
|
+
# def search(criteria = {})
|
9
|
+
# criteria.assert_valid_keys(:mass, :velocity, :time)
|
10
|
+
# end
|
11
|
+
#
|
12
|
+
# search(options.slice(:mass, :velocity, :time))def slice(*keys)
|
13
|
+
#
|
14
|
+
# @example Splats an array of keys before passing to the #search method above
|
15
|
+
# valid_keys = [:mass, :velocity, :time]
|
16
|
+
# search(options.slice(*valid_keys))
|
17
|
+
#
|
18
|
+
# @param [*Object] keys the keys to slice out of the hash
|
19
|
+
# @return [Hash] the key/value pairs that exist in *keys
|
20
|
+
def slice(*keys)
|
21
|
+
select { |k, v| keys.include? k }
|
22
|
+
end
|
23
|
+
alias_method :grab, :slice
|
24
|
+
|
25
|
+
# Acts on the hash as described in Hash#slice, but modifies the hash in
|
26
|
+
# place.
|
27
|
+
#
|
28
|
+
# @example Demonstrates the action and its return value
|
29
|
+
# test = { a: 1, b: 2, c: 3, d: 4 }
|
30
|
+
# test.slice! :a, :c # => { b: 2, d: 4 }
|
31
|
+
# test # => { a: 1, c: 3 }
|
32
|
+
#
|
33
|
+
# @param [*Object] keys the keys to slice out of the hash
|
34
|
+
# @return [Hash] the removed key/value pairs
|
35
|
+
def slice!(*keys)
|
36
|
+
replace((original = self.dup).slice *keys)
|
37
|
+
original.reject { |k, v| keys.include? k }
|
38
|
+
end
|
39
|
+
# #grab! doesn't sound quite semantically correct, but keeping it for the
|
40
|
+
# sake of being consistent with #slice/#grab.
|
41
|
+
alias_method :grab!, :slice!
|
42
|
+
end
|
data/lib/nutella/version.rb
CHANGED
@@ -0,0 +1,49 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "nutella/core_ext/hash"
|
3
|
+
|
4
|
+
describe Hash do
|
5
|
+
describe "aliases" do
|
6
|
+
test_alias Hash, :slice, :grab
|
7
|
+
test_alias Hash, :slice!, :grab!
|
8
|
+
end
|
9
|
+
|
10
|
+
describe "#grab" do
|
11
|
+
hash = {}
|
12
|
+
|
13
|
+
before { hash = { a: 1, b: 2, c: 3, d: 4 } }
|
14
|
+
|
15
|
+
it "should select the given items from a hash" do
|
16
|
+
hash.slice(:a, :c).should == { a: 1, c: 3 }
|
17
|
+
end
|
18
|
+
|
19
|
+
it "should skip items that do not exist in the hash" do
|
20
|
+
hash.slice(:a, :d, :f).should == { a: 1, d: 4 }
|
21
|
+
end
|
22
|
+
|
23
|
+
it "should not modify in place" do
|
24
|
+
start = hash
|
25
|
+
hash.slice :a, :b
|
26
|
+
hash.should == start
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
describe "#grab!" do
|
31
|
+
hash = {}
|
32
|
+
|
33
|
+
before { hash = { a: 1, b: 2, c: 3, d: 4 } }
|
34
|
+
|
35
|
+
it "should modify in place" do
|
36
|
+
hash.slice! :a, :c
|
37
|
+
hash.should == { a: 1, c: 3 }
|
38
|
+
end
|
39
|
+
|
40
|
+
it "should return the removed pairs" do
|
41
|
+
hash.slice!(:a, :c).should == { b: 2, d: 4 }
|
42
|
+
end
|
43
|
+
|
44
|
+
it "should ignore pairs that did not affect the hash" do
|
45
|
+
hash.slice!(:a, :c, :g).should == { b: 2, d: 4 }
|
46
|
+
hash.should == { a: 1, c: 3 }
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nutella
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.2'
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-
|
12
|
+
date: 2012-09-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rake
|
@@ -100,8 +100,10 @@ files:
|
|
100
100
|
- lib/nutella.rb
|
101
101
|
- lib/nutella/version.rb
|
102
102
|
- lib/nutella/core_ext/string.rb
|
103
|
+
- lib/nutella/core_ext/hash.rb
|
103
104
|
- lib/nutella/core_ext/enumerable.rb
|
104
105
|
- lib/nutella/core_ext.rb
|
106
|
+
- spec/nutella/core_ext/hash_spec.rb
|
105
107
|
- spec/nutella/core_ext/enumerable_spec.rb
|
106
108
|
- spec/nutella/core_ext/string_spec.rb
|
107
109
|
- spec/spec_helper.rb
|
@@ -131,7 +133,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
131
133
|
version: '0'
|
132
134
|
segments:
|
133
135
|
- 0
|
134
|
-
hash:
|
136
|
+
hash: 1979489363505298404
|
135
137
|
requirements: []
|
136
138
|
rubyforge_project:
|
137
139
|
rubygems_version: 1.8.24
|
@@ -139,6 +141,7 @@ signing_key:
|
|
139
141
|
specification_version: 3
|
140
142
|
summary: Spread some Nutella on Ruby to sweeten up its functionality.
|
141
143
|
test_files:
|
144
|
+
- spec/nutella/core_ext/hash_spec.rb
|
142
145
|
- spec/nutella/core_ext/enumerable_spec.rb
|
143
146
|
- spec/nutella/core_ext/string_spec.rb
|
144
147
|
- spec/spec_helper.rb
|