public
Description: A Ruby web application framework
Homepage: http://www.mackframework.com
Clone URL: git://github.com/markbates/mack.git
Click here to lend your support to: mack and make a donation at www.pledgie.com !
ticket: 3


git-svn-id: http://svn.mackframework.com/mack/trunk@9 
0ae8a1fa-b247-0410-934d-a6da73ed6d1e
markbates (author)
Mon Mar 10 14:00:31 -0700 2008
commit  76a7b9714665a1f5b2ecbb7a04c2cc8a4bd5df2a
tree    6ce9a57a9860b5088bfb9940d4af155d67cec3f9
parent  61c68509216ea66dbdc589b62e7c9dfebf4662fe
...
83
84
85
 
 
86
 
87
88
89
90
91
 
 
 
 
 
 
 
 
92
93
94
...
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
0
@@ -83,11 +83,22 @@ module Mack
0
       end
0
     end
0
     
0
+ # Potentially raised if a render(:url => "....") is a status other than 200.
0
+ # This is only raised if :raise_exception is passed in as true to the render options.
0
     class UnsuccessfulRenderUrl < StandardError
0
+ # Takes the uri trying to be rendered the Net::HTTP response object.
0
       def initialize(uri, response)
0
         super("URI: #{uri}; status: #{response.code}; body: #{response.body}")
0
       end
0
     end
0
     
0
+ # Raised if an unsupported method, ie post or delete, is used with render url.
0
+ class UnsupportRenderUrlMethodType < StandardError
0
+ # Takes the method tried.
0
+ def initialize(method)
0
+ super("METHOD: #{method.to_s.upcase} is unsupported by render url.")
0
+ end
0
+ end
0
+
0
   end # Errors
0
 end # Mack
0
\ No newline at end of file
...
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
 
 
 
 
 
 
 
 
 
87
 
 
88
 
89
90
91
92
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
93
94
95
...
70
71
72
 
 
 
 
 
 
 
 
 
 
 
 
 
 
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
 
88
 
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
0
@@ -70,26 +70,47 @@ class Mack::ViewBinder
0
     options = {:method => :get, :domain => app_config.mack.default_domain, :raise_exception => false}.merge(options)
0
     case options[:method]
0
     when :get
0
- Timeout::timeout(app_config.mack.render_url_timeout || 5) do
0
- url = options[:url]
0
- unless url.match(/^[a-zA-Z]+:\/\//)
0
- url = File.join(options[:domain], options[:url])
0
- end
0
- uri = URI.parse(url)
0
- response = Net::HTTP.get_response(uri)
0
- if response.code == "200"
0
- return response.body
0
- else
0
- if options[:raise_exception]
0
- raise Mack::Errors::UnsuccessfulRenderUrl.new(uri, response)
0
- else
0
- return ""
0
+ do_render_url(options) do |uri, options|
0
+ unless options[:parameters].empty?
0
+ uri = uri.to_s
0
+ uri << "?"
0
+ options[:parameters].each_pair do |k,v|
0
+ uri << URI.encode(k.to_s)
0
+ uri << "="
0
+ uri << URI.encode(v.to_s)
0
+ uri << "&"
0
           end
0
+ uri.gsub!(/&$/, "")
0
+ uri = URI.parse(uri)
0
         end
0
+ Net::HTTP.get_response(uri)
0
       end
0
- when :put
0
     when :post
0
- when :delete
0
+ do_render_url(options) do |uri, options|
0
+ Net::HTTP.post_form(uri, options[:parameters] || {})
0
+ end
0
+ else
0
+ raise Mack::Errors::UnsupportRenderUrlMethodType.new(options[:method])
0
+ end
0
+ end
0
+
0
+ def do_render_url(options)
0
+ Timeout::timeout(app_config.mack.render_url_timeout || 5) do
0
+ url = options[:url]
0
+ unless url.match(/^[a-zA-Z]+:\/\//)
0
+ url = File.join(options[:domain], options[:url])
0
+ end
0
+ uri = URI.parse(url)
0
+ response = yield uri, options
0
+ if response.code == "200"
0
+ return response.body
0
+ else
0
+ if options[:raise_exception]
0
+ raise Mack::Errors::UnsuccessfulRenderUrl.new(uri, response)
0
+ else
0
+ return ""
0
+ end
0
+ end
0
     end
0
   end
0
   
...
5
6
7
8
 
9
10
11
12
 
13
14
15
16
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
17
18
19
20
21
 
22
23
24
 
 
 
 
 
 
 
 
 
 
 
25
26
27
...
33
34
35
36
 
37
38
39
 
40
41
42
43
44
45
 
 
 
 
 
 
 
 
 
 
46
47
48
...
5
6
7
 
8
9
10
11
 
12
13
14
15
 
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
...
65
66
67
 
68
69
70
 
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
0
@@ -5,23 +5,55 @@ class ViewBinderTest < Test::Unit::TestCase
0
   class RenderUrlController < Mack::Controller::Base
0
     
0
     def good_local_render_url
0
- render(:url => "http://testing.mackframework.com/hello_world.html")
0
+ render(:url => "http://testing.mackframework.com/render_url_get_test.php", :parameters => {:age => 31})
0
     end
0
     
0
     def bad_local_render_url
0
- render(:url => "http://testing.mackframework.com/i_dont_exist.html")
0
+ render(:url => "http://testing.mackframework.com/i_dont_exist.html", :parameters => {:age => 31})
0
     end
0
     
0
     def bad_local_render_with_raise_url
0
- render(:url => "http://testing.mackframework.com/i_dont_exist.html", :raise_exception => true)
0
+ render(:url => "http://testing.mackframework.com/i_dont_exist.html", :raise_exception => true, :parameters => {:age => 31})
0
+ end
0
+
0
+ def good_post_local_render_url
0
+ render(:url => "http://testing.mackframework.com/render_url_post_test.php", :method => :post, :parameters => {:age => 31})
0
+ end
0
+
0
+ def bad_post_local_render_url
0
+ render(:url => "http://testing.mackframework.com/i_dont_exist.php", :method => :post, :parameters => {:age => 31})
0
+ end
0
+
0
+ def bad_post_local_render_with_raise_url
0
+ render(:url => "http://testing.mackframework.com/i_dont_exist.php", :raise_exception => true, :method => :post, :parameters => {:age => 31})
0
+ end
0
+
0
+ def good_put_local_render_url
0
+ render(:url => "http://testing.mackframework.com/render_url_post_test.php", :method => :put, :parameters => {:age => 31})
0
+ end
0
+
0
+ def good_delete_local_render_url
0
+ render(:url => "http://testing.mackframework.com/render_url_post_test.php", :method => :delete, :parameters => {:age => 31})
0
     end
0
     
0
   end
0
   
0
   Mack::Routes.build do |r|
0
+ # gets
0
     r.good_local_render "/good_local_render_url", :controller => "view_binder_test/render_url", :action => :good_local_render_url
0
     r.bad_local_render "/bad_local_render_url", :controller => "view_binder_test/render_url", :action => :bad_local_render_url
0
     r.bad_local_render_with_raise "/bad_local_render_with_raise_url", :controller => "view_binder_test/render_url", :action => :bad_local_render_with_raise_url
0
+
0
+ # posts
0
+ r.good_post_local_render "/good_post_local_render_url", :controller => "view_binder_test/render_url", :action => :good_post_local_render_url
0
+ r.bad_post_local_render "/bad_post_local_render_url", :controller => "view_binder_test/render_url", :action => :bad_post_local_render_url
0
+ r.bad_post_local_render_with_raise "/bad_post_local_render_with_raise_url", :controller => "view_binder_test/render_url", :action => :bad_post_local_render_with_raise_url
0
+
0
+ # puts
0
+ r.good_put_local_render "/good_put_local_render_url", :controller => "view_binder_test/render_url", :action => :good_put_local_render_url
0
+
0
+ # deletes
0
+ r.good_delete_local_render "/good_delete_local_render_url", :controller => "view_binder_test/render_url", :action => :good_delete_local_render_url
0
   end
0
   
0
   def test_render
0
@@ -33,15 +65,25 @@ class ViewBinderTest < Test::Unit::TestCase
0
     assert_match "This Is My Inline Text!", response.body
0
   end
0
   
0
- def test_render_url
0
+ def test_render_get_url
0
     remote_test do
0
       get good_local_render_url
0
- assert_match "Hello World", response.body
0
+ assert_match "age: 31", response.body
0
       get bad_local_render_url
0
       assert_equal "", response.body
0
       assert_raise(Mack::Errors::UnsuccessfulRenderUrl) { get bad_local_render_with_raise_url }
0
     end
0
   end
0
   
0
+ def test_render_post_url
0
+ remote_test do
0
+ get good_post_local_render_url
0
+ assert_match "age: 31", response.body
0
+ get bad_post_local_render_url
0
+ assert_equal "", response.body
0
+ assert_raise(Mack::Errors::UnsuccessfulRenderUrl) { get bad_post_local_render_with_raise_url }
0
+ end
0
+ end
0
+
0
   
0
 end
0
\ No newline at end of file

Comments

    No one has commented yet.