lib/dragnet/command/result.rb
# frozen_string_literal: true
module Dragnet
class Command::Result
attr_reader :error
def initialize
@failure = false
@stash = {}
end
def finalize!
freeze
@stash.freeze
@error.freeze
self
end
def failure!(message)
@error = message
@failure = true
end
def failure?
@failure
end
def successful?
!failure?
end
private
def method_missing(method_name, *args)
if method_name.name.end_with?('=')
raise ArgumentError, "wrong number of arguments expected 1, got #{args.length}" unless args.length == 1
@stash[method_name.name.chop.to_sym] = args.first
return
end
raise ArgumentError, "wrong number of arguments expected 0, got #{args.length}" unless args.empty?
if method_name.name.end_with?('?')
!!@stash[method_name.name.chop.to_sym]
else
super unless @stash.key?(method_name)
@stash[method_name]
end
end
def respond_to_missing?(method_name, include_all)
name = method_name.name
return true if name.end_with?('=', '?')
@stash.key?(method_name) || super
end
end
end