class SimpleOperation

Constants

VERSION

Public Class Methods

failure(*args) click to toggle source
# File lib/simple_operation.rb, line 37
def self.failure(*args)
  @failure_class = Failure.generate(*args)
end
new(*args, &block) click to toggle source
# File lib/simple_operation.rb, line 7
  def self.new(*args, &block)
    args_list_with_nils = args.empty? ? '' : "#{args.join('=nil,')}=nil"
    Class.new do
      class_eval(&block) if block_given?

      class_eval <<-code
        def self.call #{args_list_with_nils}
          new(#{args.join(',')}).call
        end

        def initialize #{args_list_with_nils}
          #{args.map { |arg| "@#{arg}= #{arg}" }.join(';') }
        end
      code

      def perform
        call
      end

      private
        attr_reader(*args)

        def self.result(*args)
          @result_class = Struct.new(*args)
        end

        def self.success(*args)
          @success_class = Success.generate(*args)
        end

        def self.failure(*args)
          @failure_class = Failure.generate(*args)
        end

        def result(*args)
          self.class.instance_variable_get(:@result_class).new(*args)
        end

        def success(*args)
          self.class.instance_variable_get(:@success_class).new(*args)
        end

        def failure(*args)
          self.class.instance_variable_get(:@failure_class).new(*args)
        end

        alias_method :Result, :result
        alias_method :Success, :success
        alias_method :Failure, :failure
    end
  end
result(*args) click to toggle source
# File lib/simple_operation.rb, line 29
def self.result(*args)
  @result_class = Struct.new(*args)
end
success(*args) click to toggle source
# File lib/simple_operation.rb, line 33
def self.success(*args)
  @success_class = Success.generate(*args)
end

Public Instance Methods

failure(*args) click to toggle source
# File lib/simple_operation.rb, line 49
def failure(*args)
  self.class.instance_variable_get(:@failure_class).new(*args)
end
perform() click to toggle source
# File lib/simple_operation.rb, line 22
def perform
  call
end
result(*args) click to toggle source
# File lib/simple_operation.rb, line 41
def result(*args)
  self.class.instance_variable_get(:@result_class).new(*args)
end
success(*args) click to toggle source
# File lib/simple_operation.rb, line 45
def success(*args)
  self.class.instance_variable_get(:@success_class).new(*args)
end