Hashes
Hashes Operations
Imported from the upstream Vibescript examples at hashes/operations.vibe and runnable in the browser today.
Source
hashes/operations.vibe
# vibe: 0.2
def merge_defaults(player, defaults)
defaults.merge(player)
end
def merge_with_override(base, override)
base.merge(override)
end
def symbolize_report(records)
report = {}
records.each do |record|
report[record[:id]] = {
name: record[:name],
raised: record[:raised]
}
end
report
end
def deep_fetch_or(records, player_id)
record = records.fetch(player_id)
if record == nil
return {
name: "unknown",
raised: money("0.00 USD")
}
end
display_name = records.dig(player_id, :meta, :display_name)
if display_name == nil
display_name = record[:name]
end
{
name: display_name,
raised: record[:raised]
}
end
def tally_statuses(players)
counts = {}
players.each do |player|
status = player[:status]
counts[status] = counts.fetch(status, 0) + 1
end
counts
end
def hash_flags(record)
{
size: record.size,
length: record.length,
empty: record.empty?,
has_name: record.key?(:name),
has_goal: record.has_key?(:goal),
includes_raised: record.include?("raised")
}
end
def run
defaults = { status: "active", raised: money("0.00 USD"), goal: money("100.00 USD") }
player = { name: "Alice", raised: money("75.00 USD") }
players = [
{ id: 1, name: "Alice", raised: money("50.00 USD"), status: "active" },
{ id: 2, name: "Bob", raised: money("30.00 USD"), status: "complete" }
]
{
merged: merge_defaults(player, defaults),
overridden: merge_with_override({ a: 1 }, { a: 2, b: 3 }),
tally: tally_statuses([
{ status: "active" }, { status: "active" }, { status: "complete" }
]),
flags: hash_flags({ name: "test", goal: 100 })
}
end
Output
Press run to execute run from this example.