buff-extensions 0.1.0 → 0.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/lib/buff/extensions/hash/dotted_paths.rb +5 -3
- data/lib/buff/extensions/hash/key_transforms.rb +5 -1
- data/lib/buff/extensions/hash/reverse_merge.rb +5 -1
- data/lib/buff/extensions/hash/slice.rb +50 -0
- data/lib/buff/extensions/hash.rb +1 -6
- data/lib/buff/extensions/version.rb +1 -1
- data/spec/buff/extensions/hash/dotted_paths_spec.rb +1 -1
- metadata +3 -2
|
@@ -1,7 +1,5 @@
|
|
|
1
|
-
require 'buff/extensions/object'
|
|
2
|
-
|
|
3
1
|
module Buff
|
|
4
|
-
module Extensions
|
|
2
|
+
module Extensions::Hash
|
|
5
3
|
module DottedPaths
|
|
6
4
|
class << self
|
|
7
5
|
def included(base)
|
|
@@ -122,3 +120,7 @@ module Buff
|
|
|
122
120
|
end
|
|
123
121
|
end
|
|
124
122
|
end
|
|
123
|
+
|
|
124
|
+
class Hash
|
|
125
|
+
include Buff::Extensions::Hash::DottedPaths
|
|
126
|
+
end
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
module Buff
|
|
2
|
-
module Extensions
|
|
2
|
+
module Extensions::Hash
|
|
3
3
|
# Borrowd and modified from
|
|
4
4
|
# {https://raw.github.com/rails/rails/master/activesupport/lib/active_support/core_ext/hash/keys.rb}
|
|
5
5
|
module KeyTransforms
|
|
@@ -142,3 +142,7 @@ module Buff
|
|
|
142
142
|
end
|
|
143
143
|
end
|
|
144
144
|
end
|
|
145
|
+
|
|
146
|
+
class Hash
|
|
147
|
+
include Buff::Extensions::Hash::KeyTransforms
|
|
148
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
module Buff
|
|
2
|
+
module Extensions::Hash
|
|
3
|
+
# Borrowd and modified from
|
|
4
|
+
# {https://github.com/rails/rails/blob/master/activesupport/lib/active_support/core_ext/hash/slice.rb}
|
|
5
|
+
module Slice
|
|
6
|
+
# Slice a hash to include only the given keys. This is useful for
|
|
7
|
+
# limiting an options hash to valid keys before passing to a method:
|
|
8
|
+
#
|
|
9
|
+
# def search(criteria = {})
|
|
10
|
+
# criteria.assert_valid_keys(:mass, :velocity, :time)
|
|
11
|
+
# end
|
|
12
|
+
#
|
|
13
|
+
# search(options.slice(:mass, :velocity, :time))
|
|
14
|
+
#
|
|
15
|
+
# If you have an array of keys you want to limit to, you should splat them:
|
|
16
|
+
#
|
|
17
|
+
# valid_keys = [:mass, :velocity, :time]
|
|
18
|
+
# search(options.slice(*valid_keys))
|
|
19
|
+
def slice(*keys)
|
|
20
|
+
keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true)
|
|
21
|
+
keys.each_with_object(self.class.new) { |k, hash| hash[k] = self[k] if has_key?(k) }
|
|
22
|
+
end
|
|
23
|
+
|
|
24
|
+
# Replaces the hash with only the given keys.
|
|
25
|
+
# Returns a hash containing the removed key/value pairs.
|
|
26
|
+
#
|
|
27
|
+
# { a: 1, b: 2, c: 3, d: 4 }.slice!(:a, :b)
|
|
28
|
+
# # => {:c=>3, :d=>4}
|
|
29
|
+
def slice!(*keys)
|
|
30
|
+
keys.map! { |key| convert_key(key) } if respond_to?(:convert_key, true)
|
|
31
|
+
omit = slice(*self.keys - keys)
|
|
32
|
+
hash = slice(*keys)
|
|
33
|
+
replace(hash)
|
|
34
|
+
omit
|
|
35
|
+
end
|
|
36
|
+
|
|
37
|
+
# Removes and returns the key/value pairs matching the given keys.
|
|
38
|
+
#
|
|
39
|
+
# { a: 1, b: 2, c: 3, d: 4 }.extract!(:a, :b) # => {:a=>1, :b=>2}
|
|
40
|
+
# { a: 1, b: 2 }.extract!(:a, :x) # => {:a=>1}
|
|
41
|
+
def extract!(*keys)
|
|
42
|
+
keys.each_with_object(self.class.new) { |key, result| result[key] = delete(key) if has_key?(key) }
|
|
43
|
+
end
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
|
47
|
+
|
|
48
|
+
class Hash
|
|
49
|
+
include Buff::Extensions::Hash::Slice
|
|
50
|
+
end
|
data/lib/buff/extensions/hash.rb
CHANGED
|
@@ -1,9 +1,4 @@
|
|
|
1
1
|
require_relative 'hash/dotted_paths'
|
|
2
2
|
require_relative 'hash/key_transforms'
|
|
3
3
|
require_relative 'hash/reverse_merge'
|
|
4
|
-
|
|
5
|
-
class Hash
|
|
6
|
-
include Buff::Extensions::DottedPaths
|
|
7
|
-
include Buff::Extensions::KeyTransforms
|
|
8
|
-
include Buff::Extensions::ReverseMerge
|
|
9
|
-
end
|
|
4
|
+
require_relative 'hash/slice'
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: buff-extensions
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.2.0
|
|
5
5
|
prerelease:
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
@@ -195,6 +195,7 @@ files:
|
|
|
195
195
|
- lib/buff/extensions/hash/dotted_paths.rb
|
|
196
196
|
- lib/buff/extensions/hash/key_transforms.rb
|
|
197
197
|
- lib/buff/extensions/hash/reverse_merge.rb
|
|
198
|
+
- lib/buff/extensions/hash/slice.rb
|
|
198
199
|
- lib/buff/extensions/object.rb
|
|
199
200
|
- lib/buff/extensions/object/blank.rb
|
|
200
201
|
- lib/buff/extensions/version.rb
|
|
@@ -221,7 +222,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
221
222
|
version: '0'
|
|
222
223
|
segments:
|
|
223
224
|
- 0
|
|
224
|
-
hash:
|
|
225
|
+
hash: 802397933752407242
|
|
225
226
|
requirements: []
|
|
226
227
|
rubyforge_project:
|
|
227
228
|
rubygems_version: 1.8.23
|