chespirito 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +46 -0
- data/chespirito.gemspec +1 -1
- data/lib/chespirito/app.rb +6 -11
- data/lib/chespirito/router.rb +34 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5d3588983bf384783e2066d7bb71175b0fafca6a17c35212526dbbc46f6a5209
|
4
|
+
data.tar.gz: a9a8a41c4bbe2113112cc81428b302427861c5dafab63344a6bb54339a270384
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 85db7c0ac953324ed3c0102ec757af300384d1614a99446ed693f376444cf94dfa713ecca0a4cde330be3c0fd7cbc07628d542b571808e17434893fa6ece2a69
|
7
|
+
data.tar.gz: 0bf474e6e562247c38126250bf53b799c66f18a1aeeee451a43c6c5190c83ecc6e0b6156215fea01576269e67f22e9b42d1aa453f189bb8c3751f68fd9ec487f
|
data/README.md
CHANGED
@@ -51,6 +51,52 @@ Usage: make <target>
|
|
51
51
|
gem.yank Removes a specific version from the Rubygems
|
52
52
|
```
|
53
53
|
|
54
|
+
## Boostrapping an application using Chespirito and Adelnor
|
55
|
+
|
56
|
+
1. Install the gems:
|
57
|
+
```bash
|
58
|
+
$ gem install chespirito adelnor
|
59
|
+
```
|
60
|
+
|
61
|
+
2. Register the Chespirito app and routes:
|
62
|
+
|
63
|
+
```ruby
|
64
|
+
class MyApp
|
65
|
+
def self.application
|
66
|
+
Chespirito::App.configure do |app|
|
67
|
+
app.register_route('GET', '/', [HelloController, :index])
|
68
|
+
app.register_route('POST', '/', [HelloController, :create])
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
72
|
+
```
|
73
|
+
|
74
|
+
3. Create the Controller and action:
|
75
|
+
|
76
|
+
```ruby
|
77
|
+
class HelloController < Chespirito::Controller
|
78
|
+
def index
|
79
|
+
response.status = 200
|
80
|
+
|
81
|
+
response.headers['Content-Type'] = 'text/html'
|
82
|
+
|
83
|
+
response.body = '<h1>Hello, world!</h1>'
|
84
|
+
end
|
85
|
+
|
86
|
+
def create
|
87
|
+
response.status = 204
|
88
|
+
end
|
89
|
+
end
|
90
|
+
```
|
91
|
+
|
92
|
+
4. Run the app using Adelnor (or you can choose other web server like Puma, Unicorn, etc):
|
93
|
+
|
94
|
+
```ruby
|
95
|
+
Adelnor::Server.run MyApp.application, 3000
|
96
|
+
```
|
97
|
+
|
98
|
+
5. Open `localhost:3000` and cheers!
|
99
|
+
|
54
100
|
----
|
55
101
|
|
56
102
|
[ASCII art generator](http://patorjk.com/software/taag/#p=display&f=Graffiti&t=Type%20Something%20)
|
data/chespirito.gemspec
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
4
|
spec.name = 'chespirito'
|
5
|
-
spec.version = '0.0.
|
5
|
+
spec.version = '0.0.2'
|
6
6
|
spec.summary = 'Chespirito Ruby web framework'
|
7
7
|
spec.description = 'A dead simple, yet Rack-compatible, web framework written in Ruby'
|
8
8
|
spec.authors = ['Leandro Proença']
|
data/lib/chespirito/app.rb
CHANGED
@@ -1,11 +1,12 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require_relative './request'
|
4
|
+
require_relative './router'
|
4
5
|
|
5
6
|
module Chespirito
|
6
7
|
class App
|
7
8
|
def initialize
|
8
|
-
@
|
9
|
+
@router = ::Chespirito::Router.new
|
9
10
|
end
|
10
11
|
|
11
12
|
def self.configure
|
@@ -14,19 +15,13 @@ module Chespirito
|
|
14
15
|
new.tap { |app| yield(app) }
|
15
16
|
end
|
16
17
|
|
17
|
-
def register_route(
|
18
|
-
|
19
|
-
end
|
20
|
-
|
21
|
-
def lookup(request)
|
22
|
-
controller_klass, action = @routes[route_key(request.verb, request.path)]
|
23
|
-
|
24
|
-
return unless controller_klass
|
18
|
+
def register_route(*attrs)
|
19
|
+
attrs => [verb, path, trait]
|
25
20
|
|
26
|
-
|
21
|
+
@router.register_route(verb, path, trait)
|
27
22
|
end
|
28
23
|
|
29
|
-
def
|
24
|
+
def lookup(request) = @router.lookup(request)
|
30
25
|
|
31
26
|
def call(env)
|
32
27
|
request = ::Chespirito::Request.build(env)
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative './request'
|
4
|
+
require_relative './response'
|
5
|
+
|
6
|
+
module Chespirito
|
7
|
+
class Router
|
8
|
+
def initialize
|
9
|
+
@routes = {}
|
10
|
+
end
|
11
|
+
|
12
|
+
def register_route(verb, path, trait)
|
13
|
+
@routes[route_key(verb, path)] = trait
|
14
|
+
end
|
15
|
+
|
16
|
+
def lookup(request)
|
17
|
+
controller_klass, action = @routes[route_key(request.verb, request.path)]
|
18
|
+
|
19
|
+
return not_found_response unless controller_klass
|
20
|
+
|
21
|
+
controller_klass.dispatch(action, request)
|
22
|
+
end
|
23
|
+
|
24
|
+
def route_key(verb, path) = "#{verb} #{path}"
|
25
|
+
|
26
|
+
def not_found_response
|
27
|
+
::Chespirito::Response.new.tap do |response|
|
28
|
+
response.status = 404
|
29
|
+
response.headers = {}
|
30
|
+
response.body = ''
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: chespirito
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Leandro Proença
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-05-
|
11
|
+
date: 2022-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rack
|
@@ -53,6 +53,7 @@ files:
|
|
53
53
|
- lib/chespirito/controller.rb
|
54
54
|
- lib/chespirito/request.rb
|
55
55
|
- lib/chespirito/response.rb
|
56
|
+
- lib/chespirito/router.rb
|
56
57
|
homepage: https://github.com/leandronsp/chespirito
|
57
58
|
licenses:
|
58
59
|
- MIT
|