Delineating private methods prior to adding more tests

This commit is contained in:
Andy Marks 2014-12-02 22:21:01 +11:00
parent dcd5add809
commit b953d36537

View file

@ -8,50 +8,6 @@ module Riemann::Dash::BrowserConfig
@backend = backend
end
# TODO: this is gonna take significant restructuring of the dashboard itself,
# but we should move to http://arxiv.org/abs/1201.1784 or equivalent CRDTs.
# Given a function to extract a key from an element, and a list of elements,
# returns a map of keys to elements. Keys are assumed unique.
def self.index_by(keyfn, list)
list.reduce({}) do |index, element|
index[keyfn.call(element)] = element
index
end
end
# Merges two lists, given a key function which determines equivalent
# elements, and a merge function to combine equivalent elements.
def self.merge_lists(keyfn, mergefn, as, bs)
asi = index_by keyfn, as
bsi = index_by keyfn, bs
ids = (as + bs).map(&keyfn).uniq.map do |key|
mergefn.call asi[key], bsi[key]
end
end
# Merge two workspaces together
def self.merge_workspace(a, b)
# TODO: workspace versions
return a unless b
return b unless a
if (a['view']['version'] || 0) < (b['view']['version'] || 0)
b
else
a
end
end
# Merge a list of workspaces together
def self.merge_workspaces(as, bs)
return as unless bs
return bs unless as
merge_lists(lambda { |x| x['name'] },
method(:merge_workspace),
as,
bs)
end
# Merge two configs together
def self.merge_configs(a, b)
a.merge 'server' => (a['server'] or b['server']),
@ -66,4 +22,50 @@ module Riemann::Dash::BrowserConfig
def self.update(update)
backend.update(update)
end
private
# TODO: this is gonna take significant restructuring of the dashboard itself,
# but we should move to http://arxiv.org/abs/1201.1784 or equivalent CRDTs.
# Given a function to extract a key from an element, and a list of elements,
# returns a map of keys to elements. Keys are assumed unique.
def self.index_by(keyfn, list)
list.reduce({}) do |index, element|
index[keyfn.call(element)] = element
index
end
end
# Merges two lists, given a key function which determines equivalent
# elements, and a merge function to combine equivalent elements.
def self.merge_lists(keyfn, mergefn, as, bs)
asi = index_by keyfn, as
bsi = index_by keyfn, bs
ids = (as + bs).map(&keyfn).uniq.map do |key|
mergefn.call asi[key], bsi[key]
end
end
# Merge two workspaces together
def self.merge_workspace(a, b)
# TODO: workspace versions
return a unless b
return b unless a
if (a['view']['version'] || 0) < (b['view']['version'] || 0)
b
else
a
end
end
# Merge a list of workspaces together
def self.merge_workspaces(as, bs)
return as unless bs
return bs unless as
merge_lists(lambda { |x| x['name'] },
method(:merge_workspace),
as,
bs)
end
end