yaframework 0.4.8 → 0.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 63212eea1f540904cec647bd269e65ed74c5f17569d211c5e2df1cacf5e906eb
4
- data.tar.gz: c0d422d3fbcf9f05fb3110062730cfbfa6e943aff65112c2c5262188c79189bf
3
+ metadata.gz: 358c61b6687851be43c785a696574ffc2b2fcda2ecf420a646f0034e9449edc0
4
+ data.tar.gz: 4ecb0b37770f79b4aa441f10c9f773f91901d35bcaecebdd3c2337404357b120
5
5
  SHA512:
6
- metadata.gz: 4c03d0a6d9a2e8a0b59403f4814a79f32169f06984f40a0f62f41d1ed03e3cea55ee7cb53e677d557de3763dbf1e3846152429026983d59b3871e3d813fad60f
7
- data.tar.gz: 9f07579ed44407f75a5431f5c65d33c3f7824c133e672a0ed2278f8033307c37c2b8456eff10a10c8864ad128f69f289a4450bc0143e2d4fb9b34a7c5916953d
6
+ metadata.gz: 168ca10283730aff4c81df587a06c96c6f35e131d67e614cb06909af1f891081b503f33dfa88eeccb062ec230a49a1d8c71d6537c82d87fbd797346426430b77
7
+ data.tar.gz: 7323f3ba8fdc11b9b3fbcd6b5d1f88516a9084e7ff7c19bd3130ef96dcbdad2c721ab4be7e9f8964f8314e5e468e2fa47d9a6c99a287307b43a6c6f2e9f62d94
data/.rubocop.yml CHANGED
@@ -16,6 +16,9 @@ Style/Documentation:
16
16
  Metrics/MethodLength:
17
17
  Enabled: false
18
18
 
19
+ ClassLength:
20
+ Max: 250
21
+
19
22
  Metrics/AbcSize:
20
23
  Max: 25
21
24
 
data/CHANGELOG.md CHANGED
@@ -1,3 +1,19 @@
1
+ ## [0.5.2] - 2021-07-26
2
+
3
+ - Error while rendering template fixed
4
+
5
+ ## [0.5.1] - 2021-07-26
6
+
7
+ - `helpers` and `configure` methods added
8
+
9
+ ## [0.5.0] - 2021-07-25
10
+
11
+ - Templates rendering added
12
+
13
+ ## [0.4.9] - 2021-07-25
14
+
15
+ - Some useful aliases added
16
+
1
17
  ## [0.4.8] - 2021-07-25
2
18
 
3
19
  - Before/after hooks added
data/Gemfile.lock CHANGED
@@ -1,8 +1,9 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- yaframework (0.4.8)
4
+ yaframework (0.5.2)
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
@@ -36,11 +36,26 @@ Here are some examples of applications created with Yaframework:
36
36
 
37
37
  Adding and deleting cookies
38
38
 
39
+
39
40
  8. [**Hooks**](https://github.com/maxbarsukov/yaframework/blob/master/examples/before_after_hooks.rb)
40
41
 
41
42
  How to use `before` and `after` hooks
42
43
 
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
+
44
59
  ## Installation
45
60
 
46
61
  Clone this repo and go to this folder.
@@ -49,4 +64,3 @@ Then, run `bundle install` to install this gem.
49
64
  ## Run
50
65
 
51
66
  Run with `ruby hello-world.rb` or any other file and view at http://localhost:4567
52
-
@@ -0,0 +1,14 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaframework"
4
+ app = Yaframework::Application
5
+
6
+ app.configure do
7
+ @app_name = "Your awesome app"
8
+ end
9
+
10
+ app.get "/" do
11
+ "Hey, that's #{@app_name}"
12
+ end
13
+
14
+ app.listen(9292)
@@ -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,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaframework"
4
+ app = Yaframework::Application
5
+
6
+ app.before do
7
+ @number = Random.rand
8
+ puts @number
9
+ end
10
+
11
+ app.get "/" do
12
+ render "index"
13
+ end
14
+
15
+ app.listen(4567)
@@ -0,0 +1,6 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "yaframework"
4
+ require "./app"
5
+
6
+ run app
@@ -0,0 +1,4 @@
1
+ <h1>Look me in index.erb file</h1>
2
+
3
+ <p>It works!</p>
4
+ <%= partial "partial", number: @number %>
@@ -0,0 +1,10 @@
1
+ <html lang="en">
2
+ <head>
3
+ <meta charset="utf-8">
4
+ <title>Example app</title>
5
+ </head>
6
+
7
+ <body>
8
+ <%= content %>
9
+ </body>
10
+ </html>
@@ -0,0 +1 @@
1
+ <p>Yout number was <b><%= number %></b></p>
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,15 +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([])
11
16
  @before_hooks = []
12
17
  @after_hooks = []
18
+ @settings = {}
13
19
  @inbox = {}
14
20
  end
15
21
 
@@ -19,6 +25,14 @@ module Yaframework
19
25
  end
20
26
  end
21
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
+
22
36
  def call(env)
23
37
  @env = env
24
38
  @request = Yaframework::Request.new @env
@@ -38,6 +52,10 @@ module Yaframework
38
52
  @after_hooks << block
39
53
  end
40
54
 
55
+ def params
56
+ request.params
57
+ end
58
+
41
59
  def handle(status, &block)
42
60
  @inbox[status] = block
43
61
  end
@@ -120,4 +138,5 @@ module Yaframework
120
138
  end
121
139
 
122
140
  Application = Base.new
141
+ Application.setup
123
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", Dir.pwd)
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Yaframework
4
- VERSION = "0.4.8"
4
+ VERSION = "0.5.2"
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,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: yaframework
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.8
4
+ version: 0.5.2
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-25 00:00:00.000000000 Z
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
@@ -108,15 +122,23 @@ files:
108
122
  - examples/Gemfile
109
123
  - examples/README.md
110
124
  - examples/before_after_hooks.rb
125
+ - examples/configure.rb
111
126
  - examples/content_types.rb
112
127
  - examples/cookies.rb
113
128
  - examples/error_handling.rb
114
129
  - examples/halts_and_redirects.rb
115
130
  - examples/headers.rb
116
131
  - examples/hello_world.rb
132
+ - examples/helpers.rb
117
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
118
139
  - lib/yaframework.rb
119
140
  - lib/yaframework/base.rb
141
+ - lib/yaframework/render.rb
120
142
  - lib/yaframework/request.rb
121
143
  - lib/yaframework/response.rb
122
144
  - lib/yaframework/version.rb