class ClerkRails::Engine
Constants
- API
Public Class Methods
clerk(association_name, permissions: [])
click to toggle source
# File lib/clerk_rails/engine.rb, line 57 def self.clerk(association_name, permissions: []) plural_role = association_name.to_s.pluralize.to_sym singular_role = association_name.to_s.singularize.to_sym roles_association = :"clerk_roles_#{association_name}" remote_class = self.name unless self.respond_to? :clerk_roles self.class_eval do include ClerkRails::Clerked end end has_many roles_association, ->{ where(scope_class: remote_class, name: singular_role) }, class_name: "Clerk::Role", foreign_key: :scope_id plural_role = association_name.to_s.pluralize.to_sym singular_role = association_name.to_s.singularize.to_sym account_accessor = self.name.underscore.pluralize.to_sym # Add clerk permissions to `self` the associated class self.clerk_permissions_map[singular_role] = permissions # Add magic methods to Clerk::Acount Clerk::Account.class_eval do define_method account_accessor do self.class::RolesWrapper.new(self, account_accessor) end define_method :"is_#{singular_role}?" do |*args| has_role?(singular_role, *args) end permissions.each do |permission| define_method :"can_#{permission}?" do |*args| has_permission?(permission, *args) end end end [ association_name.to_sym, through: roles_association, source: :account ] end