Class: Jerakia::Policy

Inherits:
Object
  • Object
show all
Defined in:
lib/jerakia/policy.rb,
lib/jerakia/policy/registry.rb

Defined Under Namespace

Classes: Registry

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(_name, _opts, req) ⇒ Policy

_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



18
19
20
21
22
23
24
25
26
27
28
29
# File 'lib/jerakia/policy.rb', line 18

def initialize(_name, _opts, req)
  if req.use_schema && Jerakia.config[:enable_schema]
    schema_config = Jerakia.config[:schema] || {}
    @schema = Jerakia::Schema.new(req, schema_config)
  end

  @lookups = []
  @request = req
  @answer = Jerakia::Answer.new(req.lookup_type)
  @scope = Jerakia::Scope.new(req)
  @lookup_proceed = true
end

Instance Attribute Details

#answerObject (readonly)

Returns the value of attribute answer.



8
9
10
# File 'lib/jerakia/policy.rb', line 8

def answer
  @answer
end

#lookup_proceedObject (readonly)

Returns the value of attribute lookup_proceed.



10
11
12
# File 'lib/jerakia/policy.rb', line 10

def lookup_proceed
  @lookup_proceed
end

#lookupsObject

Returns the value of attribute lookups.



7
8
9
# File 'lib/jerakia/policy.rb', line 7

def lookups
  @lookups
end

#requestObject (readonly)

Returns the value of attribute request.



12
13
14
# File 'lib/jerakia/policy.rb', line 12

def request
  @request
end

#schemaObject (readonly)

Returns the value of attribute schema.



11
12
13
# File 'lib/jerakia/policy.rb', line 11

def schema
  @schema
end

#scopeObject (readonly)

Returns the value of attribute scope.



9
10
11
# File 'lib/jerakia/policy.rb', line 9

def scope
  @scope
end

Instance Method Details

#clone_requestObject



31
32
33
# File 'lib/jerakia/policy.rb', line 31

def clone_request
  Marshal.load(Marshal.dump(request))
end

#executeObject



41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/jerakia/policy.rb', line 41

def execute
  response_entries = []

  @lookups.each do |l|
    responses = l.run
    lookup_answers = responses.entries.map { |r| r }
    response_entries << lookup_answers if lookup_answers
  end

  response_entries.flatten.each { |res| process_response(res) }
  consolidate_answer
end

#submit_lookup(lookup) ⇒ Object



35
36
37
38
39
# File 'lib/jerakia/policy.rb', line 35

def submit_lookup(lookup)
  raise Jerakia::PolicyError, "Lookup #{lookup.name} has no datasource defined" unless lookup.get_datasource
  @lookups << lookup if lookup.valid? && @lookup_proceed
  @lookup_proceed = false if !lookup.proceed? && lookup.valid?
end