Sha256: c22af0e60bf854c6d4e5c9800917b95797932513494a3b31ad0043c13be2c503

Contents?: true

Size: 1.46 KB

Versions: 17

Compression:

Stored size: 1.46 KB

Contents

module Locomotive  
  module Liquid      
    module LiquifyTemplate
      
      def self.included(base)
        base.extend(ClassMethods)
      end

      # Store the parsed version of a liquid template into a column in order to increase performance
      # See http://cjohansen.no/en/rails/liquid_email_templates_in_rails 
      #
      # class Page
      #   liquify_template :body
      # end
      #
      # page = Page.new :body => '...some liquid tags'
      # page.template # Liquid::Template
      # 
      #
      module ClassMethods

        def liquify_template(source = :value)
          field :serialized_template, :type => Binary
          before_validate :store_template
          
          class_eval <<-EOV
            def liquify_template_source
              self.send(:#{source.to_s})
            end
          EOV
          
          include InstanceMethods
        end

      end
      
      module InstanceMethods
        
        def template
          Marshal.load(read_attribute(:serialized_template).to_s) rescue nil
        end
                
        protected
        
        def store_template
          begin
            template = ::Liquid::Template.parse(self.liquify_template_source)
            self.serialized_template = BSON::Binary.new(Marshal.dump(template))
          rescue ::Liquid::SyntaxError => error
            self.errors.add :template, :liquid_syntax_error
          end
        end
        
      end      
    end          
  end  
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
locomotive_cms-0.0.3.3 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.3.1 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2.9 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2.8 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2.7 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2.6 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2.5 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2.4 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2.3 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2.2 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2.1 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.2 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.1.4 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.1.3 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.1.2 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.1.1 lib/locomotive/liquid/liquify_template.rb
locomotive_cms-0.0.1 lib/locomotive/liquid/liquify_template.rb