class Grut::Statement

Constants

Entry

Public Class Methods

new(user) click to toggle source
# File lib/grut/statement.rb, line 11
def initialize(user)
  @user = user
end

Public Instance Methods

all(role: nil, permission: nil, contract: {}) click to toggle source
# File lib/grut/statement.rb, line 15
    def all(role: nil, permission: nil, contract: {})
      permission = permission.to_s if permission
      role = role.to_s if role
      contract = Asset.stringify_hash(contract)

      permission_condition = permission ? 'and p.name = :permission' : ''
      role_condition = role ? 'and r.name = :role' : ''
      contract_condition = contract.any? ? "and #{Asset.contract_sql_condition(contract)}" : ''

      args = Asset.sanitize_contract_hash(contract).merge(user_id: @user.id, role: role, permission: permission)
      DB.conn[<<-SQL, args].map { |args| Entry.from_hash(args) }
        select r.name as role, p.name as permission, pp.key as contract_key, pp.value as contract_value from #{roles_table} r
          join #{permissions_table} p on p.role_id = r.id #{permission_condition}
            join #{permission_params_table} pp on pp.permission_id = p.id #{contract_condition}
          where r.user_id = :user_id #{role_condition}
      SQL
    end