class Feature::Permissions

Attributes

rules[R]

Public Class Methods

new(path) click to toggle source
# File lib/toggles/feature/permissions.rb, line 12
def initialize(path)
  @rules = YAML.load(File.read(path))
end

Public Instance Methods

subjects() click to toggle source
# File lib/toggles/feature/permissions.rb, line 16
def subjects
  @subjects ||= keys.map(&:to_sym)
end
valid_for?(entities) click to toggle source
# File lib/toggles/feature/permissions.rb, line 20
def valid_for?(entities)
  unless subjects == entities.keys
    raise Subject::Invalid, Subject.difference(subjects, entities.keys)
  end

  rules.all? do |name, rule|
    entity = entities[name.to_sym]

    if entity.nil?
      return false
    end

    if entity.class.ancestors.find { |ancestor| ancestor == Comparable }
      entity = OpenStruct.new(name => entity)
      rule   = {name => rule}
    end

    rule.all? do |key, value|
      OPERATIONS.fetch(key.to_sym, Operation::Attribute).call(entity, key, value)
    end
  end
end