yaframework 0.4.6 → 0.5.0

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 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