module Kind::Try

Public Class Methods

[](*args) click to toggle source
# File lib/kind/try.rb, line 31
def self.[](*args)
  method_name = args.shift

  ->(object) { call!(object, method_name, args) }
end

Public Instance Methods

call(object, *input) { |result| ... } click to toggle source
# File lib/kind/try.rb, line 17
def call(object, *input)
  args = input.size == 1 && input[0].kind_of?(::Array) ? input[0] : input

  result = call!(object, args.shift, args)

  return result unless block_given?

  yield(result) unless KIND.nil_or_undefined?(result)
end
call!(object, method_name, args = Empty::ARRAY) click to toggle source
# File lib/kind/try.rb, line 11
def call!(object, method_name, args = Empty::ARRAY) # :nodoc
  return if KIND.nil_or_undefined?(object)

  resolve(object, method_name, args)
end
presence(*args, &block) click to toggle source
# File lib/kind/try.rb, line 27
def presence(*args, &block)
  Presence.(call(*args, &block))
end

Private Instance Methods

resolve(object, method_name, args) click to toggle source
# File lib/kind/try.rb, line 39
def resolve(object, method_name, args)
  return unless object.respond_to?(method_name)
  return object.public_send(method_name) if args.empty?

  object.public_send(method_name, *args)
end