Changeset 1176

Show
Ignore:
Timestamp:
01/06/08 00:08:26 (11 months ago)
Author:
wyca..@gmail.com
Message:

HAML inlining if trunk HAML is installed

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/lib/merb.rb

    r1166 r1176  
    4141  autoload :ControllerMixin, 'merb/mixins/controller' 
    4242  autoload :ErubisCaptureMixin, 'merb/mixins/erubis_capture' 
     43  autoload :InlinePartialMixin, 'merb/mixins/inline_partial' 
    4344  autoload :FormControls, 'merb/mixins/form_control' 
    4445  autoload :RenderMixin, 'merb/mixins/render' 
  • trunk/lib/merb/server.rb

    r1162 r1176  
    1414require 'fileutils' 
    1515require 'yaml' 
     16 
     17# this is so we can test for HAML features for HAML partial inlining 
     18unless Gem.cache.search("haml").empty? 
     19  gem "haml" 
     20  require "haml" 
     21end 
    1622 
    1723require File.join(File.dirname(__FILE__), 'erubis_ext') 
     
    330336      end 
    331337       
    332       def load_erubis_inline_helpers 
    333         partials = template_paths("_*.erb") 
     338      def load_inline_helpers 
     339        partials = template_paths("_*.{erb,haml}") 
    334340 
    335341        partials.each do |partial| 
    336           eruby = Erubis::Eruby.new(File.read(partial)) 
    337           eruby.def_method(Merb::GlobalHelper, partial.gsub(/[^\.a-zA-Z0-9]/, "__").gsub(/\./, "_"), partial) 
    338         end         
     342          case partial 
     343          when /erb$/ 
     344            template = Erubis::Eruby.new(File.read(partial)) 
     345            template.def_method(Merb::GlobalHelper, partial.gsub(/[^\.a-zA-Z0-9]/, "__").gsub(/\./, "_"), partial)             
     346          when /haml$/ 
     347            if (Haml::Engine.instance_method(:def_method) rescue nil) 
     348              template = Haml::Engine.new(File.read(partial), :filename => partial) 
     349              template.def_method(Merb::GlobalHelper, partial.gsub(/[^\.a-zA-Z0-9]/, "__").gsub(/\./, "_")) 
     350            end 
     351          end 
     352        end 
    339353      end 
    340354       
     
    345359        load_action_arguments 
    346360        load_controller_template_path_cache 
    347         load_erubis_inline_helpers 
     361        load_inline_helpers 
    348362        @app_loaded = true 
    349363        (@after_app_blocks || []).each { |b| b.call } 
     
    405419        # Rebuild the glob cache and erubis inline helpers 
    406420        load_controller_template_path_cache 
    407         load_erubis_inline_helpers 
     421        load_inline_helpers 
    408422 
    409423        @mtime = project_mtime # As the last action, update the current @mtime 
  • trunk/lib/merb/template/erubis.rb

    r1032 r1176  
    44    class ErubisViewContext < ViewContext 
    55      include ::Merb::ErubisCaptureMixin 
    6        
    7       def partial(template, opts={}) 
    8  
    9         unless @_template_format 
    10           @web_controller.choose_template_format(Merb.available_mime_types, {}) 
    11         end 
    12  
    13         template = @web_controller._cached_partials["#{template}.#{@_template_format}"] ||= 
    14           @web_controller.send(:find_partial, template) 
    15  
    16         template_method = template.gsub(/[^\.a-zA-Z0-9]/, "__").gsub(/\./, "_") 
    17  
    18         unless self.respond_to?(template_method) 
    19           raise Merb::ControllerExceptions::TemplateNotFound, "No template matched at #{template}"           
    20         end 
    21  
    22         if with = opts.delete(:with) 
    23           as = opts.delete(:as) || template.match(/(.*\/_)([^\.]*)/)[2] 
    24           @_merb_partial_locals = opts         
    25           sent_template = [with].flatten.map do |temp| 
    26             @_merb_partial_locals[as.to_sym] = temp 
    27             send(template_method) 
    28           end.join 
    29         else 
    30           @_merb_partial_locals = opts         
    31           sent_template = send(template_method) 
    32         end 
    33  
    34         return sent_template if sent_template 
    35  
    36       end       
     6      include ::Merb::InlinePartialMixin 
    377    end 
    388     
  • trunk/lib/merb/template/haml.rb

    r1078 r1176  
    2020module Merb 
    2121  module Template 
     22     
     23    class HamlViewContext < ViewContext 
     24      include ::Merb::InlinePartialMixin 
     25    end 
    2226     
    2327    module Haml 
     
    5256         
    5357        def view_context_klass 
    54           ::Merb::ViewContext 
     58          HamlViewContext 
    5559        end 
    5660       
  • trunk/spec/fixtures/controllers/render_spec_controllers.rb

    r1014 r1176  
    172172Merb::Server.load_action_arguments 
    173173Merb::Server.load_controller_template_path_cache 
    174 Merb::Server.load_erubis_inline_helpers 
     174Merb::Server.load_inline_helpers 
  • trunk/spec/merb/abstract_controller_spec.rb

    r986 r1176  
    1515  after(:all) do 
    1616    Merb::Server.load_controller_template_path_cache 
    17     Merb::Server.load_erubis_inline_helpers     
     17    Merb::Server.load_inline_helpers     
    1818  end 
    1919   
  • trunk/spec/merb/mail_controller_spec.rb

    r1079 r1176  
    77end 
    88Merb::Server.load_controller_template_path_cache 
    9 Merb::Server.load_erubis_inline_helpers 
     9Merb::Server.load_inline_helpers 
    1010 
    1111class Merb::Mailer 
  • trunk/spec/merb/responder_spec.rb

    r986 r1176  
    245245Merb::Server.load_action_arguments 
    246246Merb::Server.load_controller_template_path_cache 
    247 Merb::Server.load_erubis_inline_helpers 
     247Merb::Server.load_inline_helpers 
    248248 
    249249describe "A Merb Responder's Content Negotiation" do