Sha256: 742ea47f13719a5a0b4c92af083b49cea8ea63cb751982a033609a8e470bc19d

Contents?: true

Size: 1.3 KB

Versions: 6

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

6 entries across 6 versions & 2 rubygems

Version Path
hobo-support-0.1 lib/hobosupport/fixes/module.rb
hobosupport-0.1 lib/hobosupport/fixes/module.rb
hobosupport-0.2 lib/hobosupport/fixes/module.rb
hobosupport-0.7.3.99 lib/hobosupport/fixes/module.rb
hobosupport-0.7.4 lib/hobosupport/fixes/module.rb
hobosupport-0.7.5 lib/hobosupport/fixes/module.rb