Sha256: 5f7eeeb0482bd8e60f3ad4a7e2c7f86949cbdd9f374290b5fbea52805ff6ece9

Contents?: true

Size: 1.21 KB

Versions: 142

Compression:

Stored size: 1.21 KB

Contents

# frozen_string_literal: true

# This class delegates method calls to the given object.
# If the returned value is an instance of the original object,
# the smart delegator will return a new instance of itself with
# the original object.
#
# This is in contrast to SimpleDelegator which will return the
# original object.
#
# The chart below demonstrates the difference:
#
#    `mymessage` ->
#       SimpleDelegator ->
#         OriginalObject ->
#           invokes `mymessage` returning self ->
#             returns OriginalObject
#    `mymessage` ->
#       SmartDelegator  ->
#         OriginalObject ->
#           invokes `mymessage` returning self ->
#             returns SmartDelegator decorating OriginalObject
class SmartDelegator
  attr_reader :object

  def initialize(object)
    @object = object
  end

  def respond_to?(method, include_private = false)
    super || object.respond_to?(method, include_private)
  end

  def inspect
    "SmartDelegator(#{object.inspect})"
  end

  def method_missing(method, *args, &block)
    returned_object = object.public_send(method, *args, &block)
    if returned_object.class == object.class
      self.class.new(returned_object)
    else
      returned_object
    end
  end
end

Version data entries

142 entries across 142 versions & 1 rubygems

Version Path
renalware-core-2.1.1 lib/smart_delegator.rb
renalware-core-2.1.0 lib/smart_delegator.rb
renalware-core-2.0.167 lib/smart_delegator.rb
renalware-core-2.0.166 lib/smart_delegator.rb
renalware-core-2.0.165 lib/smart_delegator.rb
renalware-core-2.0.164 lib/smart_delegator.rb
renalware-core-2.0.163 lib/smart_delegator.rb
renalware-core-2.0.162 lib/smart_delegator.rb
renalware-core-2.0.161 lib/smart_delegator.rb
renalware-core-2.0.160 lib/smart_delegator.rb
renalware-core-2.0.159 lib/smart_delegator.rb
renalware-core-2.0.158 lib/smart_delegator.rb
renalware-core-2.0.157 lib/smart_delegator.rb
renalware-core-2.0.156 lib/smart_delegator.rb
renalware-core-2.0.155 lib/smart_delegator.rb
renalware-core-2.0.153 lib/smart_delegator.rb
renalware-core-2.0.152 lib/smart_delegator.rb
renalware-core-2.0.151 lib/smart_delegator.rb
renalware-core-2.0.149 lib/smart_delegator.rb
renalware-core-2.0.148 lib/smart_delegator.rb