commit
						564cdcac0b
					
				
					 6 changed files with 204 additions and 0 deletions
				
			
		
							
								
								
									
										33
									
								
								docs/README.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										33
									
								
								docs/README.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,33 @@
 | 
			
		|||
# Kemal Documentation
 | 
			
		||||
 | 
			
		||||
This README includes documentation of Kemal, the Crystal Web Framework.
 | 
			
		||||
 | 
			
		||||
## What is Kemal?
 | 
			
		||||
 | 
			
		||||
Kemal is a web server working on Crystal language. Strongly inspired on Sinatra project.
 | 
			
		||||
_Needs more info_
 | 
			
		||||
 | 
			
		||||
## What is Crystal?
 | 
			
		||||
 | 
			
		||||
Crystal is a programming language based on *Ruby* syntax.
 | 
			
		||||
 | 
			
		||||
## Advantages of using Kemal
 | 
			
		||||
 | 
			
		||||
 - Too easy to learn and start to develop.
 | 
			
		||||
 - Since it's working on LLVM, it's too fast.
 | 
			
		||||
 - You can deploy it on *Heroku*.
 | 
			
		||||
 | 
			
		||||
## The Name
 | 
			
		||||
 | 
			
		||||
Kemal means *Mature, grown up* in Turkish and Arabic.
 | 
			
		||||
 | 
			
		||||
## How to start?
 | 
			
		||||
 | 
			
		||||
 - [Getting Started Tutorial](./tutorial.md)
 | 
			
		||||
 - [Using Dynamic Templates (Not Supported Yet)](./templates.md)
 | 
			
		||||
 - [Parsing HTTP requests and Form Data](./http-requests.md)
 | 
			
		||||
 - [Uploading Files](./upload.md)
 | 
			
		||||
 - [Serving Static Files](./statics.md)
 | 
			
		||||
 - [Serving JSON API](./json.md)
 | 
			
		||||
 - [Restful Web Services](./rest.md)
 | 
			
		||||
 - [How to connect to Database](./database.md)
 | 
			
		||||
							
								
								
									
										40
									
								
								docs/http-requests.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								docs/http-requests.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,40 @@
 | 
			
		|||
# HTTP Requests
 | 
			
		||||
 | 
			
		||||
You should use `env` variable to handle HTTP params. For both `get` and `post` (and others) methods, you should use `env` object.
 | 
			
		||||
 | 
			
		||||
```ruby
 | 
			
		||||
# Matches /hello/kemal
 | 
			
		||||
  get "/hello/:name" do |env|
 | 
			
		||||
    name = env.params["name"]
 | 
			
		||||
    "Hello back to #{name}"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Matches /resize?width=200&height=200
 | 
			
		||||
  get "/resize" do |env|
 | 
			
		||||
    width = env.params["width"]
 | 
			
		||||
    height = env.params["height"]
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Easily access JSON payload from the params.
 | 
			
		||||
  # The request content type needs to be application/json
 | 
			
		||||
  # The payload
 | 
			
		||||
  # {"name": "Serdar", "likes": ["Ruby", "Crystal"]}
 | 
			
		||||
  post "/json_params" do |env|
 | 
			
		||||
    name = env.params["name"] as String
 | 
			
		||||
    likes = env.params["likes"] as Array
 | 
			
		||||
    "#{name} likes #{likes.each.join(',')}"
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Set the content as application/json and return JSON
 | 
			
		||||
  get "/user.json" do |env|
 | 
			
		||||
    kemal = {name: "Kemal", language: "Crystal"}
 | 
			
		||||
    env.content_type = "application/json"
 | 
			
		||||
    kemal.to_json
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  # Add headers to your response
 | 
			
		||||
  get "/headers" do |env|
 | 
			
		||||
    env.add_header "Accept-Language", "tr"
 | 
			
		||||
    env.add_header "Authorization", "Token 12345"
 | 
			
		||||
  end
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										16
									
								
								docs/json.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								docs/json.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,16 @@
 | 
			
		|||
# Serving JSON API
 | 
			
		||||
 | 
			
		||||
Just use `to_json` method to return.
 | 
			
		||||
 | 
			
		||||
```ruby
 | 
			
		||||
require "kemal"
 | 
			
		||||
require "json"
 | 
			
		||||
 | 
			
		||||
# You can easily access the context and set content_type like 'application/json'.
 | 
			
		||||
# Look how easy to build a JSON serving API.
 | 
			
		||||
get "/" do |env|
 | 
			
		||||
  env.content_type = "application/json"
 | 
			
		||||
  {name: "Serdar", age: 27}.to_json
 | 
			
		||||
end
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										25
									
								
								docs/rest.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										25
									
								
								docs/rest.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,25 @@
 | 
			
		|||
# Restful Web Services
 | 
			
		||||
 | 
			
		||||
You can handle HTTP methods as easy as writing method names and the route with a code block. Kemal will handle all the hard work.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
  get "/" do
 | 
			
		||||
  .. show something ..
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  post "/" do
 | 
			
		||||
  .. create something ..
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  put "/" do
 | 
			
		||||
  .. replace something ..
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  patch "/" do
 | 
			
		||||
  .. modify something ..
 | 
			
		||||
  end
 | 
			
		||||
 | 
			
		||||
  delete "/" do
 | 
			
		||||
  .. annihilate something ..
 | 
			
		||||
  end  
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										31
									
								
								docs/statics.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										31
									
								
								docs/statics.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,31 @@
 | 
			
		|||
# Statics
 | 
			
		||||
 | 
			
		||||
Add your files to `public` directory and Kemal will serve these files immediately.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
app/
 | 
			
		||||
  src/
 | 
			
		||||
    awesome_web_project.cr
 | 
			
		||||
  public/
 | 
			
		||||
    js/
 | 
			
		||||
      jquery.js
 | 
			
		||||
      awesome_web_project.js
 | 
			
		||||
    css/
 | 
			
		||||
      awesome_web_project.css
 | 
			
		||||
    index.html
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Open index.html and add
 | 
			
		||||
 | 
			
		||||
```html
 | 
			
		||||
<html>
 | 
			
		||||
 <head>
 | 
			
		||||
   <script src="/js/jquery.js"></script>
 | 
			
		||||
   <script src="/js/awesome_web_project.js"></script>
 | 
			
		||||
   <link rel="stylesheet" href="/css/awesome_web_project.css"/>
 | 
			
		||||
 </head>
 | 
			
		||||
 <body>
 | 
			
		||||
   ...
 | 
			
		||||
 </body>
 | 
			
		||||
</html>
 | 
			
		||||
```
 | 
			
		||||
							
								
								
									
										59
									
								
								docs/tutorial.md
									
										
									
									
									
										Normal file
									
								
							
							
						
						
									
										59
									
								
								docs/tutorial.md
									
										
									
									
									
										Normal file
									
								
							| 
						 | 
				
			
			@ -0,0 +1,59 @@
 | 
			
		|||
# Kemal Tutorial
 | 
			
		||||
 | 
			
		||||
## Install Crystal
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
brew update
 | 
			
		||||
brew install crystal-lang
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Installing Kemal
 | 
			
		||||
 | 
			
		||||
You should create your application first:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
crystal init app awesome_web_project
 | 
			
		||||
cd awesome_web_project
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Then add *kemal* to the `shard.yml` file as a dependency.
 | 
			
		||||
 | 
			
		||||
```yml
 | 
			
		||||
dependencies:
 | 
			
		||||
  kemal:
 | 
			
		||||
    github: sdogruyol/kemal
 | 
			
		||||
    branch: master
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
You should run `shards` to get dependencies:
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
shards install
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Include Kemal into your project
 | 
			
		||||
 | 
			
		||||
Open `awesome_web_project/src/awesome_web_project.cr` and require `kemal` to use Kemal.
 | 
			
		||||
 | 
			
		||||
```ruby
 | 
			
		||||
require 'kemal'
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Hack your project
 | 
			
		||||
 | 
			
		||||
Do some awesome stuff with awesome Kemal.
 | 
			
		||||
 | 
			
		||||
```ruby
 | 
			
		||||
get "/" do
 | 
			
		||||
  "Hello World!"
 | 
			
		||||
end
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
## Run your awesome web project.
 | 
			
		||||
 | 
			
		||||
```
 | 
			
		||||
crystal build --release src/awesome_web_project.cr
 | 
			
		||||
./awesome_web_project
 | 
			
		||||
```
 | 
			
		||||
 | 
			
		||||
Now you can be happy with your new, very fast, readable web project.
 | 
			
		||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue