Sha256: 27fbf8f483789c13680fc7cebfdfd67544a7f31e98c0c4435060b74c903cf98c

Contents?: true

Size: 1.29 KB

Versions: 45

Compression:

Stored size: 1.29 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 method_defined?(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

45 entries across 45 versions & 2 rubygems

Version Path
hobo_support-1.3.3 lib/hobo_support/fixes/module.rb
hobo_support-1.3.2 lib/hobo_support/fixes/module.rb
hobo_support-1.3.1 lib/hobo_support/fixes/module.rb
hobosupport-1.1.0 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.RC4 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.RC3 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.RC2 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.RC1 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.RC lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.pre31 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.pre29 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.pre28 lib/hobo_support/fixes/module.rb
hobosupport-1.0.3 lib/hobo_support/fixes/module.rb
hobosupport-1.1.0.pre4 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.pre27 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.pre26 lib/hobo_support/fixes/module.rb
hobosupport-1.1.0.pre3 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.pre25 lib/hobo_support/fixes/module.rb
hobo_support-1.3.0.pre24 lib/hobo_support/fixes/module.rb