Sha256: b526508b18bdc2c676f9b9dd601f5f3f9db7ba36ba03eae77ffb5a371fdc7645

Contents?: true

Size: 1.37 KB

Versions: 1

Compression:

Stored size: 1.37 KB

Contents

require 'ruby2ruby'

class Object
  # Calls the block in the context of self, and returns self.
  def extended(&block)
    self.send(:eval, block.to_ruby).call
    self
  end
end

class Proc
  # Changes the context of a proc so that 'self' is the klass_or_obj passed.
  def in_context(klass_or_obj)
    klass_or_obj.send(:eval, self.to_ruby)
  end
end

class Hash
  def stringify_keys!
    self.each_key {|k| self[k.to_s] = self.delete(k)}
  end

  def crawl(&block)
    raise ArgumentError, "no block given" unless block_given?
    self.each do |k,v|
      case block.arity
      when 1
        yield(v)
      when 2
        yield(k,v)
      when 3
        yield(self,k,v)
        v = self[k]
      end
      if v.is_a?(Array)
        v.crawl(&block)
      elsif v.is_a?(Hash)
        v.crawl(&block)
      end
    end
  end
end

class Array
  def crawl(&block)
    raise ArgumentError, "no block given" unless block_given?
    self.each do |v|
      k = self
      v = case block.arity
      when 1
        yield(v)
      when 2
        yield(k,v)
      when 3
        yield(self,k,v)
      end
      if v.is_a?(Array)
        v.crawl(&block)
      elsif v.is_a?(Hash)
        v.crawl(&block)
      end
    end
  end
end

module Enumerable
  def group_by
    inject({}) do |groups, element|
      (groups[yield(element)] ||= []) << element
      groups
    end
  end if RUBY_VERSION < '1.9'  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
simplemapper-0.0.1 lib/simple_mapper/support/core_ext.rb