Sha256: 59dd5f45ff4473acc374b37233cba36bb90a976e4a04a48661f056772846f456

Contents?: true

Size: 756 Bytes

Versions: 4

Compression:

Stored size: 756 Bytes

Contents

# encoding: utf-8
require "active_support/concern"

module Ghostable
  extend ActiveSupport::Concern

  module ClassMethods
    def ghost_method(pattern, basename, &ghost_block)
      define_method basename do |method_name, *args, &block|
        self.class.class_eval {ghost_block.call(method_name, *args, &block)}
      end

      @patterns ||= {}
      @patterns[basename] = pattern
      tmp_patterns = @patterns.dup
      define_method :get_patterns do
        tmp_patterns
      end
    end
  end

  def method_missing(method_name, *args, &block)
    get_patterns.each do |basename, pattern|
      return method(basename).call(method_name, *args, &block) if method_name.to_s.match /#{pattern}/
    end
    super
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
tbpgr_utils-0.0.9 lib/ghostable.rb
tbpgr_utils-0.0.8 lib/ghostable.rb
tbpgr_utils-0.0.7 lib/ghostable.rb
tbpgr_utils-0.0.6 lib/ghostable.rb