alfa 0.0.4.pre → 0.0.5.pre
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/assets/js/jquery/jquery-1.11.0.js +10337 -0
- data/assets/js/jquery/jquery-1.11.0.min.js +4 -0
- data/assets/js/jquery/jquery-latest.js +4 -2
- data/dummy/project/Gemfile.source +6 -0
- data/dummy/project/Rakefile +5 -0
- data/dummy/project/apps/admin/controllers/default.rb +4 -0
- data/dummy/project/apps/admin/layouts/base.tpl +14 -0
- data/dummy/project/apps/admin/layouts/index.tpl.source +5 -0
- data/dummy/project/apps/admin/routes.rb +3 -0
- data/dummy/project/apps/admin/templates/default/index.tpl +1 -0
- data/dummy/project/apps/frontend/controllers/default.rb +5 -0
- data/dummy/project/apps/frontend/layouts/base.tpl +14 -0
- data/dummy/project/apps/frontend/layouts/index.tpl.source +5 -0
- data/dummy/project/apps/frontend/routes.rb +11 -0
- data/dummy/project/apps/frontend/templates/default/index.tpl +1 -0
- data/dummy/project/config/cli_application.rb +14 -0
- data/dummy/project/config/config.rb +11 -0
- data/dummy/project/config/db.rb +11 -0
- data/dummy/project/config/env.rb +6 -0
- data/dummy/project/config/groups.rb +17 -0
- data/dummy/project/config/passwords/db.sample.yml +8 -0
- data/dummy/project/config/routes.rb +4 -0
- data/dummy/project/config/setup_load_paths.rb +14 -0
- data/dummy/project/config/web_application.rb +15 -0
- data/dummy/project/config.ru +3 -0
- data/dummy/project/db/main/schema.yml +3 -0
- data/dummy/project/public/favicon.ico +0 -0
- data/dummy/project/public/robots.txt +1 -0
- data/lib/alfa/application.rb +6 -5
- data/lib/alfa/commands/new.rb +49 -4
- data/lib/alfa/controller.rb +118 -1
- data/lib/alfa/database/mysql.rb +1 -1
- data/lib/alfa/exceptions.rb +13 -0
- data/lib/alfa/logger.rb +3 -0
- data/lib/alfa/router.rb +25 -0
- data/lib/alfa/ruty.rb +10 -0
- data/lib/alfa/support.rb +39 -4
- data/lib/alfa/template-inheritance.rb +3 -0
- data/lib/alfa/user.rb +63 -0
- data/lib/alfa/web_application.rb +113 -39
- data/lib/haml/alfa_patch.rb +25 -0
- data/lib/rack/file_alfa.rb +11 -0
- data/lib/ruty/tags/href.rb +12 -0
- data/lib/ruty/upgrade.rb +1 -1
- data/lib/template-inheritance/alfa_bugfix.rb +15 -0
- data/lib/template-inheritance/alfa_helpers.rb +93 -0
- data/lib/tilt/alfa_patch.rb +25 -0
- data/test/data/test_web_application/apps/admin/controllers/default.rb +20 -0
- data/test/data/test_web_application/apps/admin/routes.rb +3 -0
- data/test/data/test_web_application/apps/frontend/controllers/default.rb +35 -0
- data/test/data/test_web_application/apps/frontend/routes.rb +2 -2
- data/test/data/test_web_application/config/routes.rb +1 -0
- data/test/test_controller.rb +30 -2
- data/test/test_router.rb +24 -0
- data/test/test_support.rb +72 -19
- data/test/test_web_application.rb +72 -5
- data/version.rb +1 -0
- metadata +143 -74
- data/test/data/test_web_application/apps/frontend/controllers/kfk.rb +0 -9
data/lib/alfa/web_application.rb
CHANGED
@@ -1,22 +1,32 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
require 'alfa/support'
|
3
2
|
require 'alfa/exceptions'
|
4
3
|
require 'alfa/application'
|
5
4
|
require 'alfa/tfile'
|
6
5
|
require 'alfa/controller'
|
7
6
|
require 'alfa/router'
|
8
|
-
require 'ruty'
|
9
|
-
require '
|
10
|
-
require '
|
11
|
-
require '
|
7
|
+
require 'alfa/ruty'
|
8
|
+
require 'alfa/user'
|
9
|
+
require 'rack/utils'
|
10
|
+
require 'rack/request'
|
11
|
+
require 'rack/file_alfa'
|
12
|
+
require 'digest/md5'
|
13
|
+
require 'securerandom'
|
14
|
+
require 'haml'
|
15
|
+
require 'alfa/template-inheritance'
|
16
|
+
require 'tilt/alfa_patch'
|
17
|
+
require 'haml/alfa_patch'
|
12
18
|
|
13
19
|
module Alfa
|
14
20
|
class WebApplication < Alfa::Application
|
15
21
|
|
16
|
-
@namespaces_stack = []
|
17
22
|
@bputs = []
|
23
|
+
@haml_templates = {}
|
18
24
|
|
19
|
-
|
25
|
+
class << self
|
26
|
+
attr_reader :request
|
27
|
+
end
|
28
|
+
|
29
|
+
def self.inherited(subclass)
|
20
30
|
instance_variables.each do |var|
|
21
31
|
subclass.instance_variable_set(var, instance_variable_get(var))
|
22
32
|
end
|
@@ -27,56 +37,74 @@ module Alfa
|
|
27
37
|
Alfa::Router.reset
|
28
38
|
Alfa::Router.apps_dir = File.join(@config[:project_root], 'apps')
|
29
39
|
load File.join(@config[:project_root], 'config/routes.rb')
|
40
|
+
TemplateInheritance.logger = @logger
|
41
|
+
Alfa.GROUPS = @config[:groups]
|
30
42
|
end
|
31
43
|
|
32
|
-
# main
|
33
|
-
def self.call
|
44
|
+
# main Rack routine
|
45
|
+
def self.call(env, &block)
|
34
46
|
start_time = Time.now
|
35
47
|
response_code = nil # required for store context inside @logger.portion
|
36
48
|
headers = {} # required for store context inside @logger.portion
|
37
49
|
body = nil # required for store context inside @logger.portion
|
38
50
|
@logger.portion(:sync=>true) do |l|
|
39
51
|
@config[:db].each_value { |db| db[:instance].loggers = [l] }
|
40
|
-
|
52
|
+
TemplateInheritance.logger = l
|
41
53
|
@bputs = []
|
42
54
|
headers = {"Content-Type" => 'text/html; charset=utf-8'}
|
43
55
|
t_sym = :default
|
44
56
|
begin
|
45
57
|
l.info "#{env['REQUEST_METHOD']} #{env['REQUEST_URI']} #{env['SERVER_PROTOCOL']} from #{env['REMOTE_ADDR']} at #{DateTime.now}"
|
46
|
-
#l.info " HTTP_HOST: #{env['HTTP_HOST']}"
|
47
|
-
|
48
|
-
|
49
|
-
|
58
|
+
# l.info " HTTP_HOST: #{env['HTTP_HOST']}"
|
59
|
+
# l.info " HTTP_ACCEPT: #{env['HTTP_ACCEPT']}"
|
60
|
+
# l.info " HTTP_ACCEPT_LANGUAGE: #{env['HTTP_ACCEPT_LANGUAGE']}"
|
61
|
+
# l.info " PATH_INFO: #{env['PATH_INFO']}"
|
50
62
|
response_code = 200
|
51
|
-
route, params = self.routes.find_route(
|
63
|
+
route, params = self.routes.find_route(Rack::Utils.unescape(env['PATH_INFO']))
|
52
64
|
t_sym = route[:options].has_key?(:type) ? route[:options][:type] : :default
|
53
65
|
if t_sym == :asset
|
54
|
-
|
66
|
+
realpath = File.expand_path('../../../assets/' + params[:path], __FILE__)
|
67
|
+
body = File.read(realpath)
|
55
68
|
case File.extname(params[:path]).downcase
|
56
69
|
when '.js'
|
57
|
-
headers
|
70
|
+
headers['Content-Type'] = 'application/javascript; charset=utf-8'
|
58
71
|
when '.css'
|
59
|
-
headers
|
72
|
+
headers['Content-Type'] = 'text/css; charset=utf-8'
|
60
73
|
else
|
61
74
|
end
|
75
|
+
headers['Last-Modified'] = File.mtime(realpath).httpdate
|
76
|
+
headers['Cache-Control'] = 'max-age=2592000'
|
77
|
+
headers['Expires'] = (Time.now + 2592000).httpdate
|
62
78
|
else
|
79
|
+
request = Rack::Request.new(env) # weakref?
|
63
80
|
app_sym = route[:options].has_key?(:app) ? route[:options][:app] : params[:app]
|
64
81
|
c_sym = route[:options].has_key?(:controller) ? route[:options][:controller] : params[:controller]
|
65
82
|
a_sym = route[:options].has_key?(:action) ? route[:options][:action] : params[:action]
|
66
83
|
l_sym = route[:options].has_key?(:layout) ? route[:options][:layout] : :default
|
67
|
-
controller = self.
|
84
|
+
controller = self.invoke_controller(app_sym, c_sym)
|
85
|
+
raise Exceptions::Route404 unless controller.class.instance_methods(false).include?(a_sym)
|
86
|
+
controller._clear_instance_variables # cleanup
|
87
|
+
controller.application = self
|
88
|
+
controller.request = request
|
89
|
+
controller.app_sym = app_sym
|
90
|
+
controller.c_sym = c_sym
|
68
91
|
controller.__send__(a_sym)
|
69
92
|
data = controller._instance_variables_hash
|
70
|
-
Ruty::Tags::RequireStyle.clean_cache
|
71
|
-
|
72
|
-
|
73
|
-
|
93
|
+
Ruty::Tags::RequireStyle.clean_cache # cleanup
|
94
|
+
Ruty::Tags::RequireScript.clean_cache # cleanup
|
95
|
+
content = self.render_template(app_sym, c_sym, a_sym, controller, data, &block)
|
96
|
+
body = self.render_layout(app_sym.to_s, l_sym.to_s, data.merge({:@body => content}))
|
97
|
+
headers["Content-Type"] = 'text/html; charset=utf-8'
|
74
98
|
end
|
75
99
|
rescue Alfa::Exceptions::Route404 => e
|
76
100
|
response_code = 404
|
77
101
|
body = 'Url not found<br>urls map:<br>'
|
78
102
|
body += self.routes.instance_variable_get(:@routes).inspect
|
79
103
|
l.info "404: Url not found (#{e.message})"
|
104
|
+
rescue Exceptions::HttpRedirect => e
|
105
|
+
response_code = e.code
|
106
|
+
headers['Location'] = e.url.to_s
|
107
|
+
body = ''
|
80
108
|
rescue Exception => e
|
81
109
|
response_code = 500
|
82
110
|
body = "Error occured: #{e.message} at #{e.backtrace.first}<br>Full backtrace:<br>\n#{e.backtrace.join("<br>\n")}"
|
@@ -102,39 +130,85 @@ module Alfa
|
|
102
130
|
end
|
103
131
|
|
104
132
|
|
133
|
+
def self.rackup(builder)
|
134
|
+
builder.use Rack::Session::Cookie
|
135
|
+
if @config[:serve_static]
|
136
|
+
builder.run Rack::Cascade.new([
|
137
|
+
Rack::FileAlfa.new(@config[:document_root]),
|
138
|
+
self,
|
139
|
+
])
|
140
|
+
else
|
141
|
+
builder.run self
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
|
105
146
|
def self.bputs arg
|
106
147
|
@bputs << "#{arg}\n"
|
107
148
|
end
|
108
149
|
|
109
150
|
|
151
|
+
def self.redirect(url, code=302)
|
152
|
+
raise Exceptions::HttpRedirect.new(url, code)
|
153
|
+
end
|
154
|
+
|
110
155
|
# private section
|
111
156
|
|
112
157
|
def self.verify_config
|
113
158
|
super
|
114
|
-
raise Exceptions::E002.new unless @config[:document_root]
|
159
|
+
raise Exceptions::E002.new('config[:document_root] should be defined') unless @config[:document_root]
|
160
|
+
raise Exceptions::E002.new('config[:templates_priority] should be defined') unless @config[:templates_priority]
|
161
|
+
raise Exceptions::E001.new('config[:groups] should be a hash') unless @config[:groups].is_a?(::Hash)
|
162
|
+
@config[:groups][:public] = [] unless @config[:groups][:public]
|
115
163
|
end
|
116
164
|
|
117
|
-
def self.
|
118
|
-
@controllers
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
165
|
+
def self.invoke_controller(a_sym, c_sym)
|
166
|
+
load File.join(@config[:project_root], 'apps', a_sym.to_s, 'controllers', c_sym.to_s + '.rb')
|
167
|
+
klass_name = Alfa::Support.camelcase_name(c_sym)+'Controller'
|
168
|
+
klass = Kernel.const_get(klass_name) # weakref?
|
169
|
+
instance = klass.new
|
170
|
+
Object.module_eval{remove_const(klass_name)}
|
171
|
+
return instance
|
124
172
|
end
|
125
173
|
|
126
|
-
def self.render_template
|
127
|
-
|
128
|
-
|
174
|
+
def self.render_template(app_sym, c_sym, a_sym, controller, data = {}, &block)
|
175
|
+
render(file: File.join(@config[:project_root], 'apps', app_sym.to_s, 'templates', c_sym.to_s, a_sym.to_s), controller: controller, data: data, &block)
|
176
|
+
end
|
177
|
+
|
178
|
+
def self.render_layout(app, layout, data = {})
|
179
|
+
render(file: File.join(@config[:project_root], 'apps', app, 'layouts', layout.to_s), data: data)
|
180
|
+
end
|
181
|
+
|
182
|
+
def self.render(file: nil, controller: nil, data: {})
|
183
|
+
@config[:templates_priority].each do |ext|
|
184
|
+
f = "#{file}.#{ext}"
|
185
|
+
if File.exist?(f)
|
186
|
+
case ext
|
187
|
+
when :haml
|
188
|
+
template = self.haml_template(f, controller)
|
189
|
+
yield(controller, template) if block_given? # required only for thread isolation test
|
190
|
+
return template.render data
|
191
|
+
when :tpl
|
192
|
+
Ruty::AUX_VARS[:controller] = controller
|
193
|
+
template = self.ruty_loader.get_template(f)
|
194
|
+
return template.render data
|
195
|
+
else
|
196
|
+
raise StandardError.new("Unknown template type: #{ext}")
|
197
|
+
end
|
198
|
+
break
|
199
|
+
end
|
200
|
+
end
|
201
|
+
raise StandardError.new("Can't find template #{file}.[#{@config[:templates_priority].join('|')}]")
|
129
202
|
end
|
130
203
|
|
131
|
-
def self.
|
132
|
-
|
133
|
-
t.render data
|
204
|
+
def self.ruty_loader
|
205
|
+
@ruty_loader ||= Ruty::Loaders::Filesystem.new(:dirname => File.join(@config[:project_root], 'apps'))
|
134
206
|
end
|
135
207
|
|
136
|
-
def self.
|
137
|
-
@
|
208
|
+
def self.haml_template(file, controller)
|
209
|
+
# @haml_templates[file.to_sym] ||= TemplateInheritance::Template.new(file)
|
210
|
+
scope = TemplateInheritance::RenderScope.new(controller)
|
211
|
+
TemplateInheritance::Template.new(file, scope)
|
138
212
|
end
|
139
213
|
|
140
214
|
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Haml
|
2
|
+
class Options
|
3
|
+
@defaults = @defaults.merge({:raw_interpolated_tags => []})
|
4
|
+
attr_accessor :raw_interpolated_tags
|
5
|
+
end
|
6
|
+
|
7
|
+
module Util
|
8
|
+
def unescape_interpolation(str, escape_html = nil)
|
9
|
+
res = ''
|
10
|
+
rest = Haml::Util.handle_interpolation str.dump do |scan|
|
11
|
+
escapes = (scan[2].size - 1) / 2
|
12
|
+
res << scan.matched[0...-3 - escapes]
|
13
|
+
if escapes % 2 == 1
|
14
|
+
res << '#{'
|
15
|
+
else
|
16
|
+
content = eval('"' + balance(scan, ?{, ?}, 1)[0][0...-1] + '"')
|
17
|
+
tag = content[/(\S+\s?){1}/].strip.to_sym
|
18
|
+
content = "Haml::Helpers.html_escape((#{content}))" if escape_html && !@options[:raw_interpolated_tags].include?(tag)
|
19
|
+
res << '#{' + content + "}"# Use eval to get rid of string escapes
|
20
|
+
end
|
21
|
+
end
|
22
|
+
res + rest
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
# HREF
|
2
|
+
|
3
|
+
class Ruty::Tags::Href < Ruty::Tag
|
4
|
+
def initialize(parser, argstring)
|
5
|
+
@argstring = argstring
|
6
|
+
end
|
7
|
+
def render_node(context, stream)
|
8
|
+
stream << Ruty::AUX_VARS[:controller].href(@argstring)
|
9
|
+
end
|
10
|
+
Ruty::Tags.register(self, :href)
|
11
|
+
Ruty::Tags.register(self, :href_to)
|
12
|
+
end
|
data/lib/ruty/upgrade.rb
CHANGED
@@ -0,0 +1,15 @@
|
|
1
|
+
# Monkeypatch bugfix for gem TemplateInheritance v0.3.1
|
2
|
+
# Without this patch the line 10 in template-inheritance/exts/tilt.rb
|
3
|
+
# klass.send(:remove_method, :initialize_engine)
|
4
|
+
# raises error during initialization because Tilt 2.0.0 have no method Tilt::HamlTemplate.initialize_engine
|
5
|
+
# Correct syntax in tilt.rb should be:
|
6
|
+
# klass.send(:remove_method, :initialize_engine) if klass.respond_to?(:initialize_engine)
|
7
|
+
module Tilt
|
8
|
+
class HamlTemplate
|
9
|
+
unless self.respond_to?(:initialize_engine)
|
10
|
+
def initialize_engine
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
# End of patch
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# Monkeypatch functionalfix for gem TemplateInheritance v0.3.1
|
2
|
+
module TemplateInheritance
|
3
|
+
class Template
|
4
|
+
attr_writer :resources
|
5
|
+
def resources
|
6
|
+
@resources ||= {styles: [], scripts:[], added_scripts: []}
|
7
|
+
end
|
8
|
+
|
9
|
+
def instantiate_supertemplate
|
10
|
+
supertemplate = self.class.new(self.supertemplate, self.scope)
|
11
|
+
supertemplate.blocks = self.blocks
|
12
|
+
supertemplate.resources = self.resources
|
13
|
+
supertemplate
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
|
18
|
+
class RenderScope
|
19
|
+
attr_reader :controller
|
20
|
+
|
21
|
+
def initialize(controller = nil)
|
22
|
+
@controller = controller
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
|
27
|
+
module TemplateHelpers
|
28
|
+
def require_style(src, *modes)
|
29
|
+
case src
|
30
|
+
when :'960gs', '960gs'
|
31
|
+
require_style '/~assets/css/960gs/reset.css' if modes.include?(:reset)
|
32
|
+
require_style '/~assets/css/960gs/text.css' if modes.include?(:text)
|
33
|
+
require_style '/~assets/css/960gs/960.css'
|
34
|
+
when :'960gs24', '960gs24'
|
35
|
+
require_style '/~assets/css/960gs/reset.css' if modes.include?(:reset)
|
36
|
+
require_style '/~assets/css/960gs/text.css' if modes.include?(:text)
|
37
|
+
require_style '/~assets/css/960gs/960_24_col.css'
|
38
|
+
when :alfa_classic, 'alfa_classic'
|
39
|
+
|
40
|
+
else
|
41
|
+
self.template.resources[:styles] << src
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def styles
|
46
|
+
self.template.resources[:styles].uniq.map{|s|
|
47
|
+
if s.match(/^\/~assets\/(.*)/)
|
48
|
+
f = File.join(File.expand_path('../../../assets/', __FILE__), $1)
|
49
|
+
else
|
50
|
+
f = File.join(Alfa::WebApplication.config[:document_root], s)
|
51
|
+
end
|
52
|
+
mtime = File.exist?(f) ? File.mtime(f).to_i : nil
|
53
|
+
"<link rel=\"stylesheet\" type=\"text/css\" href=\"#{s}?#{mtime}\">\n"
|
54
|
+
}.join('')
|
55
|
+
end
|
56
|
+
|
57
|
+
def top_scripts
|
58
|
+
|
59
|
+
end
|
60
|
+
|
61
|
+
def require_script(src, type: 'text/javascript')
|
62
|
+
raise ArgumentError, 'src required' if src.nil?
|
63
|
+
self.template.resources[:scripts] << src
|
64
|
+
end
|
65
|
+
|
66
|
+
def add_script(type: 'text/javascript', &block)
|
67
|
+
self.template.resources[:scripts] << self.template.scope.capture(&block)
|
68
|
+
end
|
69
|
+
|
70
|
+
def scripts
|
71
|
+
self.template.resources[:scripts].reverse.uniq.map{|s| "<script type='text/javascript' src='#{s}'></script>\n" }.join('')
|
72
|
+
end
|
73
|
+
|
74
|
+
def href(*o)
|
75
|
+
@controller.href(*o)
|
76
|
+
end
|
77
|
+
|
78
|
+
def a(text, url)
|
79
|
+
"<a href='#{url}'>#{Haml::Helpers.html_escape(text)}</a>"
|
80
|
+
end
|
81
|
+
|
82
|
+
alias :link_to :a
|
83
|
+
|
84
|
+
def controller
|
85
|
+
@controller
|
86
|
+
end
|
87
|
+
|
88
|
+
def user
|
89
|
+
@controller.user
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
# End of patch
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module Tilt
|
2
|
+
class Template
|
3
|
+
# This patch allows to use of @keys as well as keys
|
4
|
+
# Example:
|
5
|
+
# template.render({:@name => 'Piter'})
|
6
|
+
def local_extraction(local_keys)
|
7
|
+
local_keys.map do |k|
|
8
|
+
if k.to_s =~ /\A@?[a-z_][a-zA-Z_0-9]*\z/ # this line patched
|
9
|
+
"#{k} = locals[#{k.inspect}]"
|
10
|
+
else
|
11
|
+
raise "invalid locals key: #{k.inspect} (keys must be variable names)"
|
12
|
+
end
|
13
|
+
end.join("\n")
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
module TemplateInheritance
|
19
|
+
class Template
|
20
|
+
def template(options = {})
|
21
|
+
options = {:escape_html => true, :raw_interpolated_tags => [:a, :link_to]}.merge(options)
|
22
|
+
@template ||= Tilt.new(self.fullpath, nil, options)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
class DefaultController < Alfa::Controller
|
2
|
+
def test_04
|
3
|
+
@str = 'Admin'
|
4
|
+
end
|
5
|
+
|
6
|
+
def test_06
|
7
|
+
end
|
8
|
+
|
9
|
+
def test_08
|
10
|
+
@request = request
|
11
|
+
@env = @request.env
|
12
|
+
@path_info = @env['PATH_INFO']
|
13
|
+
session[:foo] = :baz
|
14
|
+
@link = href('test_08')
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_08a
|
18
|
+
session[:foo] = :faz
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
class DefaultController < Alfa::Controller
|
2
|
+
def index
|
3
|
+
end
|
4
|
+
|
5
|
+
def bar
|
6
|
+
end
|
7
|
+
|
8
|
+
def test_04
|
9
|
+
@str = 'Frontend'
|
10
|
+
end
|
11
|
+
|
12
|
+
def frontend_only
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_06
|
16
|
+
@some_var = :some_value
|
17
|
+
end
|
18
|
+
|
19
|
+
def test_07
|
20
|
+
@other_var = :other_value
|
21
|
+
end
|
22
|
+
|
23
|
+
def test_08
|
24
|
+
@request = request
|
25
|
+
@env = @request.env
|
26
|
+
@path_info = @env['PATH_INFO']
|
27
|
+
session[:foo] = :bar
|
28
|
+
@link = href('test_08')
|
29
|
+
end
|
30
|
+
|
31
|
+
def test_08a
|
32
|
+
@controller = self
|
33
|
+
session[:foo] = :far
|
34
|
+
end
|
35
|
+
end
|
data/test/test_controller.rb
CHANGED
@@ -1,5 +1,6 @@
|
|
1
1
|
require 'test/unit'
|
2
2
|
require 'alfa/controller'
|
3
|
+
require 'alfa/exceptions'
|
3
4
|
|
4
5
|
class TestAlfaController < Test::Unit::TestCase
|
5
6
|
def test_01
|
@@ -15,8 +16,35 @@ end
|
|
15
16
|
EOL
|
16
17
|
z = Z.new
|
17
18
|
z.some_action
|
18
|
-
assert_equal({
|
19
|
+
assert_equal({:@foo=>:bar}, z._instance_variables_hash)
|
19
20
|
z.other_action
|
20
|
-
assert_equal({
|
21
|
+
assert_equal({:@foo=>:bar, :@fuu=>:baz}, z._instance_variables_hash)
|
22
|
+
end
|
23
|
+
|
24
|
+
# _string_to_aca
|
25
|
+
def test_02
|
26
|
+
c = Alfa::Controller.new
|
27
|
+
assert_equal({:action=>:foo}, c._string_to_aca('foo'))
|
28
|
+
assert_equal({:action=>:foo, :controller=>:default}, c._string_to_aca('default#foo'))
|
29
|
+
assert_equal({:app=>:admin, :controller=>:default, :action=>:foo}, c._string_to_aca('default#foo@admin'))
|
30
|
+
assert_equal({:app=>:admin}, c._string_to_aca('@admin'))
|
31
|
+
assert_raise Alfa::Exceptions::E004 do c._string_to_aca('default#foo@admi@n') end
|
32
|
+
assert_raise Alfa::Exceptions::E004 do c._string_to_aca('de#fault#foo@admin') end
|
33
|
+
assert_raise Alfa::Exceptions::E004 do c._string_to_aca('#default#f#oo@admin') end
|
34
|
+
end
|
35
|
+
|
36
|
+
# _extract_href_params
|
37
|
+
def test_03
|
38
|
+
c = Alfa::Controller.new
|
39
|
+
c.app_sym = :frontend
|
40
|
+
c.c_sym = :default
|
41
|
+
assert_equal({:app=>:frontend, :controller=>:default, :action=>:foo}, c._extract_href_params(:action=>:foo))
|
42
|
+
assert_equal({:app=>:frontend, :controller=>:default, :action=>:foo}, c._extract_href_params(:action=>:foo, :controller=>:default))
|
43
|
+
assert_equal({:app=>:frontend, :controller=>:default, :action=>:foo}, c._extract_href_params(:foo))
|
44
|
+
assert_equal({:app=>:frontend, :controller=>:default, :action=>:foo}, c._extract_href_params('foo'))
|
45
|
+
assert_equal({:app=>:frontend, :controller=>:admin, :action=>:foo}, c._extract_href_params('admin#foo'))
|
46
|
+
assert_equal({:app=>:zoo, :controller=>:admin, :action=>:foo}, c._extract_href_params('admin#foo', :app=>:zoo))
|
47
|
+
assert_equal({:app=>:zoo, :controller=>:admin, :action=>:foo}, c._extract_href_params('admin#foo@zoo'))
|
48
|
+
assert_equal({:app=>:admin}, c._extract_href_params(:app=>:admin))
|
21
49
|
end
|
22
50
|
end
|
data/test/test_router.rb
CHANGED
@@ -211,4 +211,28 @@ class AlfaRouterTest < Test::Unit::TestCase
|
|
211
211
|
)
|
212
212
|
#puts Alfa::Router.instance_variable_get(:@routes).inspect
|
213
213
|
end
|
214
|
+
|
215
|
+
# Building urls
|
216
|
+
def test_09
|
217
|
+
Alfa::Router.reset
|
218
|
+
Alfa::Router.apps_dir = File.expand_path('../data/test_router/2/apps', __FILE__)
|
219
|
+
load File.expand_path('../data/test_router/2/config/routes.rb', __FILE__)
|
220
|
+
assert_equal('/', Alfa::Router.href(:app=>:frontend, :controller=>:main, :action=>:index))
|
221
|
+
assert_equal('/', Alfa::Router.href(:app=>:frontend))
|
222
|
+
assert_equal('/hello', Alfa::Router.href(:app=>:frontend, :controller=>:main, :action=>:hello))
|
223
|
+
assert_equal('/hello', Alfa::Router.href(:app=>:frontend, :action=>:hello))
|
224
|
+
assert_equal('/hello/babuin', Alfa::Router.href(:app=>:frontend, :controller=>:hello, :action=>:babuin))
|
225
|
+
assert_equal('/hello/babuin/11', Alfa::Router.href(:app=>:frontend, :controller=>:hello, :action=>:babuin, :id=>11))
|
226
|
+
assert_equal('/admin/', Alfa::Router.href(:app=>:backend, :controller=>:main, :action=>:index))
|
227
|
+
assert_equal('/admin/', Alfa::Router.href(:app=>:backend))
|
228
|
+
assert_equal('/admin/', Alfa::Router.href(:app=>:backend, :controller=>:main))
|
229
|
+
assert_equal('/admin/babuin', Alfa::Router.href(:app=>:backend, :controller=>:babuin, :action=>:index))
|
230
|
+
assert_equal('/admin/babuin', Alfa::Router.href(:app=>:backend, :controller=>:babuin))
|
231
|
+
|
232
|
+
# Build urls with GET params
|
233
|
+
assert_equal('/?foo=bar', Alfa::Router.href(:app=>:frontend, :controller=>:main, :action=>:index, :params=>{:foo=>:bar}))
|
234
|
+
assert_equal('/?staki=gKyE', Alfa::Router.href(:app=>:frontend, :params=>{:staki=>'gKyE'}))
|
235
|
+
assert_equal('/?company=AT%26T', Alfa::Router.href(:app=>:frontend, :params=>{:company=>'AT&T'}))
|
236
|
+
end
|
237
|
+
|
214
238
|
end
|