Skip to content
This repository

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Calls Module#defined after a ruby class or module is (re)defined

branch: master

Fetching latest commit…

Octocat-spinner-32-eaf2f5

Cannot retrieve the latest commit at this time

Octocat-spinner-32 lib
Octocat-spinner-32 test
Octocat-spinner-32 .gitignore
Octocat-spinner-32 MIT-LICENSE
Octocat-spinner-32 README.rdoc
Octocat-spinner-32 Rakefile
Octocat-spinner-32 defined.gemspec
README.rdoc

defined

Calls Module#defined after a class or module has been defined or redefined

Note: relies on Kernel#set_trace_func

Installation

gem install defined

Usage

Defined.enable!

class User
  def self.defined(file, line, method)
    puts "  defined by #{file}:#{line} with #{method}"
  end

  puts 'in original class definition'
end

User.class_eval do
  puts 'in class_eval'
end

class User
  puts 'in class definition again'
end

Class.new(User) do
  puts 'in Class.new'
end

Outputs

in original class definition
  defined by /tmp/untitled.rb:1 with class
in class_eval
  defined by /tmp/untitled.rb:9 with class_eval
in class definition again
  defined by /tmp/untitled.rb:13 with class
in Class.new
  defined by /tmp/untitled.rb:17 with initialize

Note the method in the last example is initialize NOT new

Patches and pull requests

  • Fork the project.

  • Make your feature addition or bug fix.

  • Add tests for it. This is important so I don't break it in a future version unintentionally.

  • Commit, do not mess with Rakefile, version, or history. (if you want to have your own version, that is fine but bump version in a commit by itself I can ignore when I pull)

  • Send me a pull request. Bonus points for topic branches.

Something went wrong with that request. Please try again.