module Muffin::Policy

Public Class Methods

included(base) click to toggle source
# File lib/muffin/frostings/policy.rb, line 47
def self.included(base)
  base.extend ClassMethods
end

Public Instance Methods

attribute_permitted?(name) click to toggle source
# File lib/muffin/frostings/policy.rb, line 22
def attribute_permitted?(name)
  block = self.class.attributes[name]&.permit
  return instance_exec(&block) if block
  true
end
attribute_value_permitted?(name, value) click to toggle source
# File lib/muffin/frostings/policy.rb, line 42
def attribute_value_permitted?(name, value)
  return true if permitted_values(name).nil?
  Array.wrap(value).all? { |e| permitted_values(name).include? e }
end
permit!() click to toggle source
# File lib/muffin/frostings/policy.rb, line 13
def permit!
  raise NotPermittedError unless permitted?
end
permit_attribute!(name, value) click to toggle source
# File lib/muffin/frostings/policy.rb, line 28
def permit_attribute!(name, value)
  return false unless attribute_permitted?(name)
  permitted = attribute_value_permitted?(name, value)
  return false if value == nil && !permitted
  raise NotPermittedError unless permitted
  true
end
permitted?() click to toggle source
# File lib/muffin/frostings/policy.rb, line 17
def permitted?
  return true unless self.class.permission_block
  instance_eval(&self.class.permission_block)
end
permitted_values(name) click to toggle source
# File lib/muffin/frostings/policy.rb, line 36
def permitted_values(name)
  block = self.class.attributes[name]&.permitted_values
  return instance_exec(&block) if block
  nil
end