enspiral/economatic

View on GitHub
economatic/lib/economatic/contexts/accounts/update.rb

Summary

Maintainability
A
0 mins
Test Coverage
require 'playhouse/context'
require 'economatic/entities/account'
require 'economatic/entities/user'
require 'economatic/roles/account_authorizer'

module Economatic
  module Accounts
    class Update < Playhouse::Context
      class NotAuthorizedToUpdateAccount < Exception; end

      actor :account, repository: Account
      actor :user, repository: User, role: AccountAuthorizer
      actor :name, optional: true
      actor :description, optional: true

      def attributes
        actors_except :account, :user
      end

      def perform
        raise NotAuthorizedToUpdateAccount unless user.can_update_account?(account)

        account.update_attributes(attributes)
      end
    end
  end
end