Changeset 42

Show
Ignore:
Timestamp:
05/01/08 18:42:52 (4 months ago)
Author:
tonttu
Message:

Fix for #3, although the issue with colliding namespaces between view
helpers and Malline tags should be resolved so that overriding tag methods
could be customized.

Files:

Legend:

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

    r38 r42  
    2424 
    2525module Malline 
    26         VERSION = '1.0.2' 
     26        # Always form ^\d+\.\d+\.\d+(-[^\s]*)?$ 
     27        VERSION = '1.0.3-svn' 
    2728 
    2829        # Template-handler class that is registered to ActionView and initialized by it. 
     
    8687                end 
    8788 
    88                 # TODO: These should also be able to disable 
    89                 def definetags *tags 
    90                         tags.each do |tag| 
    91                                 eval %{ 
    92                                         def @view.#{tag}(*args, &block) 
    93                                                 tag!('#{tag}', *args, &block) 
    94                                         end 
    95                                 } 
    96                         end 
     89                def definetags *args 
     90                        @view.malline.definetags *args 
     91                end 
     92 
     93                def definetags! *args 
     94                        @view.malline.definetags! *args 
    9795                end 
    9896 
  • trunk/malline/lib/malline/template.rb

    r35 r42  
    2222                attr_accessor :whitespace 
    2323                attr_accessor :path 
     24                attr_accessor :helper_overrides 
    2425 
    2526                def initialize view, opts 
     
    2930                        @options = opts 
    3031                        @short_tag_excludes = [] 
     32                        @helper_overrides = {} 
    3133                end 
    3234 
     
    6365 
    6466                def helper helper, *args, &block 
    65                         tmp = @view.send(helper, *args, &block) 
     67                        helper = helper.to_sym 
     68                        tmp = if h = @helper_overrides[helper] 
     69                                h.call(*args, &block) 
     70                        else 
     71                                @view.send(helper, *args, &block) 
     72                        end 
    6673                        @dom << ' ' if @whitespace 
    6774                        @dom << tmp.to_s 
     
    121128                        render tmp 
    122129                end 
     130 
     131                # TODO: These should also be able to disable 
     132                def definetags! *tags 
     133                        tags.flatten.each do |tag| 
     134                                tag = tag.to_sym 
     135                                @helper_overrides[tag] = @view.method(tag) if @view.respond_to?(tag) 
     136                                define_tag! tag 
     137                        end 
     138                end 
     139 
     140                def definetags *tags 
     141                        tags.flatten.each{|tag| define_tag!(tag) unless @view.respond_to?(tag)} 
     142                end 
     143 
     144                def define_tag! tag 
     145                        eval %{ 
     146                                def @view.#{tag}(*args, &block) 
     147                                        tag!('#{tag}', *args, &block) 
     148                                end 
     149                        } 
     150                end 
    123151        end 
    124152end 
  • trunk/malline/test/malline_test.rb

    r35 r42  
    4747                'link' 
    4848        end 
     49        def zoo *args 
     50                'zoo output' 
     51        end 
    4952end 
    5053 
     
    5659        def test_simple 
    5760                Base.setopt :strict => false, :xhtml => false do 
    58                         assert_xml_equal('<foo id="a"><bar class="a b"/></foo>', 
     61                        assert_xml_equal('<foo id="a"><bar class="a b"/>blabla</foo>', 
    5962                                Base.render do 
    6063                                        foo.a! do 
    6164                                                bar.a.b 
     65                                                _'blabla' 
    6266                                        end 
    6367                                end 
     
    110114                b = Proc.new do 
    111115                        foo do 
    112                                 xxx :a => 'b' do 
     116                                zoo :a => 'b' do 
    113117                                        bar 
    114118                                end 
     119                                _zoo 
     120                                xoo.bar 
    115121                        end 
    116122                end 
    117123                out = tpl.render nil, &b 
    118                 assert_xml_equal('<foo/>', out) 
    119  
    120                 tpl.definetags :xxx 
     124                # zoo isn't rendered, because there is helper named zoo 
     125                assert_xml_equal('<foo>zoo output<xoo class="bar"/></foo>', out) 
     126 
     127                tpl.definetags :zoo 
    121128                out = tpl.render nil, &b 
    122                 assert_xml_equal('<foo><xxx a="b"><bar/></xxx></foo>', out) 
     129                assert_xml_equal('<foo>zoo output<xoo class="bar"/></foo>', out) 
     130 
     131                tpl.definetags! :zoo 
     132                out = tpl.render nil, &b 
     133                assert_xml_equal('<foo><zoo a="b"><bar/></zoo>zoo output<xoo class="bar"/></foo>', out) 
    123134 
    124135                out = Base.setopt :strict => false, :xhtml => false do 
    125136                        Base.render &b 
    126137                end 
    127                 assert_xml_equal('<foo/>', out) 
     138                assert_xml_equal('<foo><zoo a="b"><bar/></zoo><_zoo/><xoo class="bar"/></foo>', out) 
    128139        end 
    129140 
  • trunk/malline/test/malline_test_helpers.rb

    r35 r42  
    1717 
    1818require "rexml/document" 
    19  
    20 module Kernel 
    21         def xxx *args 
    22         end 
    23 end 
    2419 
    2520module MallineTestHelpers