Sha256: 1f0fa359cb01a87217de8a0823bdd257288b2a9151a268bedbd24e3a3be4becc

Contents?: true

Size: 1.87 KB

Versions: 1

Compression:

Stored size: 1.87 KB

Contents

class Object

  def metaclass
    class << self; self; end
  end
  
  def meta_def(name, &blk)
    metaclass.define_method(name, &blk)
  end

end



module Kernel
  
  # From http://oldrcrs.rubypal.com/rcr/show/309
  def __DIR__(offset = 0)
    (/^(.+)?:\d+/ =~ caller[offset + 1]) ? File.dirname($1) : nil
  end
  
  # Shorthand for lambda
  # e.g. L{|r| puts r}
  def L(&blk)
    lambda(&blk)
  end
  
  # Shorthand for Proc.new
  # e.g. P{|r| puts r}
  def P(&blk)
    Proc.new(&blk)
  end
end

class String
  def /(*args)
    File.join(self, *args)
  end
  
  def to_pathname
    Pathname.new(self)
  end
end

class Array
  def extract_options!
    last.is_a?(Hash) ? pop : {}
  end
end

class Module
  
  def has_library(*items)
    namespace = self.to_s.underscore
    items.each do |item|
      require File.join(namespace, item.to_s.underscore)
    end
  end
  
  def extends_library(*items)
    namespace = self.to_s.underscore
    items.each do |item|
      klass = item.to_s.camelize.to_sym
      # Load if it isn't loaded already.
      const_get(klass) unless const_defined?(klass)
      # And finally load the file.
      require File.join(namespace, item.to_s.underscore)
    end 
  end
  
  def add_extension(name, &blk)
    item = name.to_s.camelize.to_sym
    return unless const_defined?(item)
    target = const_get(item)
    if target.is_a?(Class)
      target.class_eval(&blk)
    elsif target.is_a?(Module)
      target.module_eval(&blk)
    else
      raise "Unable to extend #{target.inspect}"
    end
  end
  
  def attempt_require(*files)
    files.each do |file|
      begin
        require file
      rescue LoadError
      end
    end
  end
  
end

class Class
  
  def is(*mixins)
    ns = Perennial::Manifest.namespace
    return if ns.blank?
    mixins.each do |mixin|
      begin
        include ns.const_get(mixin.to_s.camelize)
      rescue NameError
      end
    end
  end
  
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
Sutto-perennial-0.2.3.5 lib/perennial/core_ext/misc.rb