Class: Wonk::Policy

Inherits:
Object
  • Object
show all
Defined in:
lib/wonk/policy.rb

Constant Summary collapse

VALIDATORS =
{
  'username-password' => Wonk::PolicyValidators::UsernamePasswordValidator,
  'aws-ec2' => Wonk::PolicyValidators::AwsEC2Validator
}

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(validators:, content:) ⇒ Policy



17
18
19
20
21
22
23
24
# File 'lib/wonk/policy.rb', line 17

def initialize(validators:, content:)
  raise "all entries in 'validators' must be of type Wonk::PolicyValidator::Validator" \
    unless validators.all? { |v| v.is_a?(Wonk::PolicyValidators::Validator) }
  raise "'content' must be an Array." unless content.is_a?(Array)

  @validators = IceNine.deep_freeze(validators.map { |v| v.clone })
  @content = IceNine.deep_freeze(content.map { |r| r.deep_dup })
end

Instance Attribute Details

#contentObject (readonly)

Returns the value of attribute content.



15
16
17
# File 'lib/wonk/policy.rb', line 15

def content
  @content
end

#validatorsObject (readonly)

Returns the value of attribute validators.



14
15
16
# File 'lib/wonk/policy.rb', line 14

def validators
  @validators
end

Instance Method Details

#authenticate_from_submission(submission) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
# File 'lib/wonk/policy.rb', line 26

def authenticate_from_submission(submission)
  passed_validators =
    validators.map do |v|
      [ v, v.authenticate_from_submission(submission) ]
    end.select { |vt| vt[1].success? }

  concretizer = self.class.concretizer_class.new

  concretized_content =
    content.map do |c|
      # TODO: these should probably be made into a separate class, but marshaling is annoying
      passed_validators.map do |vt|
        validator = vt[0]
        validator_result = vt[1]

        concretize_recursively(c, concretizer, validator_result.environment)
      end
    end

  PolicyResult.new(successful: !passed_validators.empty?,
                   concretized_content: concretized_content)
end