class Jerakia::Policy

Attributes

datasources[R]
lookups[RW]
name[R]

Public Class Methods

new(name, _opts) click to toggle source

_opts currently does not get used, but is included here as a placeholder for allowing policies to be declared with options; policy :foo, :option => :value do

# File lib/jerakia/policy.rb, line 16
def initialize(name, _opts)
  @name = name
  @lookups = []
  @datasources = {}
end

Public Instance Methods

clone_request(request) click to toggle source
# File lib/jerakia/policy.rb, line 55
def clone_request(request)
  Marshal.load(Marshal.dump(request))
end
register_datasource(datasource) click to toggle source
# File lib/jerakia/policy.rb, line 51
def register_datasource(datasource)
  Jerakia::Datasource.load_datasource(datasource)
end
run(request) click to toggle source
# File lib/jerakia/policy.rb, line 22
def run(request)

  if request.use_schema && Jerakia.config[:enable_schema]
    schema_config = Jerakia.config[:schema] || {}
    @schema = Jerakia::Schema.new(request, schema_config)
  end

  scope = Jerakia::Scope.new(request)
  answer = Jerakia::Answer.new(request.lookup_type, request.merge)

  response_entries = []
  lookups.each do |lookup|
    lookup_instance = lookup.call clone_request(request), scope
    next unless lookup_instance.valid?
    register_datasource lookup_instance.datasource[:name]
    responses = Jerakia::Datasource.run(lookup_instance)
    lookup_instance.output_filters.each do |filter|
      Jerakia.log.debug("Using output filter #{filter[:name]}")
      responses.filter! filter[:name], filter[:opts]
    end
    lookup_answers = responses.entries.map { |r| r}
    response_entries << lookup_answers if lookup_answers
    break unless lookup_instance.proceed?
  end
  answer.process_response(response_entries)
  Jerakia.log.debug(answer)
  return answer
end