flame 1.1.2 → 1.1.8

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
  SHA1:
3
- metadata.gz: 8b56fd48d39f7cd483088a41de87bb4efb5d32dc
4
- data.tar.gz: 020ef14b9ba4dcfefcf8665bbd1e72a2ee0c158c
3
+ metadata.gz: 0c3b246233ec03fd89c4c0acaabef54f9a21cfd8
4
+ data.tar.gz: a9a8ab0206466032532d763cf842a6a3cdbd831b
5
5
  SHA512:
6
- metadata.gz: 1587bd9681b7090cd9a5d5a1d735bffc437bac135466f814f741a74a1e8cd9deda8cf9b14dc4ada09b3f16f108a86947a1ab22c0faf37957cfba70bc30f6fb89
7
- data.tar.gz: 27053231630630b48848ddd759a803399b89ad8d5dbb0a20f07c64bd81a3f83bf48b3815bb24bfb762b090701a8f8bbe9065b93ba82dd9aefdf498adc1c52752
6
+ metadata.gz: 13ee2d5fa5407d377d8370f445e454acf058108450945df5f79b711d02eea628732627ac2c725f579fcefc4460beddcff1d268c3816a7ce3bf3c179ffc2e388b
7
+ data.tar.gz: d497b609ddc7635cee5b510fa7f04842371463676c07f5f169e6821d9f27fd23a31e1385d70694046d0b356cfa6c54a0d4ad6839a2ea0324845044d8908c8fff
@@ -3,8 +3,6 @@ require_relative 'render'
3
3
  module Flame
4
4
  ## Class for controllers helpers, like Framework::Controller
5
5
  class Controller
6
- include Flame::Render
7
-
8
6
  def initialize(dispatcher)
9
7
  @dispatcher = dispatcher
10
8
  end
@@ -17,10 +15,19 @@ module Flame
17
15
  @dispatcher.request
18
16
  end
19
17
 
18
+ def response
19
+ @dispatcher.response
20
+ end
21
+
20
22
  def params
21
23
  @dispatcher.params
22
24
  end
23
25
 
26
+ def view(path, options = {})
27
+ Flame::Render.new(self, path, options).render
28
+ end
29
+ alias_method :render, :view
30
+
24
31
  def halt(*params)
25
32
  @dispatcher.halt(*params)
26
33
  end
@@ -29,6 +36,18 @@ module Flame
29
36
  @dispatcher.path_to(*params)
30
37
  end
31
38
 
39
+ def redirect(*params)
40
+ @dispatcher.redirect(*params)
41
+ end
42
+
43
+ def session
44
+ @dispatcher.session
45
+ end
46
+
47
+ def cookies
48
+ @dispatcher.cookies
49
+ end
50
+
32
51
  ## TODO: Add more helpers
33
52
  end
34
53
  end
@@ -61,7 +61,22 @@ module Flame
61
61
  def path_to(ctrl, action, args = {})
62
62
  route = @app.router.find_route(controller: ctrl, action: action)
63
63
  fail RouteNotFoundError.new(ctrl, action) unless route
64
- route.assign_arguments(args)
64
+ path = route.assign_arguments(args)
65
+ path.empty? ? '/' : path
66
+ end
67
+
68
+ def redirect(*params)
69
+ throw :halt, response.redirect(
70
+ params[0].is_a?(String) ? params[0] : path_to(*params)
71
+ )
72
+ end
73
+
74
+ def session
75
+ request.session
76
+ end
77
+
78
+ def cookies
79
+ @cookies ||= Cookies.new(request.cookies, response)
65
80
  end
66
81
 
67
82
  private
@@ -102,5 +117,22 @@ module Flame
102
117
  def file_mime_type(file)
103
118
  Rack::Mime.mime_type(File.extname(file))
104
119
  end
120
+
121
+ ## Helper class for cookies
122
+ class Cookies
123
+ def initialize(request_cookies, response)
124
+ @request_cookies = request_cookies
125
+ @response = response
126
+ end
127
+
128
+ def [](key)
129
+ @request_cookies[key] || @request_cookies[key.to_s]
130
+ end
131
+
132
+ def []=(key, new_value)
133
+ return @response.delete_cookie(key) if new_value.nil?
134
+ @response.set_cookie(key, new_value)
135
+ end
136
+ end
105
137
  end
106
138
  end
@@ -4,26 +4,35 @@ require 'tilt/erb'
4
4
 
5
5
  module Flame
6
6
  ## Helper for render functionality
7
- module Render
8
- def view(path, options = {})
7
+ class Render
8
+ def initialize(ctrl, path, options = {})
9
9
  ## Take options for rendering
10
- scope = options.delete(:scope) || self
11
- layout = options.delete(:layout) || 'layout.*'
10
+ @ctrl = ctrl
11
+ @scope = options.delete(:scope) || @ctrl
12
+ @layout = options.delete(:layout) || 'layout.*'
12
13
  ## And get the rest variables to locals
13
- locals = options.merge(options.delete(:locals) || {})
14
+ @locals = options.merge(options.delete(:locals) || {})
14
15
  ## Find filename
15
- filename = find_file(path)
16
+ @filename = find_file(path)
16
17
  ## Compile Tilt to instance hash
17
- @tilts ||= {}
18
- @tilts[filename] ||= Tilt.new(filename)
19
- ## Render Tilt from instance hash with new options
20
- layout_render layout, @tilts[filename].render(scope, locals)
18
+ tilts[@filename] ||= Tilt.new(@filename)
21
19
  end
22
20
 
23
- alias_method :render, :view
21
+ def render
22
+ ## Render Tilt from instance hash with new options
23
+ layout_render tilts[@filename].render(@scope, @locals)
24
+ end
24
25
 
25
26
  private
26
27
 
28
+ def self.tilts
29
+ @tilts ||= {}
30
+ end
31
+
32
+ def tilts
33
+ self.class.tilts
34
+ end
35
+
27
36
  using GorillaPatch::StringExt
28
37
 
29
38
  ## TODO: Add `views_dir` for Application and Controller
@@ -31,7 +40,7 @@ module Flame
31
40
  def find_file(path)
32
41
  ## Get full filename
33
42
  Dir[File.join(
34
- config[:views_dir],
43
+ @ctrl.config[:views_dir],
35
44
  "{#{controller_dirs.join(',')},}",
36
45
  "#{path}.*"
37
46
  )].find do |file|
@@ -42,18 +51,18 @@ module Flame
42
51
  def controller_dirs
43
52
  ## Build controller_dirs
44
53
  controller_dir = (
45
- self.class.name.underscore.split('_') - %w(controller ctrl)
54
+ @ctrl.class.name.underscore.split('_') - %w(controller ctrl)
46
55
  ).join('_')
47
56
  [controller_dir, controller_dir.split('/').last]
48
57
  end
49
58
 
50
- def layout_render(layout, result)
51
- layout_filename = find_file(layout)
59
+ def layout_render(result)
60
+ layout_filename = find_file(@layout)
52
61
  ## Compile layout to hash
53
62
  return result unless layout_filename
54
- @tilts[layout_filename] ||= Tilt.new(layout_filename)
55
- return result unless @tilts[layout_filename]
56
- @tilts[layout_filename].render { result }
63
+ tilts[layout_filename] ||= Tilt.new(layout_filename)
64
+ return result unless tilts[layout_filename]
65
+ tilts[layout_filename].render(@scope, @locals) { result }
57
66
  end
58
67
  end
59
68
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flame
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Alexander Popov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-10-21 00:00:00.000000000 Z
11
+ date: 2015-10-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rack