dryml 1.3.0.RC2 → 1.3.0.RC3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/VERSION +1 -1
 - data/lib/dryml/dryml_builder.rb +41 -2
 - data/lib/dryml/part_context.rb +1 -1
 - data/lib/dryml/template.rb +10 -6
 - data/lib/dryml/template_environment.rb +16 -1
 - data/lib/dryml.rb +3 -1
 - data/taglibs/core.dryml +3 -3
 - metadata +4 -4
 
    
        data/VERSION
    CHANGED
    
    | 
         @@ -1 +1 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            1.3.0. 
     | 
| 
      
 1 
     | 
    
         
            +
            1.3.0.RC3
         
     | 
    
        data/lib/dryml/dryml_builder.rb
    CHANGED
    
    | 
         @@ -58,10 +58,49 @@ module Dryml 
     | 
|
| 
       58 
58 
     | 
    
         
             
                end
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         | 
| 
      
 61 
     | 
    
         
            +
                class Erubis < ::Erubis::Eruby
         
     | 
| 
      
 62 
     | 
    
         
            +
                  def add_preamble(src)
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
                  end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                  def add_text(src, text)
         
     | 
| 
      
 67 
     | 
    
         
            +
                    return if text.empty?
         
     | 
| 
      
 68 
     | 
    
         
            +
                    src << "self.output_buffer.safe_concat('" << escape_text(text) << "');"
         
     | 
| 
      
 69 
     | 
    
         
            +
                  end
         
     | 
| 
      
 70 
     | 
    
         
            +
             
     | 
| 
      
 71 
     | 
    
         
            +
                  BLOCK_EXPR = /\s+(do|\{)(\s*\|[^|]*\|)?\s*\Z/
         
     | 
| 
      
 72 
     | 
    
         
            +
             
     | 
| 
      
 73 
     | 
    
         
            +
                  def add_expr_literal(src, code)
         
     | 
| 
      
 74 
     | 
    
         
            +
                    if code =~ BLOCK_EXPR
         
     | 
| 
      
 75 
     | 
    
         
            +
                      src << 'self.output_buffer.append= ' << code << ";\nself.output_buffer;"
         
     | 
| 
      
 76 
     | 
    
         
            +
                    else
         
     | 
| 
      
 77 
     | 
    
         
            +
                      src << 'self.output_buffer.append= (' << code << ");\nself.output_buffer;"
         
     | 
| 
      
 78 
     | 
    
         
            +
                    end
         
     | 
| 
      
 79 
     | 
    
         
            +
                  end
         
     | 
| 
      
 80 
     | 
    
         
            +
             
     | 
| 
      
 81 
     | 
    
         
            +
                  def add_stmt(src, code)
         
     | 
| 
      
 82 
     | 
    
         
            +
                    # skip fallback code - it utterly destroys DRYML-generated ERB
         
     | 
| 
      
 83 
     | 
    
         
            +
                    super
         
     | 
| 
      
 84 
     | 
    
         
            +
                  end
         
     | 
| 
      
 85 
     | 
    
         
            +
             
     | 
| 
      
 86 
     | 
    
         
            +
                  def add_expr_escaped(src, code)
         
     | 
| 
      
 87 
     | 
    
         
            +
                    if code =~ BLOCK_EXPR
         
     | 
| 
      
 88 
     | 
    
         
            +
                      src << "self.output_buffer.safe_append= " << code << ";\nself.output_buffer;"
         
     | 
| 
      
 89 
     | 
    
         
            +
                    else
         
     | 
| 
      
 90 
     | 
    
         
            +
                      src << "self.output_buffer.safe_concat((" << code << ").to_s);"
         
     | 
| 
      
 91 
     | 
    
         
            +
                    end
         
     | 
| 
      
 92 
     | 
    
         
            +
                  end
         
     | 
| 
      
 93 
     | 
    
         
            +
             
     | 
| 
      
 94 
     | 
    
         
            +
                  def add_postamble(src)
         
     | 
| 
      
 95 
     | 
    
         
            +
                    # NOTE: we can't just add a 'self.output_buffer' here because this parser
         
     | 
| 
      
 96 
     | 
    
         
            +
                    # is used to compile taglibs which don't HAVE one
         
     | 
| 
      
 97 
     | 
    
         
            +
                  end
         
     | 
| 
      
 98 
     | 
    
         
            +
                end
         
     | 
| 
      
 99 
     | 
    
         
            +
             
     | 
| 
       61 
100 
     | 
    
         
             
                def erb_process(erb_src)
         
     | 
| 
       62 
101 
     | 
    
         
             
                  trim_mode = ActionView::TemplateHandlers::ERB.erb_trim_mode
         
     | 
| 
       63 
     | 
    
         
            -
                  erb =  
     | 
| 
       64 
     | 
    
         
            -
                  res = erb.src 
     | 
| 
      
 102 
     | 
    
         
            +
                  erb = Erubis.new(erb_src, :trim_mode => trim_mode)
         
     | 
| 
      
 103 
     | 
    
         
            +
                  res = erb.src
         
     | 
| 
       65 
104 
     | 
    
         
             
                  if res.respond_to? :force_encoding
         
     | 
| 
       66 
105 
     | 
    
         
             
                    res.force_encoding(erb_src.encoding)
         
     | 
| 
       67 
106 
     | 
    
         
             
                  end
         
     | 
    
        data/lib/dryml/part_context.rb
    CHANGED
    
    
    
        data/lib/dryml/template.rb
    CHANGED
    
    | 
         @@ -251,7 +251,11 @@ module Dryml 
     | 
|
| 
       251 
251 
     | 
    
         
             
                    _tag_context(attributes) do
         
     | 
| 
       252 
252 
     | 
    
         
             
                      attributes.delete :with
         
     | 
| 
       253 
253 
     | 
    
         
             
                      attributes.delete :field
         
     | 
| 
       254 
     | 
    
         
            -
                       
     | 
| 
      
 254 
     | 
    
         
            +
                      if for_klass = parse_for_type(attributes)
         
     | 
| 
      
 255 
     | 
    
         
            +
                        call_polymorphic_tag('#{name}', for_klass, attributes, parameters) { #{name}__base(attributes.except, parameters) }
         
     | 
| 
      
 256 
     | 
    
         
            +
                      else
         
     | 
| 
      
 257 
     | 
    
         
            +
                        call_polymorphic_tag('#{name}', attributes, parameters) { #{name}__base(attributes.except, parameters) }
         
     | 
| 
      
 258 
     | 
    
         
            +
                      end
         
     | 
| 
       255 
259 
     | 
    
         
             
                    end
         
     | 
| 
       256 
260 
     | 
    
         
             
                  end
         
     | 
| 
       257 
261 
     | 
    
         
             
                  )
         
     | 
| 
         @@ -722,14 +726,14 @@ module Dryml 
     | 
|
| 
       722 
726 
     | 
    
         
             
                def append_parameter_tag_hash_item(name, el, metadata_name)
         
     | 
| 
       723 
727 
     | 
    
         
             
                  ":#{ruby_name name} => proc { [{}, { :default => proc { |#{param_content_local_name(name)}| new_context { %>" +
         
     | 
| 
       724 
728 
     | 
    
         
             
                    param_content_element(name) + children_to_erb(el) +
         
     | 
| 
       725 
     | 
    
         
            -
                    "<% } } } ] }"
         
     | 
| 
      
 729 
     | 
    
         
            +
                    "<% ; output_buffer } } } ] }"
         
     | 
| 
       726 
730 
     | 
    
         
             
                end
         
     | 
| 
       727 
731 
     | 
    
         | 
| 
       728 
732 
     | 
    
         | 
| 
       729 
733 
     | 
    
         
             
                def prepend_parameter_tag_hash_item(name, el, metadata_name)
         
     | 
| 
       730 
734 
     | 
    
         
             
                  ":#{ruby_name name} => proc { [{}, { :default => proc { |#{param_content_local_name(name)}| new_context { %>" +
         
     | 
| 
       731 
735 
     | 
    
         
             
                    children_to_erb(el) + param_content_element(name) +
         
     | 
| 
       732 
     | 
    
         
            -
                    "<% } } } ] }"
         
     | 
| 
      
 736 
     | 
    
         
            +
                    "<% ; output_buffer } } } ] }"
         
     | 
| 
       733 
737 
     | 
    
         
             
                end
         
     | 
| 
       734 
738 
     | 
    
         | 
| 
       735 
739 
     | 
    
         | 
| 
         @@ -737,7 +741,7 @@ module Dryml 
     | 
|
| 
       737 
741 
     | 
    
         
             
                  content = children_to_erb(el)
         
     | 
| 
       738 
742 
     | 
    
         
             
                  content = wrap_source_with_metadata(content, "param", containing_param_name,
         
     | 
| 
       739 
743 
     | 
    
         
             
                                                      element_line_num(el)) if containing_param_name
         
     | 
| 
       740 
     | 
    
         
            -
                  "proc { |#{param_content_local_name(el.dryml_name)}| new_context { %>#{content}<% } #{tag_newlines(el)}}"
         
     | 
| 
      
 744 
     | 
    
         
            +
                  "proc { |#{param_content_local_name(el.dryml_name)}| new_context { %>#{content}<% ; output_buffer } #{tag_newlines(el)}}"
         
     | 
| 
       741 
745 
     | 
    
         
             
                end
         
     | 
| 
       742 
746 
     | 
    
         | 
| 
       743 
747 
     | 
    
         | 
| 
         @@ -785,7 +789,7 @@ module Dryml 
     | 
|
| 
       785 
789 
     | 
    
         
             
                def replace_parameter_proc(el, metadata_name, content=nil)
         
     | 
| 
       786 
790 
     | 
    
         
             
                  content ||= wrap_replace_parameter(el, metadata_name)
         
     | 
| 
       787 
791 
     | 
    
         
             
                  param_name = el.dryml_name.sub(/^(before|after|append|prepend)-/, "")
         
     | 
| 
       788 
     | 
    
         
            -
                  "proc { |#{param_restore_local_name(param_name)}| new_context { %>#{content}<% } #{tag_newlines(el)}}"
         
     | 
| 
      
 792 
     | 
    
         
            +
                  "proc { |#{param_restore_local_name(param_name)}| new_context { %>#{content}<% ; output_buffer } #{tag_newlines(el)}}"
         
     | 
| 
       789 
793 
     | 
    
         
             
                end
         
     | 
| 
       790 
794 
     | 
    
         | 
| 
       791 
795 
     | 
    
         | 
| 
         @@ -813,7 +817,7 @@ module Dryml 
     | 
|
| 
       813 
817 
     | 
    
         
             
                  items = attributes.map do |n,v|
         
     | 
| 
       814 
818 
     | 
    
         
             
                    dryml_exception("invalid attribute name '#{n}' (remember to use '-' rather than '_')", el) unless n =~ DRYML_NAME_RX
         
     | 
| 
       815 
819 
     | 
    
         | 
| 
       816 
     | 
    
         
            -
                    next if n.in?(SPECIAL_ATTRIBUTES) || n =~ /^without-/
         
     | 
| 
      
 820 
     | 
    
         
            +
                    next if n.in?(SPECIAL_ATTRIBUTES-['for-type']) || n =~ /^without-/
         
     | 
| 
       817 
821 
     | 
    
         
             
                    next if el.attributes['part'] && n == 'id' # The id is rendered on the <div class="part-wrapper"> instead
         
     | 
| 
       818 
822 
     | 
    
         | 
| 
       819 
823 
     | 
    
         
             
                    ":#{ruby_name n} => #{attribute_to_ruby(v)}"
         
     | 
| 
         @@ -188,6 +188,20 @@ module Dryml 
     | 
|
| 
       188 
188 
     | 
    
         
             
                  end
         
     | 
| 
       189 
189 
     | 
    
         
             
                end
         
     | 
| 
       190 
190 
     | 
    
         | 
| 
      
 191 
     | 
    
         
            +
                def parse_for_type(attributes)
         
     | 
| 
      
 192 
     | 
    
         
            +
                  t = attributes[:for_type]
         
     | 
| 
      
 193 
     | 
    
         
            +
                  if t.nil?
         
     | 
| 
      
 194 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 195 
     | 
    
         
            +
                  elsif t.is_a?(Class)
         
     | 
| 
      
 196 
     | 
    
         
            +
                    t
         
     | 
| 
      
 197 
     | 
    
         
            +
                  elsif t =~ /^[A-Z]/
         
     | 
| 
      
 198 
     | 
    
         
            +
                    t.constantize
         
     | 
| 
      
 199 
     | 
    
         
            +
                  elsif t =~ /^[a-z]/ && defined?(HoboFields.to_class)
         
     | 
| 
      
 200 
     | 
    
         
            +
                    HoboFields.to_class(t)
         
     | 
| 
      
 201 
     | 
    
         
            +
                  else
         
     | 
| 
      
 202 
     | 
    
         
            +
                    nil
         
     | 
| 
      
 203 
     | 
    
         
            +
                  end
         
     | 
| 
      
 204 
     | 
    
         
            +
                end
         
     | 
| 
       191 
205 
     | 
    
         | 
| 
       192 
206 
     | 
    
         
             
                def call_polymorphic_tag(name, *args)
         
     | 
| 
       193 
207 
     | 
    
         
             
                  name = name.to_s.gsub('-', '_')
         
     | 
| 
         @@ -246,7 +260,8 @@ module Dryml 
     | 
|
| 
       246 
260 
     | 
    
         
             
                          @_form_field_path, @_form_field_paths_by_object ]
         
     | 
| 
       247 
261 
     | 
    
         
             
                  @_this_type = nil
         
     | 
| 
       248 
262 
     | 
    
         
             
                  res = nil
         
     | 
| 
       249 
     | 
    
         
            -
                  @view.with_output_buffer { res = yield }
         
     | 
| 
      
 263 
     | 
    
         
            +
                  outer_res = @view.with_output_buffer { res = yield }
         
     | 
| 
      
 264 
     | 
    
         
            +
                  Rails.logger.error("new_context: #{caller.first}") if !outer_res.blank? && outer_res.to_s != res.to_s
         
     | 
| 
       250 
265 
     | 
    
         
             
                  @_this, @_this_parent, @_this_field, @_this_type, @_form_field_path, @_form_field_paths_by_object = ctx
         
     | 
| 
       251 
266 
     | 
    
         
             
                  res.to_s
         
     | 
| 
       252 
267 
     | 
    
         
             
                end
         
     | 
    
        data/lib/dryml.rb
    CHANGED
    
    | 
         @@ -9,6 +9,7 @@ require 'action_pack' 
     | 
|
| 
       9 
9 
     | 
    
         
             
            require 'openssl'
         
     | 
| 
       10 
10 
     | 
    
         | 
| 
       11 
11 
     | 
    
         
             
            ActiveSupport::Dependencies.autoload_paths |= [File.dirname(__FILE__)]
         
     | 
| 
      
 12 
     | 
    
         
            +
            ActiveSupport::Dependencies.autoload_once_paths |= [File.dirname(__FILE__)]
         
     | 
| 
       12 
13 
     | 
    
         | 
| 
       13 
14 
     | 
    
         
             
            # The Don't Repeat Yourself Markup Language
         
     | 
| 
       14 
15 
     | 
    
         
             
            module Dryml
         
     | 
| 
         @@ -65,9 +66,10 @@ module Dryml 
     | 
|
| 
       65 
66 
     | 
    
         
             
              end
         
     | 
| 
       66 
67 
     | 
    
         | 
| 
       67 
68 
     | 
    
         
             
              def call_render(view, local_assigns, identifier)
         
     | 
| 
       68 
     | 
    
         
            -
                renderer = page_renderer(view, identifier, local_assigns.keys)
         
     | 
| 
       69 
69 
     | 
    
         
             
                this = view.controller.send(:dryml_context) || local_assigns[:this]
         
     | 
| 
       70 
70 
     | 
    
         
             
                view.instance_variable_set("@this", this)
         
     | 
| 
      
 71 
     | 
    
         
            +
                # do this last, as TemplateEnvironment copies instance variables in initalize
         
     | 
| 
      
 72 
     | 
    
         
            +
                renderer = page_renderer(view, identifier, local_assigns.keys)
         
     | 
| 
       71 
73 
     | 
    
         
             
                if identifier =~ /#{ID_SEPARATOR}/
         
     | 
| 
       72 
74 
     | 
    
         
             
                  tag_name = identifier.split(ID_SEPARATOR).last
         
     | 
| 
       73 
75 
     | 
    
         
             
                  renderer.render_tag(tag_name, {:with => this} )
         
     | 
    
        data/taglibs/core.dryml
    CHANGED
    
    | 
         @@ -71,10 +71,10 @@ For example, you might want to wrap an `<img>` tag in an `<a>` tag but only unde 
     | 
|
| 
       71 
71 
     | 
    
         | 
| 
       72 
72 
     | 
    
         
             
            ### Usage
         
     | 
| 
       73 
73 
     | 
    
         | 
| 
       74 
     | 
    
         
            -
                <if test="¤t_user. 
     | 
| 
      
 74 
     | 
    
         
            +
                <if test="¤t_user.administrator?">Logged in as administrator</if>
         
     | 
| 
       75 
75 
     | 
    
         
             
                <else>Logged in as normal user</else>
         
     | 
| 
       76 
     | 
    
         
            -
             
     | 
| 
       77 
     | 
    
         
            -
            **IMPORTANT NOTE**: `<if>` tests for non-blank vs. blank (as defined by  
     | 
| 
      
 76 
     | 
    
         
            +
                
         
     | 
| 
      
 77 
     | 
    
         
            +
            **IMPORTANT NOTE**: `<if>` tests for non-blank vs. blank (as defined by ActiveSupport), not true vs. false. 
         
     | 
| 
       78 
78 
     | 
    
         | 
| 
       79 
79 
     | 
    
         
             
            If you do not give the `test` attribute, uses the current context instead. This allows a nice trick like this:
         
     | 
| 
       80 
80 
     | 
    
         | 
    
        metadata
    CHANGED
    
    | 
         @@ -2,7 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         
             
            name: dryml
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version 
         
     | 
| 
       4 
4 
     | 
    
         
             
              prerelease: 6
         
     | 
| 
       5 
     | 
    
         
            -
              version: 1.3.0. 
     | 
| 
      
 5 
     | 
    
         
            +
              version: 1.3.0.RC3
         
     | 
| 
       6 
6 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       7 
7 
     | 
    
         
             
            authors: 
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Tom Locke
         
     | 
| 
         @@ -10,7 +10,7 @@ autorequire: 
     | 
|
| 
       10 
10 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
12 
     | 
    
         | 
| 
       13 
     | 
    
         
            -
            date: 2011- 
     | 
| 
      
 13 
     | 
    
         
            +
            date: 2011-10-25 00:00:00 -04:00
         
     | 
| 
       14 
14 
     | 
    
         
             
            default_executable: 
         
     | 
| 
       15 
15 
     | 
    
         
             
            dependencies: 
         
     | 
| 
       16 
16 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -32,7 +32,7 @@ dependencies: 
     | 
|
| 
       32 
32 
     | 
    
         
             
                requirements: 
         
     | 
| 
       33 
33 
     | 
    
         
             
                - - "="
         
     | 
| 
       34 
34 
     | 
    
         
             
                  - !ruby/object:Gem::Version 
         
     | 
| 
       35 
     | 
    
         
            -
                    version: 1.3.0. 
     | 
| 
      
 35 
     | 
    
         
            +
                    version: 1.3.0.RC3
         
     | 
| 
       36 
36 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       37 
37 
     | 
    
         
             
              version_requirements: *id002
         
     | 
| 
       38 
38 
     | 
    
         
             
            - !ruby/object:Gem::Dependency 
         
     | 
| 
         @@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       114 
114 
     | 
    
         
             
            requirements: []
         
     | 
| 
       115 
115 
     | 
    
         | 
| 
       116 
116 
     | 
    
         
             
            rubyforge_project: hobo
         
     | 
| 
       117 
     | 
    
         
            -
            rubygems_version: 1. 
     | 
| 
      
 117 
     | 
    
         
            +
            rubygems_version: 1.6.2
         
     | 
| 
       118 
118 
     | 
    
         
             
            signing_key: 
         
     | 
| 
       119 
119 
     | 
    
         
             
            specification_version: 3
         
     | 
| 
       120 
120 
     | 
    
         
             
            summary: The Don't Repeat Yourself Markup Language
         
     |