Delineating private methods prior to adding more tests
This commit is contained in:
parent
dcd5add809
commit
b953d36537
1 changed files with 46 additions and 44 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue