yaframework 0.4.6 → 0.5.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b91dd4a4391f3f01d24edba73230b3831874bb2449c321e7ae795b47334ef68
4
- data.tar.gz: 8e3f1e8c24751c1591aad3c9d6602a51d270ab21ec574621dedc3a8a1a9c6df4
3
+ metadata.gz: 374739919ee6fdbc46ee3fc95f5604c162a358d21d593b6709cefa1add1af42a
4
+ data.tar.gz: 1a021b3a32f2358f5444759b30316e6670cd300121a265e95787889e58fdcc70
5
5
  SHA512:
6
- metadata.gz: adfc2c9f9cc37361d5be76853ff5d42435748fbe3e2816f47d4163303c013f428f793a26dd080a7e7fd65119e1f5910ab50f49aee735fdb57a5d3fed49f7fdd5
7
- data.tar.gz: 77677d979203ecda92b147618823084b0e054f2aec87feeb322624529415ac6bad573e739eaa09a1b2946c8903fe27fa205f6ac4521e7c5d86778cff32155457
6
+ metadata.gz: cdca19d28dfdbc2e980357242811bda91e685b383f859e19b0aafdb2e9f66d69eab5c2201f5a9da751648bf6b667b33ffef6a494555a6258bd4dd36ed4efc914
7
+ data.tar.gz: 2029fec4b50c8c9039f7b4449c7ad09198a07e4f979cd36b5b197e8523846c5a3155038b4e7aa8d13e012397003b3822a1f630ceecf2d941f5c412f86f726114
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## [0.5.0] - 2021-07-25
2
+
3
+ - Templates rendering added
4
+
5
+ ## [0.4.9] - 2021-07-25
6
+
7
+ - Some useful aliases added
8
+
9
+ ## [0.4.8] - 2021-07-25
10
+
11
+ - Before/after hooks added
12
+
13
+ ## [0.4.7] - 2021-07-25
14
+
15
+ - Handling 404 error fixed
16
+
1
17
  ## [0.4.6] - 2021-07-25
2
18
 
3
19
  - Content duplication fixed
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yaframework (0.4.6)
4
+ yaframework (0.5.0)
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,46 @@
2
2
 
3
3
  Here are some examples of applications created with Yaframework:
4
4
 
5
- 1. [**Hello World**](https://github.com/maxbarsukov/yaframework/tree/master/examples/hello_world.rb)
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. Go to `http://localhost:4567/` and see `Hello World`!
7
+ A simple application that displays "Hello world" to you.
8
8
 
9
9
 
10
- 2. [**Params**](https://github.com/maxbarsukov/yaframework/tree/master/examples/params.rb)
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/tree/master/examples/halts_and_redirects.rb)
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
+
20
45
  ## Installation
21
46
 
22
47
  Clone this repo and go to this folder.
@@ -25,4 +50,3 @@ Then, run `bundle install` to install this gem.
25
50
  ## Run
26
51
 
27
52
  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)
@@ -8,7 +8,8 @@ app.get "/" do
8
8
  end
9
9
 
10
10
  app.get "/html" do
11
- response.html "This is <b>HTML</b>, where you cat use some <small>tags</small>.<br/>JSON <a href=\"/json\">here</a>,
11
+ response.html "This is <b>HTML</b>, where you cat use some <small>tags</small>.
12
+ <br/>JSON <a href=\"/json\">here</a>,
12
13
  <br/>Plain text <a href=\"/text\">here</a>"
13
14
  end
14
15
 
data/examples/cookies.rb CHANGED
@@ -5,8 +5,12 @@ app = Yaframework::Application
5
5
 
6
6
  app.get "/" do
7
7
  response.set_cookie("foo", "bar")
8
-
8
+ "Your cookies, sir: #{response["Set-Cookie"]}.<br/>Go <a href=\"/delete\">here</a> to delete them"
9
9
  end
10
10
 
11
+ app.get "/delete" do
12
+ response.delete_cookie("foo")
13
+ "Your cookies, sir: #{response["Set-Cookie"]}"
14
+ end
11
15
 
12
16
  app.listen(4567)
@@ -4,11 +4,11 @@ require "yaframework"
4
4
  app = Yaframework::Application
5
5
 
6
6
  app.get "/" do
7
- "This is the root, go somewhere else"
7
+ "This is the root, go somewhere else..<br/>Maybe <a href=\"/asdfg\">here</a>, idk"
8
8
  end
9
9
 
10
10
  app.handle 404 do
11
- "Hey, I just handled a 404 error!"
11
+ "Hey, I just handled a 404 error!<br/>The dude from the previous page deceived you!"
12
12
  end
13
13
 
14
14
  app.handle 500 do
@@ -8,7 +8,7 @@ app.get "/" do
8
8
  end
9
9
 
10
10
  app.get "/hello" do
11
- "Hello world!"
11
+ "Hi, you were redirected here from the root page. You can go <a href=\"/error\"></a> to get a 401 error"
12
12
  end
13
13
 
14
14
  app.get "/error" do
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaframework"
4
+ app = Yaframework::Application
5
+
6
+ app.get "/" do
7
+ render "index"
8
+ end
9
+
10
+ app.listen(4567)
@@ -0,0 +1,3 @@
1
+ require "yaframework"
2
+
3
+ run app
File without changes
File without changes
data/lib/yaframework.rb CHANGED
@@ -3,6 +3,7 @@
3
3
  require_relative "yaframework/base"
4
4
  require_relative "yaframework/request"
5
5
  require_relative "yaframework/response"
6
+ require_relative "yaframework/render"
6
7
 
7
8
  module Yaframework
8
9
  end
@@ -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
- attr_reader :routes, :request, :response, :env
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
 
@@ -28,6 +36,18 @@ module Yaframework
28
36
  throw :halt, response
29
37
  end
30
38
 
39
+ def before(&block)
40
+ @before_hooks << block
41
+ end
42
+
43
+ def after(&block)
44
+ @after_hooks << block
45
+ end
46
+
47
+ def params
48
+ request.params
49
+ end
50
+
31
51
  def handle(status, &block)
32
52
  @inbox[status] = block
33
53
  end
@@ -55,17 +75,18 @@ module Yaframework
55
75
  end
56
76
 
57
77
  def route_eval
78
+ route = find_route
79
+ response.status = 404 unless route
80
+
58
81
  if @inbox[response.status]
59
- response.write instance_eval(&@inbox[response.status])
82
+ response.write exec(@inbox[response.status])
60
83
  return response.finish
61
84
  end
62
85
 
63
- route = find_route
64
- if route
65
- response.write instance_eval(&route[:handler])
66
- else
67
- response.status = 404
68
- end
86
+ exec_before_hooks
87
+ response.write exec(route[:handler]) if route
88
+ exec_after_hooks
89
+
69
90
  response.finish
70
91
  end
71
92
 
@@ -82,7 +103,32 @@ module Yaframework
82
103
  end
83
104
  route
84
105
  end
106
+
107
+ def exec(action)
108
+ if action.respond_to? :to_sym
109
+ send(action)
110
+ else
111
+ instance_exec(&action)
112
+ end
113
+ end
114
+
115
+ def exec_before_hooks
116
+ exec_hooks @before_hooks
117
+ end
118
+
119
+ def exec_after_hooks
120
+ exec_hooks @after_hooks
121
+ end
122
+
123
+ def exec_hooks(hooks)
124
+ return true if hooks.nil?
125
+
126
+ hooks.each do |hook|
127
+ return false if exec(hook) == false
128
+ end
129
+ end
85
130
  end
86
131
 
87
132
  Application = Base.new
133
+ Application.setup
88
134
  end
@@ -0,0 +1,48 @@
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) {
40
+ Tilt.new(template, 1, options.merge(outvar: "@_output"))
41
+ }.render(self, locals, &block)
42
+ end
43
+
44
+ def _cache
45
+ Thread.current[:_cache] ||= Tilt::Cache.new
46
+ end
47
+ end
48
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yaframework
4
- VERSION = "0.4.6"
4
+ VERSION = "0.5.0"
5
5
  end
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.add_runtime_dependency "rack", "~> 2.2", ">= 2.2.3"
36
+ spec.add_dependency "rack", "~> 2.2", ">= 2.2.3"
37
+ spec.add_dependency "tilt", "~> 2.0"
37
38
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yaframework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.6
4
+ version: 0.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - maxbarsukov
@@ -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,6 +121,7 @@ files:
107
121
  - bin/setup
108
122
  - examples/Gemfile
109
123
  - examples/README.md
124
+ - examples/before_after_hooks.rb
110
125
  - examples/content_types.rb
111
126
  - examples/cookies.rb
112
127
  - examples/error_handling.rb
@@ -114,8 +129,13 @@ files:
114
129
  - examples/headers.rb
115
130
  - examples/hello_world.rb
116
131
  - examples/params.rb
132
+ - examples/rendering/app.rb
133
+ - examples/rendering/config.ru
134
+ - examples/rendering/views/index.erb
135
+ - examples/rendering/views/layout.erb
117
136
  - lib/yaframework.rb
118
137
  - lib/yaframework/base.rb
138
+ - lib/yaframework/render.rb
119
139
  - lib/yaframework/request.rb
120
140
  - lib/yaframework/response.rb
121
141
  - lib/yaframework/version.rb