mirror of
				https://gitea.invidious.io/iv-org/shard-kemal.git
				synced 2024-08-15 00:53:36 +00:00 
			
		
		
		
	Add render macro to kemal core to have dynamic rendering mechanism. It actually binds built-in ecr parser to the Kemal as a macro.
This commit is contained in:
		
							parent
							
								
									692939dfe8
								
							
						
					
					
						commit
						945fa59a6c
					
				
					 6 changed files with 73 additions and 1 deletions
				
			
		
							
								
								
									
										16
									
								
								README.md
									
										
									
									
									
								
							
							
						
						
									
										16
									
								
								README.md
									
										
									
									
									
								
							|  | @ -147,6 +147,22 @@ end | ||||||
| Kemal.config.add_handler CustomHandler.new | Kemal.config.add_handler CustomHandler.new | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
|  | ### Views | ||||||
|  | 
 | ||||||
|  | You can use ERB-like built-in **ECR** views to render files. | ||||||
|  | 
 | ||||||
|  | ```crystal | ||||||
|  | get '/:name' do | ||||||
|  |   render "views/hello.ecr" | ||||||
|  | end | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | And you should have an `hello.ecr` view. It will have the same context as the method. | ||||||
|  | 
 | ||||||
|  | ```erb | ||||||
|  | Hello <%= env.params["name"] %> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
| ## Static Files | ## Static Files | ||||||
| 
 | 
 | ||||||
| Kemal has built-in support for serving your static files. You need to put your static files under your ```/public``` directory. | Kemal has built-in support for serving your static files. You need to put your static files under your ```/public``` directory. | ||||||
|  |  | ||||||
|  | @ -23,7 +23,7 @@ Kemal means *Mature, grown up* in Turkish. | ||||||
| ## How to start? | ## How to start? | ||||||
| 
 | 
 | ||||||
|  - [Getting Started Tutorial](./tutorial.md) |  - [Getting Started Tutorial](./tutorial.md) | ||||||
|  - [Using Dynamic Templates (Not Supported Yet)](./templates.md) |  - [Using Dynamic Views](./views.md) | ||||||
|  - [Parsing HTTP requests and Form Data](./http-requests.md) |  - [Parsing HTTP requests and Form Data](./http-requests.md) | ||||||
|  - [Uploading Files](./upload.md) |  - [Uploading Files](./upload.md) | ||||||
|  - [Serving Static Files](./statics.md) |  - [Serving Static Files](./statics.md) | ||||||
|  |  | ||||||
							
								
								
									
										28
									
								
								docs/views.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										28
									
								
								docs/views.md
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,28 @@ | ||||||
|  | # Views | ||||||
|  | 
 | ||||||
|  | You can use ECR to build views. Kemal serves a `render` macro to use built-in `ECR` | ||||||
|  | library. | ||||||
|  | 
 | ||||||
|  | ## Writing Views | ||||||
|  | 
 | ||||||
|  | The ECR is actually ERB. | ||||||
|  | 
 | ||||||
|  | ``` | ||||||
|  | src/ | ||||||
|  |   views/ | ||||||
|  |     hello.ecr | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | Write `hello.ecr` | ||||||
|  | ```erb | ||||||
|  | Hello <%= your_name %> | ||||||
|  | ``` | ||||||
|  | 
 | ||||||
|  | ## Embedding View File | ||||||
|  | 
 | ||||||
|  | ```crystal | ||||||
|  | get '/' do |env| | ||||||
|  |   your_name = "Kemal" | ||||||
|  |   render "views/hello.ecr" | ||||||
|  | end | ||||||
|  | ``` | ||||||
							
								
								
									
										1
									
								
								spec/asset/hello.ecr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								spec/asset/hello.ecr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1 @@ | ||||||
|  | Hello <%= env.params["name"] %> | ||||||
							
								
								
									
										13
									
								
								spec/view_spec.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										13
									
								
								spec/view_spec.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,13 @@ | ||||||
|  | require "./spec_helper" | ||||||
|  | 
 | ||||||
|  | describe "Views" do | ||||||
|  |   it "renders file" do | ||||||
|  |     kemal = Kemal::Handler.new | ||||||
|  |     kemal.add_route "GET", "/view/:name" do |env| | ||||||
|  |       render "spec/asset/hello.ecr" | ||||||
|  |     end | ||||||
|  |     request = HTTP::Request.new("GET", "/view/world") | ||||||
|  |     response = kemal.call(request) | ||||||
|  |     response.body.should contain("Hello world") | ||||||
|  |   end | ||||||
|  | end | ||||||
							
								
								
									
										14
									
								
								src/kemal/view.cr
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										14
									
								
								src/kemal/view.cr
									
										
									
									
									
										Normal file
									
								
							|  | @ -0,0 +1,14 @@ | ||||||
|  | # Kemal render uses built-in ECR to render methods. | ||||||
|  | 
 | ||||||
|  | ## Usage | ||||||
|  | # get '/' do | ||||||
|  | #   render 'hello.ecr' | ||||||
|  | # end | ||||||
|  | 
 | ||||||
|  | require "ecr/macros" | ||||||
|  | 
 | ||||||
|  | macro render(filename) | ||||||
|  |   String.build do |__view__| | ||||||
|  |     embed_ecr {{filename}}, "__view__" | ||||||
|  |   end | ||||||
|  | end | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue