Sha256: cc2bfaca0ff333eac848641587597a0813ae96426f5955c9752891482ab38e11

Contents?: true

Size: 793 Bytes

Versions: 3

Compression:

Stored size: 793 Bytes

Contents

module Interactor
  module ClassMethods
    # Depends on Interactor::Hook
    def require_in_context(*attributes)
      before :require_in_context!
      @required_in_context = attributes
    end

    def delegate_to_context(*attributes)
      attributes.each do |attribute|
        define_method(attribute) { context[attribute] }
      end
    end

    attr_reader :required_in_context
  end

  private

  def required_in_context
    self.class.required_in_context
  end

  def require_in_context!
    missing_attributes = required_in_context.select do |attribute|
      context[attribute].nil?
    end

    return if missing_attributes.empty?
    raise ArgumentError, <<-MESSAGE.strip
      Missing the following attributes in context: #{missing_attributes.join(', ')}
    MESSAGE
  end
end

Version data entries

3 entries across 3 versions & 1 rubygems

Version Path
interactor-schema-0.2.2 lib/interactor/schema/interactor_extension.rb
interactor-schema-0.2.1 lib/interactor/schema/interactor_extension.rb
interactor-schema-0.2.0 lib/interactor/schema/interactor_extension.rb