helmet 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
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: []