mirror of
				https://gitea.invidious.io/iv-org/shard-kemal.git
				synced 2024-08-15 00:53:36 +00:00 
			
		
		
		
	Fix content rendering
This commit is contained in:
		
							parent
							
								
									59720fbd16
								
							
						
					
					
						commit
						d6dc893052
					
				
					 2 changed files with 19 additions and 13 deletions
				
			
		|  | @ -22,7 +22,7 @@ describe "Views" do | ||||||
|     end |     end | ||||||
|     request = HTTP::Request.new("GET", "/view/world") |     request = HTTP::Request.new("GET", "/view/world") | ||||||
|     client_response = call_request_on_app(request) |     client_response = call_request_on_app(request) | ||||||
|     client_response.body.should contain("Hello world") |     client_response.body.strip.should eq("<html>Hello world\n</html>") | ||||||
|   end |   end | ||||||
| 
 | 
 | ||||||
|   it "renders layout" do |   it "renders layout" do | ||||||
|  | @ -59,4 +59,14 @@ describe "Views" do | ||||||
|     client_response.body.should contain("Hello world") |     client_response.body.should contain("Hello world") | ||||||
|     client_response.body.should contain("<h1>Hello from otherside</h1>") |     client_response.body.should contain("<h1>Hello from otherside</h1>") | ||||||
|   end |   end | ||||||
|  | 
 | ||||||
|  |   it "does not render content_for that was not yielded" do | ||||||
|  |     get "/view/:name" do |env| | ||||||
|  |       name = env.params.url["name"] | ||||||
|  |       render "#{__DIR__}/asset/hello_with_content_for.ecr", "#{__DIR__}/asset/layout.ecr" | ||||||
|  |     end | ||||||
|  |     request = HTTP::Request.new("GET", "/view/world") | ||||||
|  |     client_response = call_request_on_app(request) | ||||||
|  |     client_response.body.should_not contain("<h1>Hello from otherside</h1>") | ||||||
|  |   end | ||||||
| end | end | ||||||
|  |  | ||||||
|  | @ -1,4 +1,4 @@ | ||||||
| CONTENT_FOR_BLOCKS = Hash(String, Tuple(String, Proc(String))).new | CONTENT_FOR_BLOCKS = Hash(String, Tuple(String, Proc(Nil))).new | ||||||
| 
 | 
 | ||||||
| # `content_for` is a set of helpers that allows you to capture | # `content_for` is a set of helpers that allows you to capture | ||||||
| # blocks inside views to be rendered later during the request. The most | # blocks inside views to be rendered later during the request. The most | ||||||
|  | @ -34,13 +34,7 @@ CONTENT_FOR_BLOCKS = Hash(String, Tuple(String, Proc(String))).new | ||||||
| # layout, inside the <head> tag, and each view can call `content_for` | # layout, inside the <head> tag, and each view can call `content_for` | ||||||
| # setting the appropriate set of tags that should be added to the layout. | # setting the appropriate set of tags that should be added to the layout. | ||||||
| macro content_for(key, file = __FILE__) | macro content_for(key, file = __FILE__) | ||||||
|   %proc = ->() { |   CONTENT_FOR_BLOCKS[{{key}}] = Tuple.new {{file}}, ->() { {{ yield }} } | ||||||
|     __view_io__ = IO::Memory.new |  | ||||||
|     {{ yield }} |  | ||||||
|     __view_io__.to_s |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   CONTENT_FOR_BLOCKS[{{key}}] = Tuple.new {{file}}, %proc |  | ||||||
|   nil |   nil | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
|  | @ -60,10 +54,12 @@ end | ||||||
| # ``` | # ``` | ||||||
| macro render(filename, layout) | macro render(filename, layout) | ||||||
|   __content_filename__ = {{filename}} |   __content_filename__ = {{filename}} | ||||||
|   io = IO::Memory.new |   content_io = IO::Memory.new | ||||||
|   content = ECR.embed {{filename}}, io |   ECR.embed {{filename}}, content_io | ||||||
|   ECR.embed {{layout}}, io |   content = content_io.to_s | ||||||
|   io.to_s |   layout_io = IO::Memory.new | ||||||
|  |   ECR.embed {{layout}}, layout_io | ||||||
|  |   layout_io.to_s | ||||||
| end | end | ||||||
| 
 | 
 | ||||||
| # Render view with the given filename. | # Render view with the given filename. | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue