lib/deface/action_view_extensions.rb in deface-0.7.2 vs lib/deface/action_view_extensions.rb in deface-0.8.0

- old
+ new

@@ -1,13 +1,45 @@ ActionView::Template.class_eval do - alias_method :rails_initialize, :initialize + alias_method :initialize_without_deface, :initialize def initialize(source, identifier, handler, details) if Rails.application.config.deface.enabled - source = Deface::Override.apply(source, details) + haml = handler.to_s == "Haml::Plugin" + + processed_source = Deface::Override.apply(source, details, true, haml ) + + if haml && processed_source != source + handler = ActionView::Template::Handlers::ERB + end + else + processed_source = source end - rails_initialize(source, identifier, handler, details) + initialize_without_deface(processed_source, identifier, handler, details) + end + + alias_method :render_without_deface, :render + + # refresh view to get source again if + # view needs to be recompiled + # + def render(view, locals, buffer=nil, &block) + if @compiled && !view.respond_to?(method_name) + @compiled = false + @source = refresh(view).source + end + render_without_deface(view, locals, buffer, &block) + end + + + alias_method :method_name_without_deface, :method_name + + # inject deface hash into compiled view method name + # used to determine if recompilation is needed + # + def method_name + deface_hash = Deface::Override.digest(:virtual_path => @virtual_path) + "_#{deface_hash}_#{method_name_without_deface}" end end #fix for Rails 3.1 not setting virutal_path anymore (BOO!) if defined?(ActionView::Resolver::Path)