class PapersPlease::Permission

Attributes

granted_by[RW]
granting_class[RW]
key[RW]
predicate[RW]
query[RW]
subject[RW]

Public Class Methods

new(key, subject, query: nil, predicate: nil, granted_by: nil, granting_class: nil) click to toggle source
# File lib/papers_please/permission.rb, line 5
def initialize(key, subject, query: nil, predicate: nil, granted_by: nil, granting_class: nil)
  self.key = key
  self.subject = subject
  self.query = query
  self.predicate = predicate
  self.granted_by = granted_by
  self.granting_class = granting_class
end

Public Instance Methods

fetch(*args) click to toggle source
# File lib/papers_please/permission.rb, line 31
def fetch(*args)
  return query.call(*args) if query.is_a? Proc

  nil
end
granted?(*args) click to toggle source
# File lib/papers_please/permission.rb, line 22
def granted?(*args)
  return predicate.call(*args) if predicate.is_a? Proc

  # :nocov:
  # as far as we can tell this line is unreachable, but just in case...
  false
  # :nocov:
end
granted_by=(val) click to toggle source
# File lib/papers_please/permission.rb, line 50
def granted_by=(val)
  raise ArgumentError, "granted_by must be a Proc, #{val.class} given" if val && !val.is_a?(Proc)

  @granted_by = val
end
granted_by_other?() click to toggle source
# File lib/papers_please/permission.rb, line 14
def granted_by_other?
  @granting_class.is_a?(Class) && @granted_by.is_a?(Proc)
end
granting_class=(val) click to toggle source
# File lib/papers_please/permission.rb, line 56
def granting_class=(val)
  raise ArgumentError, "granting_class must be a Class, #{val.class} given" if val && !val.is_a?(Class)

  @granting_class = val
end
matches?(key, subject) click to toggle source
# File lib/papers_please/permission.rb, line 18
def matches?(key, subject)
  key_matches?(key) && subject_matches?(subject)
end
predicate=(val) click to toggle source
# File lib/papers_please/permission.rb, line 44
def predicate=(val)
  raise ArgumentError, "predicate must be a Proc, #{val.class} given" if val && !val.is_a?(Proc)

  @predicate = val
end
query=(val) click to toggle source

Setters

# File lib/papers_please/permission.rb, line 38
def query=(val)
  raise ArgumentError, "query must be a Proc, #{val.class} given" if val && !val.is_a?(Proc)

  @query = val
end

Private Instance Methods

key_matches?(key) click to toggle source
# File lib/papers_please/permission.rb, line 64
def key_matches?(key)
  key == @key
end
subject_matches?(subject) click to toggle source
# File lib/papers_please/permission.rb, line 68
def subject_matches?(subject)
  subject == @subject || subject.class <= @subject
end