Sha256: debc899e3398df616ac55e8bd699a5d4451d9d28e225bc8ace5b64093a2bd441

Contents?: true

Size: 1.36 KB

Versions: 16

Compression:

Stored size: 1.36 KB

Contents

module Railjet
  module UseCase
    extend ActiveSupport::Concern
    include ::Railjet::Util::UseCaseHelper
    include ::Railjet::Util::PolicyHelper

    attr_reader :context

    def initialize(context)
      @context = context
    end

    def with_requirements_check(*args)
      with_ability_check(*args) do
        with_policy_check(*args) do
          yield if block_given?
        end
      end
    end

    def with_ability_check(*args)
      if check_ability!(*args)
        yield if block_given?
      else
        raise Railjet::UnauthorizedError
      end
    end

    def with_policy_check(*args)
      check_policy!(*args)
      yield if block_given?
    rescue Railjet::PolicyError => e
      raise Railjet::PolicyNotMetError.new(e.errors)
    end

    def check_ability!(*args)
      true
    end

    def check_policy!(*args)
      true
    end

    module ClassMethods
      def context(*context_members)
        delegate *context_members, to: :context
      end
      
      def repositories(*repositories)
        context :repository
        delegate *repositories, to: :repository
      end

      def check_ability(ability_name)
        define_method :check_ability! do |*args|
          context.current_ability.send(ability_name, *args)
        end
      end

      def check_policy(&block)
        define_method :check_policy!, &block
      end
    end
  end
end

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
railjet-4.0.0 lib/railjet/use_case.rb
railjet-3.5.0 lib/railjet/use_case.rb
railjet-3.4.0 lib/railjet/use_case.rb
railjet-3.3.0 lib/railjet/use_case.rb
railjet-3.2.0 lib/railjet/use_case.rb
railjet-3.1.0 lib/railjet/use_case.rb
railjet-3.0.0 lib/railjet/use_case.rb
railjet-2.1.1 lib/railjet/use_case.rb
railjet-2.1 lib/railjet/use_case.rb
railjet-2.0 lib/railjet/use_case.rb
railjet-2.0.pre4 lib/railjet/use_case.rb
railjet-2.0.pre3 lib/railjet/use_case.rb
railjet-2.0.pre2 lib/railjet/use_case.rb
railjet-2.0.pre1 lib/railjet/use_case.rb
railjet-2.0.pre lib/railjet/use_case.rb
railjet-1.0.1 lib/railjet/use_case.rb