Module: Flipside::Roles

Included in:
Feature
Defined in:
app/models/flipside/roles.rb

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.included(base) ⇒ Object



7
8
9
10
# File 'app/models/flipside/roles.rb', line 7

def self.included(base)
  base.has_many :roles, foreign_key: :feature_id
  base.add_check { |object| has_role? object }
end

Instance Method Details

#has_role?(object) ⇒ Boolean

Returns:

  • (Boolean)


12
13
14
15
16
17
# File 'app/models/flipside/roles.rb', line 12

def has_role?(object)
  return false unless object

  methods = lookup_methods_for(object)
  methods.any? { |method| object.public_send(method) }
end

#lookup_methods_for(object) ⇒ Object



19
20
21
22
23
24
# File 'app/models/flipside/roles.rb', line 19

def lookup_methods_for(object)
  roles
    .where(class_name: object.class.to_s)
    .pluck(:method)
    .select { |method| object.respond_to?(method) }
end