yaframework 0.4.7 → 0.5.1
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/CHANGELOG.md +16 -0
- data/Gemfile.lock +3 -1
- data/examples/README.md +43 -5
- data/examples/before_after_hooks.rb +20 -0
- data/examples/configure.rb +14 -0
- data/examples/error_handling.rb +1 -1
- data/examples/halts_and_redirects.rb +1 -1
- data/examples/helpers.rb +26 -0
- data/examples/rendering/app.rb +15 -0
- data/examples/rendering/config.ru +6 -0
- data/examples/rendering/views/index.erb +4 -0
- data/examples/rendering/views/layout.erb +10 -0
- data/examples/rendering/views/partial.erb +1 -0
- data/lib/yaframework.rb +1 -0
- data/lib/yaframework/base.rb +59 -3
- data/lib/yaframework/render.rb +46 -0
- data/lib/yaframework/version.rb +1 -1
- data/yaframework.gemspec +2 -1
- metadata +25 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b01d1643e6921880fd3630c0b5898c502a0b3ff54c602f63ac54f9d32e263b36
|
4
|
+
data.tar.gz: 602742bc864f51d7151d946710d47583e2b3a7abfe257ffb74c2f2d48418ff89
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 80d9262cc6a0206ecbd058c3bb6d65c78b4abe0192924dd27685d61fd91ec90c60e85d3a3f7792e8ce6f45d4c6d1b6e30309fa6d66f3988debd0a8fa450bd1b6
|
7
|
+
data.tar.gz: 9d95222a443494ca862a16499f42662053515765c3cd2dbb06050b469b333f852c7097c1de16904704bc731a18c653a3980cd199b2dfe8738e5a1424148ce6ce
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,19 @@
|
|
1
|
+
## [0.5.1] - 2021-07-26
|
2
|
+
|
3
|
+
- `helpers` and `configure` methods added
|
4
|
+
|
5
|
+
## [0.5.0] - 2021-07-25
|
6
|
+
|
7
|
+
- Templates rendering added
|
8
|
+
|
9
|
+
## [0.4.9] - 2021-07-25
|
10
|
+
|
11
|
+
- Some useful aliases added
|
12
|
+
|
13
|
+
## [0.4.8] - 2021-07-25
|
14
|
+
|
15
|
+
- Before/after hooks added
|
16
|
+
|
1
17
|
## [0.4.7] - 2021-07-25
|
2
18
|
|
3
19
|
- Handling 404 error fixed
|
data/Gemfile.lock
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
yaframework (0.
|
4
|
+
yaframework (0.5.1)
|
5
5
|
rack (~> 2.2, >= 2.2.3)
|
6
|
+
tilt (~> 2.0)
|
6
7
|
|
7
8
|
GEM
|
8
9
|
remote: https://rubygems.org/
|
@@ -29,6 +30,7 @@ GEM
|
|
29
30
|
rubocop-ast (1.7.0)
|
30
31
|
parser (>= 3.0.1.1)
|
31
32
|
ruby-progressbar (1.11.0)
|
33
|
+
tilt (2.0.10)
|
32
34
|
unicode-display_width (2.0.0)
|
33
35
|
|
34
36
|
PLATFORMS
|
data/examples/README.md
CHANGED
@@ -2,21 +2,60 @@
|
|
2
2
|
|
3
3
|
Here are some examples of applications created with Yaframework:
|
4
4
|
|
5
|
-
1. [**Hello World**](https://github.com/maxbarsukov/yaframework/
|
5
|
+
1. [**Hello World**](https://github.com/maxbarsukov/yaframework/blob/master/examples/hello_world.rb)
|
6
6
|
|
7
|
-
A simple application that displays "Hello world" to you.
|
7
|
+
A simple application that displays "Hello world" to you.
|
8
8
|
|
9
9
|
|
10
|
-
2. [**Params**](https://github.com/maxbarsukov/yaframework/
|
10
|
+
2. [**Params**](https://github.com/maxbarsukov/yaframework/blob/master/examples/params.rb)
|
11
11
|
|
12
12
|
Shows how the application parameters can be used
|
13
13
|
|
14
14
|
|
15
|
-
3. [**Halts and Redirects**](https://github.com/maxbarsukov/yaframework/
|
15
|
+
3. [**Halts and Redirects**](https://github.com/maxbarsukov/yaframework/blob/master/examples/halts_and_redirects.rb)
|
16
16
|
|
17
17
|
Shows how to use halts and redirects
|
18
18
|
|
19
19
|
|
20
|
+
4. [**Headers**](https://github.com/maxbarsukov/yaframework/blob/master/examples/headers.rb)
|
21
|
+
|
22
|
+
How to add and view headers.
|
23
|
+
|
24
|
+
|
25
|
+
5. [**Error handling**](https://github.com/maxbarsukov/yaframework/blob/master/examples/error_handling.rb)
|
26
|
+
|
27
|
+
How to handle errors
|
28
|
+
|
29
|
+
|
30
|
+
6. [**Content Types**](https://github.com/maxbarsukov/yaframework/blob/master/examples/content_types.rb)
|
31
|
+
|
32
|
+
Using json, html, or plain text
|
33
|
+
|
34
|
+
|
35
|
+
7. [**Cookies**](https://github.com/maxbarsukov/yaframework/blob/master/examples/cookies.rb)
|
36
|
+
|
37
|
+
Adding and deleting cookies
|
38
|
+
|
39
|
+
|
40
|
+
8. [**Hooks**](https://github.com/maxbarsukov/yaframework/blob/master/examples/before_after_hooks.rb)
|
41
|
+
|
42
|
+
How to use `before` and `after` hooks
|
43
|
+
|
44
|
+
|
45
|
+
9. [**Rendering**](https://github.com/maxbarsukov/yaframework/tree/master/examples/rendering)
|
46
|
+
|
47
|
+
Rendering your `.erb` (or any else) files and partials using tilt.
|
48
|
+
|
49
|
+
|
50
|
+
10. [**Helpers**](https://github.com/maxbarsukov/yaframework/blob/master/examples/helpers.rb)
|
51
|
+
|
52
|
+
Example of using helpers
|
53
|
+
|
54
|
+
|
55
|
+
11. [**Configure**](https://github.com/maxbarsukov/yaframework/blob/master/examples/configure.rb)
|
56
|
+
|
57
|
+
How to configure your application
|
58
|
+
|
20
59
|
## Installation
|
21
60
|
|
22
61
|
Clone this repo and go to this folder.
|
@@ -25,4 +64,3 @@ Then, run `bundle install` to install this gem.
|
|
25
64
|
## Run
|
26
65
|
|
27
66
|
Run with `ruby hello-world.rb` or any other file and view at http://localhost:4567
|
28
|
-
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "yaframework"
|
4
|
+
app = Yaframework::Application
|
5
|
+
|
6
|
+
app.before do
|
7
|
+
@page_updates ||= 0
|
8
|
+
@page_updates += 1
|
9
|
+
end
|
10
|
+
|
11
|
+
app.after do
|
12
|
+
puts "Some log info: #{response.body}"
|
13
|
+
response.write "<br>Refresh the page and your next number will be #{@page_updates + 1}!"
|
14
|
+
end
|
15
|
+
|
16
|
+
app.get "/" do
|
17
|
+
"Hello, your num is: #{@page_updates}"
|
18
|
+
end
|
19
|
+
|
20
|
+
app.listen(4567)
|
data/examples/error_handling.rb
CHANGED
data/examples/helpers.rb
ADDED
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "yaframework"
|
4
|
+
app = Yaframework::Application
|
5
|
+
|
6
|
+
app.helpers do
|
7
|
+
def hello
|
8
|
+
"Hello"
|
9
|
+
end
|
10
|
+
|
11
|
+
def colon
|
12
|
+
", "
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
app.helpers do
|
17
|
+
def world
|
18
|
+
"world!"
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
app.get "/" do
|
23
|
+
hello + colon + world
|
24
|
+
end
|
25
|
+
|
26
|
+
app.listen(9292)
|
@@ -0,0 +1 @@
|
|
1
|
+
<p>Yout number was <b><%= number %></b></p>
|
data/lib/yaframework.rb
CHANGED
data/lib/yaframework/base.rb
CHANGED
@@ -1,13 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "rack"
|
4
|
+
require_relative "../yaframework/render"
|
4
5
|
|
5
6
|
module Yaframework
|
6
7
|
class Base
|
7
|
-
|
8
|
+
include Yaframework::Render
|
9
|
+
|
10
|
+
attr_reader :routes, :request, :response, :env, :settings
|
11
|
+
alias req request
|
12
|
+
alias res response
|
8
13
|
|
9
14
|
def initialize
|
10
15
|
@routes = Hash.new([])
|
16
|
+
@before_hooks = []
|
17
|
+
@after_hooks = []
|
18
|
+
@settings = {}
|
11
19
|
@inbox = {}
|
12
20
|
end
|
13
21
|
|
@@ -17,6 +25,14 @@ module Yaframework
|
|
17
25
|
end
|
18
26
|
end
|
19
27
|
|
28
|
+
def helpers(&block)
|
29
|
+
exec(block) if block_given?
|
30
|
+
end
|
31
|
+
|
32
|
+
def configure(&block)
|
33
|
+
exec(block) if block_given?
|
34
|
+
end
|
35
|
+
|
20
36
|
def call(env)
|
21
37
|
@env = env
|
22
38
|
@request = Yaframework::Request.new @env
|
@@ -28,6 +44,18 @@ module Yaframework
|
|
28
44
|
throw :halt, response
|
29
45
|
end
|
30
46
|
|
47
|
+
def before(&block)
|
48
|
+
@before_hooks << block
|
49
|
+
end
|
50
|
+
|
51
|
+
def after(&block)
|
52
|
+
@after_hooks << block
|
53
|
+
end
|
54
|
+
|
55
|
+
def params
|
56
|
+
request.params
|
57
|
+
end
|
58
|
+
|
31
59
|
def handle(status, &block)
|
32
60
|
@inbox[status] = block
|
33
61
|
end
|
@@ -59,11 +87,14 @@ module Yaframework
|
|
59
87
|
response.status = 404 unless route
|
60
88
|
|
61
89
|
if @inbox[response.status]
|
62
|
-
response.write
|
90
|
+
response.write exec(@inbox[response.status])
|
63
91
|
return response.finish
|
64
92
|
end
|
65
93
|
|
66
|
-
|
94
|
+
exec_before_hooks
|
95
|
+
response.write exec(route[:handler]) if route
|
96
|
+
exec_after_hooks
|
97
|
+
|
67
98
|
response.finish
|
68
99
|
end
|
69
100
|
|
@@ -80,7 +111,32 @@ module Yaframework
|
|
80
111
|
end
|
81
112
|
route
|
82
113
|
end
|
114
|
+
|
115
|
+
def exec(action)
|
116
|
+
if action.respond_to? :to_sym
|
117
|
+
send(action)
|
118
|
+
else
|
119
|
+
instance_exec(&action)
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
def exec_before_hooks
|
124
|
+
exec_hooks @before_hooks
|
125
|
+
end
|
126
|
+
|
127
|
+
def exec_after_hooks
|
128
|
+
exec_hooks @after_hooks
|
129
|
+
end
|
130
|
+
|
131
|
+
def exec_hooks(hooks)
|
132
|
+
return true if hooks.nil?
|
133
|
+
|
134
|
+
hooks.each do |hook|
|
135
|
+
return false if exec(hook) == false
|
136
|
+
end
|
137
|
+
end
|
83
138
|
end
|
84
139
|
|
85
140
|
Application = Base.new
|
141
|
+
Application.setup
|
86
142
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "tilt"
|
4
|
+
|
5
|
+
module Yaframework
|
6
|
+
module Render
|
7
|
+
def setup(settings = {})
|
8
|
+
@settings = settings
|
9
|
+
@settings[:template_engine] ||= "erb"
|
10
|
+
@settings[:layout] ||= "layout"
|
11
|
+
@settings[:views] ||= File.expand_path("views", File.dirname($PROGRAM_NAME))
|
12
|
+
@settings[:options] ||= {
|
13
|
+
default_encoding: Encoding.default_external
|
14
|
+
}
|
15
|
+
end
|
16
|
+
|
17
|
+
def render(template, locals = {}, layout = @settings[:layout])
|
18
|
+
res.headers["Content-Type"] ||= "text/html; charset=utf-8"
|
19
|
+
res.write(view(template, locals, layout))
|
20
|
+
end
|
21
|
+
|
22
|
+
def view(template, locals = {}, layout = @settings[:layout])
|
23
|
+
partial(layout, locals.merge(content: partial(template, locals)))
|
24
|
+
end
|
25
|
+
|
26
|
+
def partial(template, locals = {})
|
27
|
+
_render(template_path(template), locals, @settings[:options])
|
28
|
+
end
|
29
|
+
|
30
|
+
def template_path(template)
|
31
|
+
dir = @settings[:views]
|
32
|
+
ext = @settings[:template_engine]
|
33
|
+
File.join(dir, "#{template}.#{ext}")
|
34
|
+
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def _render(template, locals = {}, options = {}, &block)
|
39
|
+
_cache.fetch(template) { Tilt.new(template, 1, options.merge(outvar: "@_output")) }.render(self, locals, &block)
|
40
|
+
end
|
41
|
+
|
42
|
+
def _cache
|
43
|
+
Thread.current[:_cache] ||= Tilt::Cache.new
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/yaframework/version.rb
CHANGED
data/yaframework.gemspec
CHANGED
@@ -33,5 +33,6 @@ Gem::Specification.new do |spec|
|
|
33
33
|
spec.add_development_dependency "rake", "~> 13.0"
|
34
34
|
spec.add_development_dependency "rubocop", "~> 1.7"
|
35
35
|
|
36
|
-
spec.
|
36
|
+
spec.add_dependency "rack", "~> 2.2", ">= 2.2.3"
|
37
|
+
spec.add_dependency "tilt", "~> 2.0"
|
37
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: yaframework
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.5.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- maxbarsukov
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2021-07-
|
11
|
+
date: 2021-07-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -86,6 +86,20 @@ dependencies:
|
|
86
86
|
- - ">="
|
87
87
|
- !ruby/object:Gem::Version
|
88
88
|
version: 2.2.3
|
89
|
+
- !ruby/object:Gem::Dependency
|
90
|
+
name: tilt
|
91
|
+
requirement: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - "~>"
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: '2.0'
|
96
|
+
type: :runtime
|
97
|
+
prerelease: false
|
98
|
+
version_requirements: !ruby/object:Gem::Requirement
|
99
|
+
requirements:
|
100
|
+
- - "~>"
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: '2.0'
|
89
103
|
description: What could be better than one more Sinatra?
|
90
104
|
email:
|
91
105
|
- maximbarsukov@bk.ru
|
@@ -107,15 +121,24 @@ files:
|
|
107
121
|
- bin/setup
|
108
122
|
- examples/Gemfile
|
109
123
|
- examples/README.md
|
124
|
+
- examples/before_after_hooks.rb
|
125
|
+
- examples/configure.rb
|
110
126
|
- examples/content_types.rb
|
111
127
|
- examples/cookies.rb
|
112
128
|
- examples/error_handling.rb
|
113
129
|
- examples/halts_and_redirects.rb
|
114
130
|
- examples/headers.rb
|
115
131
|
- examples/hello_world.rb
|
132
|
+
- examples/helpers.rb
|
116
133
|
- examples/params.rb
|
134
|
+
- examples/rendering/app.rb
|
135
|
+
- examples/rendering/config.ru
|
136
|
+
- examples/rendering/views/index.erb
|
137
|
+
- examples/rendering/views/layout.erb
|
138
|
+
- examples/rendering/views/partial.erb
|
117
139
|
- lib/yaframework.rb
|
118
140
|
- lib/yaframework/base.rb
|
141
|
+
- lib/yaframework/render.rb
|
119
142
|
- lib/yaframework/request.rb
|
120
143
|
- lib/yaframework/response.rb
|
121
144
|
- lib/yaframework/version.rb
|