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