public
Rubygem
Description: a humane, eval-safe templating system using Hpricot
Clone URL: git://github.com/mattly/hpreserve.git
Search Repo:
Click here to lend your support to: hpreserve and make a donation at www.pledgie.com !
variable substitution for filter arguments is now done outside the filter 
sandbox
mattly (author)
Mon May 12 15:16:31 -0700 2008
commit  cf491d230e32b4a88b7075ca1a9b77a14ef36677
tree    ba5c07c2999915de41ae3adfe93d671bce3d2f9f
parent  8b4863a478a377bc02fd320c88e2a3a02a486078
...
17
18
19
20
 
21
22
23
24
25
26
...
47
48
49
50
 
51
52
53
54
55
56
...
62
63
64
65
66
67
 
 
68
69
70
...
17
18
19
 
20
21
 
22
23
24
25
...
46
47
48
 
49
50
 
 
51
52
53
...
59
60
61
 
 
 
62
63
64
65
66
0
@@ -17,9 +17,8 @@
0
       end
0
     end
0
     
0
- def self.create(parser=nil)
0
+ def self.create
0
       filterset = Filters.new
0
- filterset.parser = parser
0
       @@filter_modules.each { |m| filterset.extend m }
0
       filterset
0
     end
0
0
@@ -47,10 +46,8 @@
0
       end
0
     end
0
     
0
- attr_accessor :parser
0
+ @@required_methods = %w(__send__ __id__ debugger run inspect methods respond_to? extend)
0
     
0
- @@required_methods = %w(__send__ __id__ parser parser= debugger run inspect methods respond_to? extend)
0
-
0
     # :nodoc
0
     # keeping inspect around simply to make irb happy.
0
     def inspect; end
0
@@ -62,9 +59,8 @@
0
       super
0
     end
0
     
0
- def run(filter, *args)
0
- node = args.shift
0
- args.collect! {|a| parser.nil? ? a : parser.variables.substitute(a) }
0
+ def run(filter, node, *args)
0
+
0
       __send__(filter, node, *args) if respond_to?(filter)
0
     end
0
 
...
10
11
12
13
 
14
15
16
...
51
52
53
54
55
 
 
56
57
58
...
10
11
12
 
13
14
15
16
...
51
52
53
 
 
54
55
56
57
58
0
@@ -10,7 +10,7 @@
0
   
0
     def initialize(doc='')
0
       self.doc = Hpricot(doc)
0
- self.filter_sandbox = Hpreserve::Filters.create(self)
0
+ self.filter_sandbox = Hpreserve::Filters.create
0
     end
0
   
0
     def variables=(vars)
0
@@ -51,8 +51,8 @@
0
       filters.each do |filterset|
0
         filter = filterset.shift
0
         next unless filter_sandbox.respond_to?(filter)
0
- args = [node, filterset].flatten
0
- filter_sandbox.__send__(filter, *args)
0
+ args = filterset.collect {|a| variables.substitute(a) }
0
+ filter_sandbox.run(filter, node, *args)
0
       end
0
     end
0
     
...
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
...
20
21
22
 
 
 
 
 
 
 
 
 
23
24
25
0
@@ -20,15 +20,6 @@
0
       @doc.at('span').inner_html.should == 'Foo'
0
     end
0
     
0
- it "parses arguments for variables and interprets them" do
0
- @doc = Hpricot('<span>foo</span>')
0
- vars = mock('variables')
0
- vars.should_receive(:substitute).with('{thing.link}/bar').and_return('foo/bar')
0
- parser = mock('parser', :variables => vars)
0
- @f = Hpreserve::Filters.create( parser )
0
- @f.run('link', @doc.at('span'), '{thing.link}/bar')
0
- @doc.at('span')['href'].should == 'foo/bar'
0
- end
0
   end
0
   
0
   describe "filterstring parser" do

Comments

    No one has commented yet.