defined icon indicating copy to clipboard operation
defined copied to clipboard

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

= defined

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

Note: relies on {Kernel#set_trace_func}[http://www.ruby-doc.org/core/classes/Kernel.html#M001430]

== 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.