class Kanrisuru::Result

Attributes

command[R]
data[R]
error[R]

Public Class Methods

new(command, &block) click to toggle source
# File lib/kanrisuru/result.rb, line 9
def initialize(command, &block)
  @command = command
  @data = nil

  @data = block.call(@command) if @command.success? && block_given?
  @error = @command.to_a if @command.failure?

  ## Define getter methods on result that maps to
  ## the same methods of a data struct.
  return unless @command.success? && Kanrisuru::Util.present?(@data) && @data.class.ancestors.include?(Struct)

  method_names = @data.members
  self.class.class_eval do
    method_names.each do |method_name|
      define_method method_name do
        @data[method_name]
      end
    end
  end
end

Public Instance Methods

[](prop) click to toggle source
# File lib/kanrisuru/result.rb, line 30
def [](prop)
  @data[prop]
end
each(&block) click to toggle source
# File lib/kanrisuru/result.rb, line 78
def each(&block)
  @data.each { |item| block.call(item) } if @data.instance_of?(Array)
end
failure?() click to toggle source
# File lib/kanrisuru/result.rb, line 66
def failure?
  @command.failure?
end
inspect() click to toggle source
# File lib/kanrisuru/result.rb, line 56
def inspect
  if success?
    format('#<Kanrisuru::Result:0x%<object_id>s @status=%<status>s @data=%<data>s @command=%<command>s>',
           object_id: object_id, status: status, data: @data.inspect, command: command.prepared_command)
  else
    format('#<Kanrisuru::Result:0x%<object_id>s @status=%<status>s @error=%<error>s @command=%<command>s>',
           object_id: object_id, status: status, error: @error.inspect, command: command.prepared_command)
  end
end
status() click to toggle source
# File lib/kanrisuru/result.rb, line 74
def status
  @command.exit_status
end
success?() click to toggle source
# File lib/kanrisuru/result.rb, line 70
def success?
  @command.success?
end
to_a() click to toggle source
# File lib/kanrisuru/result.rb, line 38
def to_a
  @data.instance_of?(Array) ? @data : [@data]
end
to_i() click to toggle source
# File lib/kanrisuru/result.rb, line 42
def to_i
  if @data.instance_of?(Integer)
    @data
  elsif @data.instance_of?(String)
    @data.to_i
  elsif @data.instance_of?(Array)
    @data.map(&:to_i)
  elsif @data.instance_of?(NilClass)
    nil
  else
    raise NoMethodError, "(undefined method `to_i' for Kanrisuru::Result)"
  end
end
to_s() click to toggle source
# File lib/kanrisuru/result.rb, line 34
def to_s
  @data.to_s
end