helmet 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.
Files changed (3) hide show
  1. data/lib/helmet/api.rb +79 -0
  2. data/lib/helmet/templates.rb +31 -0
  3. metadata +3 -1
@@ -0,0 +1,79 @@
1
+ require 'goliath/api'
2
+
3
+ require 'helmet/templates'
4
+
5
+ module Helmet
6
+ class API < Goliath::API
7
+ @@routes = {}
8
+
9
+ class << self
10
+ include Templates
11
+
12
+ def public_folder=(folder)
13
+ @@public_folder = folder
14
+ end
15
+
16
+ def public_folder
17
+ @@public_folder
18
+ end
19
+
20
+ def views_folder=(folder)
21
+ @@views_folder = folder
22
+ end
23
+
24
+ def views_folder
25
+ @@views_folder
26
+ end
27
+
28
+ def get(route, &block)
29
+ register_route('GET', route, &block);
30
+ register_route('HEAD', route, &block);
31
+ end
32
+ def post(route, &block) register_route('POST', route, &block); end
33
+ def put(route, &block) register_route('PUT', route, &block); end
34
+ def delete(route, &block) register_route('DELETE', route, &block); end
35
+ def head(route, &block) register_route('HEAD', route, &block); end
36
+
37
+ def register_route(method, route, &block)
38
+ sig = API.signature(method, route)
39
+ @@routes[sig] = block
40
+ end
41
+
42
+ def signature(method, route)
43
+ "#{method}#{route}"
44
+ end
45
+
46
+ def inherited(klass)
47
+ # setup basic middlewares
48
+ setup_middlewares klass
49
+
50
+ # compute public/ views folder
51
+ base = File.dirname(caller.first[/^[^:]*/])
52
+ self.public_folder = File.join(base, 'public')
53
+ self.views_folder = File.join(base, 'views')
54
+
55
+ super # update Goliath::Application.app_class
56
+ end
57
+
58
+ private
59
+
60
+ def setup_middlewares(klass)
61
+ # support for session
62
+ klass.use Rack::Session::Cookie
63
+ # support for forms
64
+ klass.use Goliath::Rack::Params
65
+ end
66
+ end
67
+
68
+ def response(env)
69
+ sig = API.signature(env['REQUEST_METHOD'], env['REQUEST_PATH'])
70
+ block = @@routes[sig]
71
+ if block
72
+ block.call env
73
+ else
74
+ [404, {}, 'not found!']
75
+ end
76
+ end
77
+ end
78
+ end
79
+
@@ -0,0 +1,31 @@
1
+ require 'tilt'
2
+
3
+ module Helmet
4
+ module Templates
5
+
6
+ @@template_cache = Tilt::Cache.new
7
+
8
+ def erb(template, options = {}, locals = {})
9
+ render :erb, template, options, locals
10
+ end
11
+
12
+ def render(engine, data, options = {}, locals = {}, &block)
13
+ layout = options.delete(:layout)
14
+ compiled_template = @@template_cache.fetch(data, options) do
15
+ template = Tilt.new(find_template(engine, data), nil, options)
16
+ end
17
+ output = compiled_template.render nil, locals, &block
18
+ if layout
19
+ return render(engine, layout, options, locals) {output}
20
+ end
21
+ output
22
+ end
23
+
24
+ private
25
+
26
+ def find_template(engine, template)
27
+ filename = "#{template.to_s}.#{engine.to_s}"
28
+ File.join(views_folder, filename)
29
+ end
30
+ end
31
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: helmet
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.1
5
+ version: 0.0.2
6
6
  platform: ruby
7
7
  authors:
8
8
  - Thiago Lewin
@@ -43,6 +43,8 @@ extensions: []
43
43
  extra_rdoc_files: []
44
44
 
45
45
  files:
46
+ - lib/helmet/api.rb
47
+ - lib/helmet/templates.rb
46
48
  - lib/helmet.rb
47
49
  homepage: https://github.com/tlewin/helmet
48
50
  licenses: []