module ActiveInteractor

ActiveInteractor.

@example

class CreateProduct
  include ActiveInteractor

  expose :product

  validations(:name, :price) do
    validates :name, presence: true, length: { maximum: 50 }
    validates :price, presence: true, numericality: { only_integer: true }
  end

  def initialize(repository)
    @repository = repository
  end

  def call(attributes)
    @product = @repository.create(attributes)
  end
end

Constants

VERSION

Public Instance Methods

call(*) click to toggle source
# File lib/active_interactor.rb, line 165
def call(*)
  raise NotImplementedError
end
errors() click to toggle source

@return [ActiveModel::Errors]

# File lib/active_interactor.rb, line 170
def errors
  validator.errors
end
merge_errors(additional_errors) click to toggle source

Merge the given errors into {#errors}.

@param additional_errors [ActiveModel::Errors] @return [void]

# File lib/active_interactor.rb, line 178
def merge_errors(additional_errors)
  additional_errors.full_messages.each do |message|
    errors.add(:base, message)
  end
end
validator() click to toggle source

@return [ActiveModel::Validations] an instance of {ActiveInteractor::ClassMethods#validator_class}

# File lib/active_interactor.rb, line 185
def validator
  @validator ||= self.class.validator_class.new
end

Private Instance Methods

result_payload() click to toggle source

@return [Hash] a hash representing a payload for {ActiveInteractor::Result}

# File lib/active_interactor.rb, line 192
def result_payload
  Hash[].tap do |result|
    self.class.exposures.each do |name, ivar|
      result[name] = instance_variable_defined?(ivar) ? instance_variable_get(ivar) : nil
    end
  end
end
sanitize(params) click to toggle source

Remove undeclared keys from the given params.

@param params [Hash] @return [Hash]

# File lib/active_interactor.rb, line 213
def sanitize(params)
  return params unless self.class.validation_required?

  Hash[].tap do |result|
    self.class.validation_attribute_names.each do |name|
      result[name] = params[name]
    end
  end
end
validate(params) click to toggle source

@param params [Hash] @return [void]

# File lib/active_interactor.rb, line 202
def validate(params)
  return unless self.class.validation_required?

  validator.assign_attributes(params)
  validator.valid?
end