class Quaker::TagFilter

Public Instance Methods

dependencies(services_map, name) click to toggle source
# File lib/quaker/tag_filter.rb, line 9
def dependencies services_map, name
  spec = services_map[name]
  raise MissingServiceError, name unless spec

  depends_on = spec["depends_on"] || []
  links = (spec["links"] || []).map{|l| l.split(':')[0]}
  deps = links + depends_on
  begin
    deps + deps.map{|d| dependencies(services_map, d)}.flatten
  rescue MissingServiceError => ex
    msg = "Error resolving dependency #{ex.message} " +
      "for service #{name}"
    raise DependencyResolveError, msg
  end
end
filter(services_map, tags_list, options = {}) click to toggle source
# File lib/quaker/tag_filter.rb, line 30
def filter services_map, tags_list, options = {}
  return services_map if !tags_list || tags_list.empty?

  include_tagged_services = !options[:only_deps]

  services_map
    .select {|_, spec| is_tagged_service(spec, tags_list) }
    .map {|name, _|
      service = include_tagged_services ? [name] : []
      service + dependencies(services_map, name)
    }
    .flatten
    .inject({}) {|acc, (name, spec)| acc.update(name => services_map[name])}
end
is_tagged_service(spec, tags_list) click to toggle source
# File lib/quaker/tag_filter.rb, line 25
def is_tagged_service spec, tags_list
  svc_tags = spec.delete('tags') || []
  TagMatcher.match svc_tags, tags_list
end