Class: ConvenientService::Utils::Object::SafeSend

Inherits:
Support::Command show all
Defined in:
lib/convenient_service/utils/object/safe_send.rb

Overview

Note:

‘ArgumentError` is `StandardError` descendant, so it is also rescued. It is up to the client code to ensure that valid arguments are passed.

Returns ‘nil` when `object` does NOT respond to `method`. Otherwise it calls `method` on `object` and returns its value. If calling `method` on `object` raises an exception, it is rescued and `nil` is returned. Only `StandardError` exceptions are rescued. Uses `__send__` under the hood.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Support::Command

[], call

Constructor Details

#initialize(object, method, *args, **kwargs, &block) ⇒ SafeSend

Returns a new instance of SafeSend.

Parameters:



57
58
59
60
61
62
63
# File 'lib/convenient_service/utils/object/safe_send.rb', line 57

def initialize(object, method, *args, **kwargs, &block)
  @object = object
  @method = method
  @args = args
  @kwargs = kwargs
  @block = block
end

Instance Attribute Details

#argsObject (readonly)

Returns the value of attribute args.



36
37
38
# File 'lib/convenient_service/utils/object/safe_send.rb', line 36

def args
  @args
end

#blockObject (readonly)

Returns the value of attribute block.



48
49
50
# File 'lib/convenient_service/utils/object/safe_send.rb', line 48

def block
  @block
end

#kwargsObject (readonly)

Returns the value of attribute kwargs.



42
43
44
# File 'lib/convenient_service/utils/object/safe_send.rb', line 42

def kwargs
  @kwargs
end

#methodObject (readonly)

Returns the value of attribute method.



30
31
32
# File 'lib/convenient_service/utils/object/safe_send.rb', line 30

def method
  @method
end

#objectObject (readonly)

Returns the value of attribute object.



24
25
26
# File 'lib/convenient_service/utils/object/safe_send.rb', line 24

def object
  @object
end

Instance Method Details

#callObject

Returns Can be any type.

Returns:

  • (Object)

    Can be any type.



72
73
74
75
76
77
78
79
80
# File 'lib/convenient_service/utils/object/safe_send.rb', line 72

def call
  return unless object.respond_to?(method, true)

  begin
    object.__send__(method, *args, **kwargs, &block)
  rescue
    nil
  end
end