An open API service indexing awesome lists of open source software.

https://github.com/shuber/defined

Calls Module#defined after a ruby class or module is (re)defined
https://github.com/shuber/defined

Last synced: about 1 year ago
JSON representation

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

Awesome Lists containing this project

README

          

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