Module: Kernel

Defined in:
lib/patch/let.rb,
lib/patch/enum.rb,
lib/patch/foobar.rb,
lib/patch/lambda.rb

Defined Under Namespace

Modules: Enum Classes: Lambda, Maplet

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.let(*args, &block) ⇒ Object

A convenient shorthand for ‘Maplet.new.define!(…)`.

Examples:

person = let(name: "Rio", age: 37)
puts person.name # => "Rio"
puts person.age  # => 37

point = let **{x: 10, y: 20}
puts point.x # => 10

settings = let do
  theme = "dark"
  font_size = 12
  binding
end
puts settings.theme # => "dark"

complex_data = let([[:id, 42]], name: "Xed") do
  details = { color: "red", size: "large" }
  binding # Required
end

puts complex_data.id            # => 42
puts complex_data.name          # => "Xed"
puts complex_data.details.color # => "red"

Parameters:

  • args (Array<Hash, Array>)

    A list of Hashes or “hashy” Arrays.

  • block (Proc)

    If provided, its local variables are used to define methods.

Returns:

  • (Object)

    A new object with dynamically defined methods.

See Also:

  • [Maplet[Maplet#define!]


116
117
118
# File 'lib/patch/let.rb', line 116

def let(*args, &block)
  Maplet.new.define!(*args, &block)
end

Instance Method Details

#parry(klass, message = nil) ⇒ Object

Executes the given block and “parries” any caught StandardError, re-raising it as the specified klass with an optional custom message.

Parameters:

  • klass (Class<StandardError>)

    The error class to re-raise if an error occurs.

  • message (String, nil) (defaults to: nil)

    An optional custom error message. If nil, the original error’s message is used.

Raises:

  • (klass)

    Raises the specified klass with the appropriate message.



350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
# File 'lib/patch/foobar.rb', line 350

def parry(klass, message = nil)
  begin
    yield
  rescue StandardError => e
    final_message = message || e.message

    if e.is_a?(klass) && message.nil?
      raise e
    else
      new_error = klass.new(final_message)
      new_error.set_backtrace(e.backtrace)
      raise new_error
    end
  end
end