]> git.wincent.com - wikitext.git/commit
Auto-initialize under Rails 3
authorWincent Colaiuta <win@wincent.com>
Sat, 12 Jun 2010 18:47:30 +0000 (20:47 +0200)
committerWincent Colaiuta <win@wincent.com>
Sat, 12 Jun 2010 18:55:59 +0000 (20:55 +0200)
commit5b5b6acdcf79001a83fe9de207e75056120d05b4
tree80f665cb2761a20634b32c892ce22b3d749b550a
parent257edc53369859bff6308b5feab88c20198db53e
Auto-initialize under Rails 3

Under Rails 2 we get free auto-initialization behavior by including a
"rails/init.rb" file in our gem.

Under Rails 3 things have changed as described here:

  http://railsdispatch.com/posts/how-rails-3-enables-more-choices-part-1

Rails will effectively do a:

  require 'wikitext'

Early on in the application boot process. In our case, that effectively
means that the code in the C extension's Init_wikitext() function will
be evaluated.

So, in this commit, we replicate in C what we would have done in the
following manner if the Wikitext gem were just a pure Ruby project:

  if Object.const_defined? :ActiveSupport
    # we are running under Rails
    require 'wikitext/nil_class'
    require 'wikitext/string'

    if ActiveSupport.respond_to? :on_load
      # running under Rails 3
      ActiveSupport.on_load :action_view do
        require 'wikitext/rails_template_handler'
      end
    else
      # running under Rails 2
      require 'wikitext/rails_template_handler'
    end

Note that because one of the code paths involves passing in a block, we
have to define a couple of ancilliary helper functions and use
rb_iterate() to achieve the same effect in C.

Signed-off-by: Wincent Colaiuta <win@wincent.com>
README.rdoc
doc/RELEASE-NOTES
ext/wikitext.c