mirror of
				https://gitea.invidious.io/iv-org/shard-kemal.git
				synced 2024-08-15 00:53:36 +00:00 
			
		
		
		
	
						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