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
|
||||
```
|
||||
|
||||
### 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
|
||||
|
||||
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?
|
||||
|
||||
- [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)
|
||||
- [Uploading Files](./upload.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…
Reference in a new issue