class DopCommon::PlanCache
Public Class Methods
new(plan_store)
click to toggle source
# File lib/dop_common/plan_cache.rb, line 5 def initialize(plan_store) @plan_store = plan_store @plans = {} # { plan_name => plan } @versions = {} # { plan => version } @nodes = {} # { node_name => plan } end
Public Instance Methods
plan_by_node(node_name)
click to toggle source
will return the plan of the node or nil if the node is not in a plan
# File lib/dop_common/plan_cache.rb, line 14 def plan_by_node(node_name) plan = @nodes[node_name] if plan refresh_plan(plan) # this makes sure the node was not removed plan = @nodes[node_name] return plan if plan end refresh_all return @nodes[node_name] end
Private Instance Methods
add_plan(plan_name)
click to toggle source
# File lib/dop_common/plan_cache.rb, line 71 def add_plan(plan_name) version = @plan_store.show_versions(plan_name).last plan = @plan_store.get_plan(plan_name) @plans[plan_name] = plan @versions[plan] = version plan.nodes.each do |node| @nodes[node.name] = plan end end
refresh_all()
click to toggle source
# File lib/dop_common/plan_cache.rb, line 41 def refresh_all loaded_plan_names = @plans.keys existing_plan_names = @plan_store.list remove_old_plans(loaded_plan_names - existing_plan_names) refresh_plans(existing_plan_names) end
refresh_plan(plan)
click to toggle source
# File lib/dop_common/plan_cache.rb, line 29 def refresh_plan(plan) loaded_version = @versions[plan] plan_name = plan.name newest_version = @plan_store.show_versions(plan_name).last unless loaded_version == newest_version remove_plan(plan) add_plan(plan_name) end rescue remove_plan(plan) end
refresh_plans(plan_names)
click to toggle source
# File lib/dop_common/plan_cache.rb, line 48 def refresh_plans(plan_names) plan_names.each do |plan_name| plan = @plans[plan_name] if plan refresh_plan(plan) else add_plan(plan_name) end end end
remove_old_plans(plan_names)
click to toggle source
# File lib/dop_common/plan_cache.rb, line 59 def remove_old_plans(plan_names) plan_names.each do |plan_name| remove_plan(@plans[plan_name]) end end
remove_plan(plan_to_remove)
click to toggle source
# File lib/dop_common/plan_cache.rb, line 65 def remove_plan(plan_to_remove) @nodes.delete_if{|node_name, plan| plan == plan_to_remove} @plans.delete_if{|plan_name, plan| plan == plan_to_remove} @versions.delete_if{|plan, version| plan == plan_to_remove} end