Sha256: cf6c821be23f2802ebf8d3830a7f6a05dd475731381e026ca406817340605916

Contents?: true

Size: 943 Bytes

Versions: 1

Compression:

Stored size: 943 Bytes

Contents

require 'active_record'
require 'active_support/core_ext'

Eucalypt.glob('app', '{policies}', '*.rb') do |file|
  policy_name        = File.basename file, '.rb'
  policy_constant    = policy_name.camelize.constantize
  resource_name      = policy_name.gsub '_policy', ''
  roles_name         = "#{resource_name}_roles"
  role_constant_name = roles_name.singularize.camelize
  role_constant      = role_constant_name.constantize

  if ActiveRecord::Base.connection.table_exists? roles_name
    level = ActiveRecord::Base.logger.level
    begin
      ActiveRecord::Base.logger.level = :unknown
      role_constant.pluck(:permission).each do |permission|
        policy_constant.define_method "#{permission}?" do
          role_constant.find_by(permission: permission).send(user.role.send resource_name)
        end
      end
    rescue => exception
      throw exception
    ensure
      ActiveRecord::Base.logger.level = level
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
eucalypt-0.8.0 lib/eucalypt/security/permissions.rb