Let's take the following widget:
widget = {
id: 1,
name: "Widget 1",
description: "This is widget 1",
created_at: "1992-10-01 12:21"
}In order to create a hash with a subset of keys from widget you can use select
method which comes from Enumerable mixin included (among others) in Array
and Hash.
keys_to_extract = [:id, :name]
widget.select { |key,_| keys_to_extract.include? key }{
id: 1,
name: "Widget 1"
}You can combine this with map to iterate over an array of hashes.
widgets = [
{
id: 1,
name: "Widget 1",
description: "This is widget 1",
created_at: "1992-10-01 12:21"
},
{
id: 2,
name: "Widget 2",
description: "This is widget 2",
created_at: "1993-10-01 12:21"
}
]keys_to_extract = [:id, :name]
widgets.map do |w|
w.select { |k,_| keys_to_extract.include? k }
end[
{
id: 1,
name: "Widget 1"
},
{
id: 2,
name: "Widget 2"
}
]This method can be also directly attached to any Hash instance using the
following snippet.
class Hash
def select_keys(*args)
select {|k,_| args.include? k }
end
end