racket-mvc 0.4.0 → 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 +4 -4
- data/README.md +7 -5
- data/lib/racket.rb +25 -7
- data/lib/racket/application.rb +70 -136
- data/lib/racket/controller.rb +95 -38
- data/lib/racket/current.rb +1 -1
- data/lib/racket/helpers/file.rb +7 -5
- data/lib/racket/helpers/routing.rb +5 -5
- data/lib/racket/helpers/sass.rb +11 -11
- data/lib/racket/helpers/view.rb +8 -5
- data/lib/racket/plugins/base.rb +1 -1
- data/lib/racket/plugins/sass.rb +1 -1
- data/lib/racket/request.rb +3 -3
- data/lib/racket/response.rb +1 -1
- data/lib/racket/router.rb +31 -12
- data/lib/racket/session.rb +3 -3
- data/lib/racket/settings/application.rb +27 -33
- data/lib/racket/settings/base.rb +19 -8
- data/lib/racket/settings/controller.rb +9 -7
- data/lib/racket/settings/defaults.rb +81 -0
- data/lib/racket/utils.rb +19 -15
- data/lib/racket/utils/application.rb +4 -114
- data/lib/racket/utils/application/handler_stack.rb +163 -0
- data/lib/racket/utils/application/logger.rb +72 -0
- data/lib/racket/utils/application/registry_builder.rb +88 -0
- data/lib/racket/utils/application/stateless_services.rb +73 -0
- data/lib/racket/utils/exceptions.rb +3 -3
- data/lib/racket/utils/file_system.rb +75 -47
- data/lib/racket/utils/helpers.rb +35 -13
- data/lib/racket/utils/routing.rb +62 -46
- data/lib/racket/utils/views.rb +19 -187
- data/lib/racket/utils/views/renderer.rb +75 -0
- data/lib/racket/utils/views/template_cache.rb +126 -0
- data/lib/racket/utils/views/template_locator.rb +83 -0
- data/lib/racket/utils/views/template_resolver.rb +112 -0
- data/lib/racket/version.rb +2 -2
- data/lib/racket/view_manager.rb +12 -4
- data/rake/utils.rb +5 -5
- data/spec/_custom.rb +69 -19
- data/spec/_default.rb +60 -44
- data/spec/_plugin.rb +12 -14
- data/spec/_template_cache.rb +176 -0
- data/spec/racket.rb +10 -13
- data/spec/test_custom_app/controllers/sub1/custom_sub_controller_1.rb +1 -1
- data/spec/test_custom_app/controllers/sub3/custom_sub_controller_3.rb +19 -1
- data/spec/test_custom_app/controllers/sub5/custom_sub_controller_5.rb +8 -0
- data/spec/test_custom_app/files/stuff.rb +3 -0
- data/spec/test_custom_app/files/triplet.erb +5 -0
- data/spec/test_custom_app/templates/sub5/text.erb +3 -0
- data/spec/test_default_app/controllers/default_root_controller.rb +3 -0
- data/spec/test_default_app/controllers/sub1/default_sub_controller_1.rb +1 -1
- metadata +52 -11
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f002bf3d26fa193c944ca3aa0d7bc5e8f27bbfc1
|
4
|
+
data.tar.gz: 695e4a0a56af342f2026f961678f15dfd5415967
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 722cc5b195717ecc4707e9625231265e4644d35ad740dc38602dc15dee5985d35537c2337a5069e2e5ca15666a303fc9cc2608f911b77872f4e88b4bddf30cbb
|
7
|
+
data.tar.gz: 3e797ae053f8657891bb24903f0626b8ac3056ddbbbd2c663dff9310520882b497dc7c9c1e3d3d1301fdc744a99ae1dce7edc26c1f63cc450ca61674b21f02b4
|
data/README.md
CHANGED
@@ -23,14 +23,16 @@ Let us just say it is good _enough_ for my needs at the moment. I plan to add mo
|
|
23
23
|
whenever I am finished porting most of my old apps from Ramaze.
|
24
24
|
|
25
25
|
## Where are the tests?
|
26
|
-
Have a look in the `spec` directory. The code base have tests covering 100 per cent of the code and I am planning on keeping it that way. At the moment the code is tested on the following platforms (using [Travis CI](https://travis-ci.org/)):
|
26
|
+
Have a look in the `spec` directory. The code base have tests covering (almost) 100 per cent of the code and I am planning on keeping it that way. At the moment the code is tested on the following platforms (using [Travis CI](https://travis-ci.org/)):
|
27
27
|
|
28
28
|
- 1.9.3
|
29
29
|
- 2.0.0
|
30
|
-
- 2.1.
|
31
|
-
- 2.2.
|
32
|
-
-
|
33
|
-
- jruby-
|
30
|
+
- 2.1.10
|
31
|
+
- 2.2.5
|
32
|
+
- 2.3.1
|
33
|
+
- jruby-1.7.26
|
34
|
+
- jruby-9.0.5.0
|
35
|
+
- jruby-9.1.5.0
|
34
36
|
- rbx-2
|
35
37
|
|
36
38
|
I am using [bacon](https://github.com/chneukirchen/bacon) and [rack-test](https://github.com/brynary/rack-test) for testing. Run the tests by typing `rake test`in the root directory. Code coverage reports are provided by [simplecov](https://rubygems.org/gems/simplecov). After the tests have run the an HTML report can be found in the `coverage` directory.
|
data/lib/racket.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Racket - The noisy Rack MVC framework
|
2
|
-
# Copyright (C) 2015 Lars Olsson <lasso@lassoweb.se>
|
2
|
+
# Copyright (C) 2015-2016 Lars Olsson <lasso@lassoweb.se>
|
3
3
|
#
|
4
4
|
# This file is part of Racket.
|
5
5
|
#
|
@@ -33,22 +33,40 @@ require_relative 'racket/utils.rb'
|
|
33
33
|
|
34
34
|
# Racket main namespace
|
35
35
|
module Racket
|
36
|
-
|
36
|
+
class << self
|
37
|
+
alias kernel_require require
|
38
|
+
end
|
39
|
+
|
40
|
+
# Requires a file relative to the current Racket application dir. Will raise an exception if no
|
41
|
+
# Racket application is initialized.
|
37
42
|
#
|
38
|
-
# @param [
|
43
|
+
# @param [Array] args
|
39
44
|
# @return nil
|
40
45
|
def require(*args)
|
41
|
-
|
42
|
-
|
46
|
+
raise 'You must have a running Racket application before calling Racket.require' unless
|
47
|
+
Controller.context
|
48
|
+
(kernel_require resource_path(*args)) && nil
|
49
|
+
end
|
50
|
+
|
51
|
+
# Returns the path to a resource relative to the Racket application dir. Will raise an exception
|
52
|
+
# if no Racket is initialized.
|
53
|
+
#
|
54
|
+
# @param [Array] args
|
55
|
+
# @return [Pathname]
|
56
|
+
def resource_path(*args)
|
57
|
+
context = Controller.context
|
58
|
+
raise 'You must have a running Racket application before calling Racket.resource_path' unless
|
59
|
+
context
|
60
|
+
context.utils.build_path(*args)
|
43
61
|
end
|
44
62
|
|
45
63
|
# Returns the current version of Racket.
|
46
64
|
#
|
47
65
|
# @return [String]
|
48
66
|
def version
|
49
|
-
require_relative 'racket/version.rb'
|
67
|
+
Kernel.require_relative 'racket/version.rb'
|
50
68
|
Version.current
|
51
69
|
end
|
52
70
|
|
53
|
-
module_function :require, :version
|
71
|
+
module_function :require, :resource_path, :version
|
54
72
|
end
|
data/lib/racket/application.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Racket - The noisy Rack MVC framework
|
2
|
-
# Copyright (C) 2015 Lars Olsson <lasso@lassoweb.se>
|
2
|
+
# Copyright (C) 2015-2016 Lars Olsson <lasso@lassoweb.se>
|
3
3
|
#
|
4
4
|
# This file is part of Racket.
|
5
5
|
#
|
@@ -19,72 +19,46 @@
|
|
19
19
|
module Racket
|
20
20
|
# Racket main application class.
|
21
21
|
class Application
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
22
|
+
# Initializes a new Racket::Application object with default settings.
|
23
|
+
#
|
24
|
+
# @return [Class]
|
25
|
+
def self.default
|
26
|
+
new
|
26
27
|
end
|
27
28
|
|
28
|
-
#
|
29
|
-
# Rack::Builder to construct the application.
|
29
|
+
# Initializes a new Racket::Application object with settings specified by +settings+.
|
30
30
|
#
|
31
|
-
# @
|
32
|
-
|
33
|
-
|
31
|
+
# @param [Hash] settings
|
32
|
+
# @return [Class]
|
33
|
+
def self.using(settings)
|
34
|
+
new(settings)
|
34
35
|
end
|
35
36
|
|
36
|
-
|
37
|
-
def self.apply_settings(settings)
|
38
|
-
fail 'Application has already been initialized!' if @settings
|
39
|
-
@settings = Settings::Application.new(settings)
|
40
|
-
end
|
37
|
+
attr_reader :registry
|
41
38
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
39
|
+
# Initializes the Racket application.
|
40
|
+
#
|
41
|
+
# @param [Hash] settings
|
42
|
+
# @return [Class]
|
43
|
+
def initialize(settings = {})
|
44
|
+
@registry = Utils::Application::RegistryBuilder.new(settings).registry
|
45
|
+
@registry.handler_stack # Makes sure all plugins and helpers are loaded before any controllers
|
46
|
+
load_controllers
|
46
47
|
end
|
47
48
|
|
48
49
|
# Called whenever Rack sends a request to the application.
|
49
50
|
#
|
50
51
|
# @param [Hash] env Rack environment
|
51
52
|
# @return [Array] A Rack response array
|
52
|
-
def
|
53
|
-
|
53
|
+
def call(env)
|
54
|
+
@registry.handler_stack.call(env.dup)
|
54
55
|
end
|
55
56
|
|
56
57
|
# Returns whether the application runs in dev mode.
|
57
58
|
#
|
58
59
|
# @return [true|false]
|
59
|
-
def
|
60
|
-
@
|
61
|
-
end
|
62
|
-
|
63
|
-
# Returns a route to the specified controller/action/parameter combination.
|
64
|
-
#
|
65
|
-
# @param [Class] controller
|
66
|
-
# @param [Symbol] action
|
67
|
-
# @param [Array] params
|
68
|
-
# @return [String]
|
69
|
-
def self.get_route(controller, action = nil, *params)
|
70
|
-
@router.get_route(controller, action, params)
|
71
|
-
end
|
72
|
-
|
73
|
-
# Initializes a new Racket::Application object with default settings.
|
74
|
-
#
|
75
|
-
# @return [Class]
|
76
|
-
def self.default
|
77
|
-
init
|
78
|
-
end
|
79
|
-
|
80
|
-
# Writes a message to the logger if there is one present.
|
81
|
-
#
|
82
|
-
# @param [String] message
|
83
|
-
# @param [Symbol] level
|
84
|
-
# @return nil
|
85
|
-
def self.inform(message, level)
|
86
|
-
logger = @settings.logger
|
87
|
-
(logger.send(level, message) if logger) && nil
|
60
|
+
def dev_mode?
|
61
|
+
@registry.application_settings.mode == :dev
|
88
62
|
end
|
89
63
|
|
90
64
|
# Sends a message to the logger.
|
@@ -92,8 +66,8 @@ module Racket
|
|
92
66
|
# @param [String] message
|
93
67
|
# @param [Symbol] level
|
94
68
|
# @return nil
|
95
|
-
def
|
96
|
-
|
69
|
+
def inform_all(message, level = :info)
|
70
|
+
@registry.application_logger.inform_all(message, level)
|
97
71
|
end
|
98
72
|
|
99
73
|
# Sends a message to the logger, but only if the application is running in dev mode.
|
@@ -101,112 +75,72 @@ module Racket
|
|
101
75
|
# @param [String] message
|
102
76
|
# @param [Symbol] level
|
103
77
|
# @return nil
|
104
|
-
def
|
105
|
-
(
|
106
|
-
end
|
107
|
-
|
108
|
-
# Initializes the Racket application.
|
109
|
-
#
|
110
|
-
# @param [Hash] settings
|
111
|
-
# @return [Class]
|
112
|
-
def self.init(settings = {})
|
113
|
-
apply_settings(settings)
|
114
|
-
application # This will make sure all plugins and helpers are loaded before any controllers
|
115
|
-
setup_static_server
|
116
|
-
reload
|
117
|
-
self
|
118
|
-
end
|
119
|
-
|
120
|
-
# Loads controllers and associates each controller with a route.
|
121
|
-
#
|
122
|
-
# @return [nil]
|
123
|
-
def self.load_controllers
|
124
|
-
inform_dev('Loading controllers.')
|
125
|
-
@settings.store(:last_added_controller, [])
|
126
|
-
load_controller_files
|
127
|
-
@settings.delete(:last_added_controller)
|
128
|
-
inform_dev('Done loading controllers.') && nil
|
129
|
-
end
|
130
|
-
|
131
|
-
# Loads a controller file.
|
132
|
-
#
|
133
|
-
# @param [String] file Relative path from controller dir
|
134
|
-
# @return nil
|
135
|
-
def self.load_controller_file(file)
|
136
|
-
::Kernel.require file
|
137
|
-
klass = @settings.fetch(:last_added_controller).pop
|
138
|
-
# Helpers may do stuff based on route, make sure it is available before applying helpers.
|
139
|
-
@router.map(calculate_url_path(file), klass)
|
140
|
-
Utils.apply_helpers(klass) && nil
|
141
|
-
end
|
142
|
-
|
143
|
-
def self.load_controller_files
|
144
|
-
Utils.paths_by_longest_path(@settings.controller_dir, File.join('**', '*.rb')).each do |path|
|
145
|
-
load_controller_file(path)
|
146
|
-
end
|
78
|
+
def inform_dev(message, level = :debug)
|
79
|
+
@registry.application_logger.inform_dev(message, level)
|
147
80
|
end
|
148
81
|
|
149
|
-
|
150
|
-
# to the application.
|
151
|
-
#
|
152
|
-
# @return [nil]
|
153
|
-
def self.reload
|
154
|
-
setup_routes
|
155
|
-
@view_manager = nil
|
156
|
-
end
|
82
|
+
alias kernel_require require
|
157
83
|
|
158
84
|
# Requires a file using the current application directory as a base path.
|
159
85
|
#
|
160
86
|
# @param [Object] args
|
161
87
|
# @return [nil]
|
162
|
-
def
|
163
|
-
(
|
88
|
+
def require(*args)
|
89
|
+
(kernel_require @registry.utils.build_path(*args)) && nil
|
164
90
|
end
|
165
91
|
|
166
|
-
|
92
|
+
private
|
93
|
+
|
94
|
+
# Calculates the url path for the specified (controller) file
|
167
95
|
#
|
168
|
-
# @param [
|
169
|
-
# @return [
|
170
|
-
def
|
171
|
-
|
96
|
+
# @param [Pathname] file
|
97
|
+
# @return [String]
|
98
|
+
def calculate_url_path(file)
|
99
|
+
controller_dir = @registry.application_settings.controller_dir
|
100
|
+
url_path = "/#{file.relative_path_from(controller_dir).dirname}"
|
101
|
+
url_path = '' if url_path == '/.'
|
102
|
+
url_path
|
172
103
|
end
|
173
104
|
|
174
|
-
#
|
105
|
+
# Returns a list of relative file paths representing controllers,
|
106
|
+
# sorted by path length (longest first).
|
175
107
|
#
|
176
|
-
#
|
177
|
-
def
|
178
|
-
|
179
|
-
|
108
|
+
# return [Array]
|
109
|
+
def controller_files
|
110
|
+
controller_dir = @registry.application_settings.controller_dir
|
111
|
+
glob = File.join('**', '*.rb')
|
112
|
+
Utils::FileSystem.matching_paths(controller_dir, glob).map do |path|
|
113
|
+
Utils::FileSystem::SizedPath.new(path)
|
114
|
+
end.sort.map(&:path)
|
180
115
|
end
|
181
116
|
|
182
|
-
#
|
117
|
+
# Loads controllers and associates each controller with a route.
|
183
118
|
#
|
184
119
|
# @return [nil]
|
185
|
-
def
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
inform_dev(
|
190
|
-
(@static_server = Rack::File.new(public_dir)) && nil
|
120
|
+
def load_controllers
|
121
|
+
inform_dev('Loading controllers.')
|
122
|
+
Controller.context = @registry.controller_context
|
123
|
+
load_controller_files
|
124
|
+
inform_dev('Done loading controllers.') && nil
|
191
125
|
end
|
192
126
|
|
193
|
-
#
|
127
|
+
# Loads a controller file.
|
194
128
|
#
|
195
|
-
# @param [
|
196
|
-
# @return
|
197
|
-
def
|
198
|
-
|
129
|
+
# @param [String] file Relative path from controller dir
|
130
|
+
# @return nil
|
131
|
+
def load_controller_file(file)
|
132
|
+
kernel_require file
|
133
|
+
klass = @registry.application_settings.fetch(:last_added_controller).pop
|
134
|
+
# Helpers may do stuff based on route, make sure it is available before applying helpers.
|
135
|
+
@registry.router.map(calculate_url_path(file), klass)
|
136
|
+
@registry.utils.apply_helpers(klass) && nil
|
199
137
|
end
|
200
138
|
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
139
|
+
def load_controller_files
|
140
|
+
settings = @registry.application_settings
|
141
|
+
settings.store(:last_added_controller, [])
|
142
|
+
controller_files.each { |path| load_controller_file(path) }
|
143
|
+
settings.delete(:last_added_controller)
|
206
144
|
end
|
207
|
-
|
208
|
-
private_class_method :application, :calculate_url_path, :inform, :init, :load_controller_file,
|
209
|
-
:load_controller_files, :load_controllers, :setup_routes,
|
210
|
-
:setup_static_server
|
211
145
|
end
|
212
146
|
end
|
data/lib/racket/controller.rb
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
# Racket - The noisy Rack MVC framework
|
2
|
-
# Copyright (C) 2015 Lars Olsson <lasso@lassoweb.se>
|
2
|
+
# Copyright (C) 2015-2016 Lars Olsson <lasso@lassoweb.se>
|
3
3
|
#
|
4
4
|
# This file is part of Racket.
|
5
5
|
#
|
@@ -19,17 +19,6 @@
|
|
19
19
|
module Racket
|
20
20
|
# Base controller class. Your controllers should inherit this class.
|
21
21
|
class Controller
|
22
|
-
def self.__helper_cache
|
23
|
-
settings = Controller.settings
|
24
|
-
helper_cache =
|
25
|
-
settings.fetch(
|
26
|
-
:helper_cache,
|
27
|
-
Utils::Helpers::HelperCache.new(Application.settings.helper_dir)
|
28
|
-
)
|
29
|
-
settings.store(:helper_cache, helper_cache) unless settings.present?(:helper_cache)
|
30
|
-
helper_cache
|
31
|
-
end
|
32
|
-
|
33
22
|
# Adds a hook to one or more actions.
|
34
23
|
#
|
35
24
|
# @param [Symbol] type
|
@@ -40,7 +29,7 @@ module Racket
|
|
40
29
|
meths = public_instance_methods(false)
|
41
30
|
meths &= methods.map(&:to_sym) unless methods.empty?
|
42
31
|
__update_hooks("#{type}_hooks".to_sym, meths, blk)
|
43
|
-
|
32
|
+
context.logger.inform_dev("Adding #{type} hook #{blk} for actions #{meths} for #{self}.")
|
44
33
|
end
|
45
34
|
|
46
35
|
# Updates hooks in settings object.
|
@@ -73,6 +62,30 @@ module Racket
|
|
73
62
|
__register_hook(:before, methods, blk) if block_given?
|
74
63
|
end
|
75
64
|
|
65
|
+
# Returns the current context.
|
66
|
+
#
|
67
|
+
# @return [Module]
|
68
|
+
def self.context
|
69
|
+
Controller.instance_variable_get(:@context)
|
70
|
+
end
|
71
|
+
|
72
|
+
# Injects context in Controller class. Context represents
|
73
|
+
# the current application state.
|
74
|
+
#
|
75
|
+
# @param [Module] context
|
76
|
+
def self.context=(context)
|
77
|
+
raise 'Context should only be set on Controller class' unless self == Controller
|
78
|
+
@context = context
|
79
|
+
end
|
80
|
+
|
81
|
+
# Returns the route representing the parameters.
|
82
|
+
#
|
83
|
+
# @param [Symbol|nil] action
|
84
|
+
# @param [Array] params
|
85
|
+
def self.get_route(action = nil, *params)
|
86
|
+
context.get_route(self, action, params)
|
87
|
+
end
|
88
|
+
|
76
89
|
# Adds one or more helpers to the controller. All controllers get some default helpers
|
77
90
|
# (:routing and :view by default), but if you have your own helpers you want to load this
|
78
91
|
# is the preferred method.
|
@@ -88,53 +101,87 @@ module Racket
|
|
88
101
|
unless settings.fetch(:helpers)
|
89
102
|
# No helpers has been loaded yet. Load the default helpers first.
|
90
103
|
helper_modules.merge!(
|
91
|
-
|
104
|
+
context.helper_cache.load_helpers(settings.fetch(:default_controller_helpers))
|
92
105
|
)
|
93
106
|
end
|
94
107
|
# Load new helpers
|
95
108
|
__load_helpers(helpers.map(&:to_sym), helper_modules)
|
96
109
|
end
|
97
110
|
|
98
|
-
#
|
99
|
-
|
111
|
+
# :@private
|
112
|
+
def self.inherited(klass)
|
113
|
+
settings.fetch(:last_added_controller).push(klass)
|
114
|
+
end
|
115
|
+
|
116
|
+
# Returns the layout settings for the current controller.
|
100
117
|
#
|
101
|
-
# @
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
helpers.reject! { |helper| helper_modules.key?(helper) }
|
106
|
-
helper_modules.merge!(__helper_cache.load_helpers(helpers))
|
107
|
-
setting(:helpers, helper_modules) && nil
|
118
|
+
# @return [Hash]
|
119
|
+
def self.layout_settings
|
120
|
+
template_settings = settings.fetch(:template_settings)
|
121
|
+
template_settings[:common].merge(template_settings[:layout])
|
108
122
|
end
|
109
123
|
|
110
|
-
#
|
111
|
-
|
112
|
-
|
124
|
+
# Add a setting for the current controller class
|
125
|
+
#
|
126
|
+
# @param [Symbol] key
|
127
|
+
# @param [Object] val
|
128
|
+
def self.setting(key, val)
|
129
|
+
settings.store(key, val)
|
113
130
|
end
|
114
131
|
|
115
|
-
# Returns the settings
|
132
|
+
# Returns the settings for the current controller class
|
116
133
|
#
|
117
134
|
# @return [Racket::Settings::Controller]
|
118
135
|
def self.settings
|
119
|
-
@settings ||= Settings::Controller.new(self)
|
136
|
+
@settings ||= Racket::Settings::Controller.new(self)
|
120
137
|
end
|
121
138
|
|
122
|
-
#
|
139
|
+
# Add a setting used by Tilt when rendering views/layouts.
|
123
140
|
#
|
124
141
|
# @param [Symbol] key
|
125
142
|
# @param [Object] value
|
126
|
-
# @
|
127
|
-
def self.
|
128
|
-
settings
|
143
|
+
# @param [Symbol] type One of +:common+, +:layout+ or +:view+
|
144
|
+
def self.template_setting(key, value, type = :common)
|
145
|
+
# If controller has no template settings on its own, copy the template settings
|
146
|
+
# from its "closest" parent (might even be application settings)
|
147
|
+
# @todo - How about template options that are unmarshallable?
|
148
|
+
settings.store(
|
149
|
+
:template_settings, Marshal.load(Marshal.dump(settings.fetch(:template_settings)))
|
150
|
+
) unless settings.present?(:template_settings)
|
151
|
+
|
152
|
+
# Fetch current settings (guaranteed to be in controller by now)
|
153
|
+
template_settings = settings.fetch(:template_settings)
|
154
|
+
|
155
|
+
# Update settings
|
156
|
+
template_settings[type][key] = value
|
157
|
+
settings.store(:template_settings, template_settings)
|
129
158
|
end
|
130
159
|
|
131
|
-
|
160
|
+
# Returns the view settings for the current controller.
|
161
|
+
#
|
162
|
+
# @return [Hash]
|
163
|
+
def self.view_settings
|
164
|
+
template_settings = settings.fetch(:template_settings)
|
165
|
+
template_settings[:common].merge(template_settings[:view])
|
166
|
+
end
|
132
167
|
|
133
|
-
#
|
168
|
+
# Loads new helpers and stores the list of helpers associated with the currenct controller
|
169
|
+
# in the settings.
|
134
170
|
#
|
135
|
-
# @
|
136
|
-
|
137
|
-
|
171
|
+
# @param [Array] helpers Requested helpers
|
172
|
+
# @param [Array] helper_modules Helper modules already loaded
|
173
|
+
# @return nil
|
174
|
+
def self.__load_helpers(helpers, helper_modules)
|
175
|
+
helpers.reject! { |helper| helper_modules.key?(helper) }
|
176
|
+
helper_modules.merge!(context.helper_cache.load_helpers(helpers))
|
177
|
+
setting(:helpers, helper_modules) && nil
|
178
|
+
end
|
179
|
+
|
180
|
+
private_class_method :__load_helpers, :__register_hook, :__update_hooks
|
181
|
+
|
182
|
+
# Returns layout settings associated with the current controller
|
183
|
+
def layout_settings
|
184
|
+
self.class.layout_settings
|
138
185
|
end
|
139
186
|
|
140
187
|
# Redirects the client. After hooks are run.
|
@@ -178,6 +225,16 @@ module Racket
|
|
178
225
|
throw :response, [status, headers, body]
|
179
226
|
end
|
180
227
|
|
228
|
+
# Returns settings associated with the current controller
|
229
|
+
def settings
|
230
|
+
self.class.settings
|
231
|
+
end
|
232
|
+
|
233
|
+
# Returns view settings associated with the current controller
|
234
|
+
def view_settings
|
235
|
+
self.class.view_settings
|
236
|
+
end
|
237
|
+
|
181
238
|
# Calls hooks, action and renderer.
|
182
239
|
#
|
183
240
|
# @return [String]
|
@@ -185,7 +242,7 @@ module Racket
|
|
185
242
|
__run_hook(:before)
|
186
243
|
__run_action
|
187
244
|
__run_hook(:after)
|
188
|
-
|
245
|
+
self.class.context.view_manager.render(self)
|
189
246
|
end
|
190
247
|
|
191
248
|
private
|