Sha256: 79dea144d15e35920be4b1fd904df122b0038c0901febc7c8779d2234111e494

Contents?: true

Size: 1.3 KB

Versions: 12

Compression:

Stored size: 1.3 KB

Contents

class Module

  # Custom alias_method_chain that won't cause inifinite recursion if
  # called twice.
  # Calling alias_method_chain on alias_method_chain
  # was just way to confusing, so I copied it :-/
  def alias_method_chain(target, feature)
    # Strip out punctuation on predicates or bang methods since
    # e.g. target?_without_feature is not a valid method name.
    aliased_target, punctuation = target.to_s.sub(/([?!=])$/, ''), $1
    yield(aliased_target, punctuation) if block_given?
    without = "#{aliased_target}_without_#{feature}#{punctuation}"
    unless instance_methods.include?(without)
      alias_method without, target
      alias_method target, "#{aliased_target}_with_#{feature}#{punctuation}"
    end
  end


  # Fix delegate so it doesn't go bang if 'to' is nil
  def delegate(*methods)
    options = methods.pop
    unless options.is_a?(Hash) && to = options[:to]
      raise ArgumentError, ("Delegation needs a target. Supply an options hash with a :to key"  +
                            "as the last argument (e.g. delegate :hello, :to => :greeter).")
    end

    methods.each do |method|
      module_eval(<<-EOS, "(__DELEGATION__)", 1)
        def #{method}(*args, &block)
          (_to = #{to}) && _to.__send__(#{method.inspect}, *args, &block)
        end
      EOS
    end
  end

end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
hobosupport-0.9.0 lib/hobo_support/fixes/module.rb
hobosupport-0.8.10 lib/hobo_support/fixes/module.rb
hobosupport-0.8.9 lib/hobo_support/fixes/module.rb
hobosupport-0.8.8 lib/hobo_support/fixes/module.rb
hobosupport-0.8.3 lib/hobosupport/fixes/module.rb
hobosupport-0.8.5 lib/hobo_support/fixes/module.rb
hobosupport-0.8.6 lib/hobo_support/fixes/module.rb
hobosupport-0.8.7 lib/hobo_support/fixes/module.rb
hobosupport-0.8.4 lib/hobo_support/fixes/module.rb
hobosupport-0.8 lib/hobosupport/fixes/module.rb
hobosupport-0.8.1 lib/hobosupport/fixes/module.rb
hobosupport-0.8.2 lib/hobosupport/fixes/module.rb