Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
119e9e2d
R
rails
项目概览
张重言
/
rails
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
R
rails
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
119e9e2d
编写于
9月 22, 2011
作者:
J
José Valim
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Get rid of update_details in favor of passing details to find_template.
上级
cbaad674
变更
10
隐藏空白更改
内联
并排
Showing
10 changed file
with
50 addition
and
86 deletion
+50
-86
actionmailer/test/mailers/base_mailer.rb
actionmailer/test/mailers/base_mailer.rb
+1
-1
actionpack/lib/action_view/lookup_context.rb
actionpack/lib/action_view/lookup_context.rb
+4
-29
actionpack/lib/action_view/renderer/abstract_renderer.rb
actionpack/lib/action_view/renderer/abstract_renderer.rb
+6
-10
actionpack/lib/action_view/renderer/partial_renderer.rb
actionpack/lib/action_view/renderer/partial_renderer.rb
+11
-12
actionpack/lib/action_view/renderer/template_renderer.rb
actionpack/lib/action_view/renderer/template_renderer.rb
+12
-15
actionpack/test/controller/new_base/render_partial_test.rb
actionpack/test/controller/new_base/render_partial_test.rb
+5
-5
actionpack/test/controller/new_base/render_template_test.rb
actionpack/test/controller/new_base/render_template_test.rb
+3
-3
actionpack/test/controller/render_test.rb
actionpack/test/controller/render_test.rb
+3
-1
actionpack/test/template/lookup_context_test.rb
actionpack/test/template/lookup_context_test.rb
+0
-10
actionpack/test/template/render_test.rb
actionpack/test/template/render_test.rb
+5
-0
未找到文件。
actionmailer/test/mailers/base_mailer.rb
浏览文件 @
119e9e2d
...
@@ -113,6 +113,6 @@ def different_layout(layout_name='')
...
@@ -113,6 +113,6 @@ def different_layout(layout_name='')
end
end
def
email_with_translations
def
email_with_translations
mail
:body
=>
render
(
"email_with_translations
.html"
)
mail
:body
=>
render
(
"email_with_translations
"
,
:formats
=>
[
:html
]
)
end
end
end
end
actionpack/lib/action_view/lookup_context.rb
浏览文件 @
119e9e2d
...
@@ -20,18 +20,16 @@ class LookupContext #:nodoc:
...
@@ -20,18 +20,16 @@ class LookupContext #:nodoc:
def
self
.
register_detail
(
name
,
options
=
{},
&
block
)
def
self
.
register_detail
(
name
,
options
=
{},
&
block
)
self
.
registered_details
<<
name
self
.
registered_details
<<
name
initialize
=
registered_details
.
map
{
|
n
|
"self.
#{
n
}
= details[:
#{
n
}
]"
}
initialize
=
registered_details
.
map
{
|
n
|
"self.
#{
n
}
= details[:
#{
n
}
]"
}
update
=
registered_details
.
map
{
|
n
|
"self.
#{
n
}
= details[:
#{
n
}
] if details.key?(:
#{
n
}
)"
}
Accessors
.
send
:define_method
,
:"
_
#{
name
}
_defaults
"
,
&
block
Accessors
.
send
:define_method
,
:"
default_
#{
name
}
"
,
&
block
Accessors
.
module_eval
<<-
METHOD
,
__FILE__
,
__LINE__
+
1
Accessors
.
module_eval
<<-
METHOD
,
__FILE__
,
__LINE__
+
1
def
#{
name
}
def
#{
name
}
@details[:
#{
name
}
]
@details[:
#{
name
}
]
end
end
def
#{
name
}
=(value)
def
#{
name
}
=(value)
value = Array.wrap(value.presence ||
_
#{
name
}
_defaults
)
value = Array.wrap(value.presence ||
default_
#{
name
}
)
_set_detail(:
#{
name
}
, value) if value != @details[:
#{
name
}
]
_set_detail(:
#{
name
}
, value) if value != @details[:
#{
name
}
]
end
end
...
@@ -39,11 +37,6 @@ def #{name}=(value)
...
@@ -39,11 +37,6 @@ def #{name}=(value)
def initialize_details(details)
def initialize_details(details)
#{
initialize
.
join
(
"
\n
"
)
}
#{
initialize
.
join
(
"
\n
"
)
}
end
end
remove_possible_method :update_details
def update_details(details)
#{
update
.
join
(
"
\n
"
)
}
end
METHOD
METHOD
end
end
...
@@ -88,24 +81,6 @@ def disable_cache
...
@@ -88,24 +81,6 @@ def disable_cache
@cache
=
old_value
@cache
=
old_value
end
end
# Update the details keys by merging the given hash into the current
# details hash. If a block is given, the details are modified just during
# the execution of the block and reverted to the previous value after.
def
update_details
(
new_details
)
if
block_given?
old_details
,
old_key
=
@details
.
dup
,
@details_key
super
begin
yield
ensure
@details
,
@details_key
=
old_details
,
old_key
end
else
super
end
end
protected
protected
def
_set_detail
(
key
,
value
)
def
_set_detail
(
key
,
value
)
...
@@ -220,7 +195,7 @@ def freeze_formats(formats, unless_frozen=false) #:nodoc:
...
@@ -220,7 +195,7 @@ def freeze_formats(formats, unless_frozen=false) #:nodoc:
# add :html as fallback to :js.
# add :html as fallback to :js.
def
formats
=
(
values
)
def
formats
=
(
values
)
if
values
if
values
values
.
concat
(
_formats_defaul
ts
)
if
values
.
delete
"*/*"
values
.
concat
(
default_forma
ts
)
if
values
.
delete
"*/*"
values
<<
:html
if
values
==
[
:js
]
values
<<
:html
if
values
==
[
:js
]
end
end
super
(
values
)
super
(
values
)
...
@@ -246,7 +221,7 @@ def locale=(value)
...
@@ -246,7 +221,7 @@ def locale=(value)
config
.
locale
=
value
config
.
locale
=
value
end
end
super
(
@skip_default_locale
?
I18n
.
locale
:
_locale_defaults
)
super
(
@skip_default_locale
?
I18n
.
locale
:
default_locale
)
end
end
# A method which only uses the first format in the formats array for layout lookup.
# A method which only uses the first format in the formats array for layout lookup.
...
...
actionpack/lib/action_view/renderer/abstract_renderer.rb
浏览文件 @
119e9e2d
...
@@ -11,15 +11,13 @@ def render
...
@@ -11,15 +11,13 @@ def render
raise
NotImplementedError
raise
NotImplementedError
end
end
# Checks if the given path contains a format and if so, change
protected
# the lookup context to take this new format into account.
def
wrap_formats
(
value
)
return
yield
unless
value
.
is_a?
(
String
)
if
value
.
sub!
(
formats_regexp
,
""
)
def
extract_format
(
value
,
details
)
update_details
(
:formats
=>
[
$1
.
to_sym
]){
yield
}
if
value
.
is_a?
(
String
)
&&
value
.
sub!
(
formats_regexp
,
""
)
else
ActiveSupport
::
Deprecation
.
warn
"Passing the format in the template name is deprecated. "
\
yield
"Please pass render with :formats =>
#{
$1
}
instead."
,
caller
details
[
:formats
]
||=
[
$1
.
to_sym
]
end
end
end
end
...
@@ -27,8 +25,6 @@ def formats_regexp
...
@@ -27,8 +25,6 @@ def formats_regexp
@@formats_regexp
||=
/\.(
#{
Mime
::
SET
.
symbols
.
join
(
'|'
)
}
)$/
@@formats_regexp
||=
/\.(
#{
Mime
::
SET
.
symbols
.
join
(
'|'
)
}
)$/
end
end
protected
def
instrument
(
name
,
options
=
{})
def
instrument
(
name
,
options
=
{})
ActiveSupport
::
Notifications
.
instrument
(
"render_
#{
name
}
.action_view"
,
options
){
yield
}
ActiveSupport
::
Notifications
.
instrument
(
"render_
#{
name
}
.action_view"
,
options
){
yield
}
end
end
...
...
actionpack/lib/action_view/renderer/partial_renderer.rb
浏览文件 @
119e9e2d
...
@@ -216,18 +216,15 @@ def initialize(*)
...
@@ -216,18 +216,15 @@ def initialize(*)
def
render
(
context
,
options
,
block
)
def
render
(
context
,
options
,
block
)
setup
(
context
,
options
,
block
)
setup
(
context
,
options
,
block
)
identifier
=
(
@template
=
find_partial
)
?
@template
.
identifier
:
@path
wrap_formats
(
@path
)
do
if
@collection
identifier
=
((
@template
=
find_partial
)
?
@template
.
identifier
:
@path
)
instrument
(
:collection
,
:identifier
=>
identifier
||
"collection"
,
:count
=>
@collection
.
size
)
do
render_collection
if
@collection
end
instrument
(
:collection
,
:identifier
=>
identifier
||
"collection"
,
:count
=>
@collection
.
size
)
do
else
render_collection
instrument
(
:partial
,
:identifier
=>
identifier
)
do
end
render_partial
else
instrument
(
:partial
,
:identifier
=>
identifier
)
do
render_partial
end
end
end
end
end
end
end
...
@@ -271,6 +268,7 @@ def setup(context, options, block)
...
@@ -271,6 +268,7 @@ def setup(context, options, block)
@options
=
options
@options
=
options
@locals
=
options
[
:locals
]
||
{}
@locals
=
options
[
:locals
]
||
{}
@block
=
block
@block
=
block
@details
=
options
.
slice
(
:formats
,
:locale
,
:handlers
)
if
String
===
partial
if
String
===
partial
@object
=
options
[
:object
]
@object
=
options
[
:object
]
...
@@ -299,6 +297,7 @@ def setup(context, options, block)
...
@@ -299,6 +297,7 @@ def setup(context, options, block)
"and is followed by any combinations of letters, numbers, or underscores."
)
"and is followed by any combinations of letters, numbers, or underscores."
)
end
end
extract_format
(
@path
,
@details
)
self
self
end
end
...
@@ -326,7 +325,7 @@ def find_partial
...
@@ -326,7 +325,7 @@ def find_partial
def
find_template
(
path
=
@path
,
locals
=
@locals
.
keys
)
def
find_template
(
path
=
@path
,
locals
=
@locals
.
keys
)
prefixes
=
path
.
include?
(
?/
)
?
[]
:
@lookup_context
.
prefixes
prefixes
=
path
.
include?
(
?/
)
?
[]
:
@lookup_context
.
prefixes
@lookup_context
.
find_template
(
path
,
prefixes
,
true
,
locals
)
@lookup_context
.
find_template
(
path
,
prefixes
,
true
,
locals
,
@details
)
end
end
def
collection_with_template
def
collection_with_template
...
...
actionpack/lib/action_view/renderer/template_renderer.rb
浏览文件 @
119e9e2d
...
@@ -4,30 +4,28 @@
...
@@ -4,30 +4,28 @@
module
ActionView
module
ActionView
class
TemplateRenderer
<
AbstractRenderer
#:nodoc:
class
TemplateRenderer
<
AbstractRenderer
#:nodoc:
def
render
(
context
,
options
)
def
render
(
context
,
options
)
@view
=
context
@view
=
context
@details
=
options
.
slice
(
:formats
,
:locale
,
:handlers
)
wrap_formats
(
options
[
:template
]
||
options
[
:file
])
do
extract_format
(
options
[
:file
]
||
options
[
:template
],
@details
)
template
=
determine_template
(
options
)
template
=
determine_template
(
options
)
freeze_formats
(
template
.
formats
,
true
)
freeze_formats
(
template
.
formats
,
true
)
render_template
(
template
,
options
[
:layout
],
options
[
:locals
])
render_template
(
template
,
options
[
:layout
],
options
[
:locals
])
end
end
end
# Determine the template to be rendered using the given options.
# Determine the template to be rendered using the given options.
def
determine_template
(
options
)
#:nodoc:
def
determine_template
(
options
)
#:nodoc:
keys
=
options
[
:locals
].
try
(
:keys
)
||
[]
keys
=
options
[
:locals
].
try
(
:keys
)
||
[]
details
=
options
.
slice
(
:formats
,
:locale
,
:handlers
)
if
options
.
key?
(
:text
)
if
options
.
key?
(
:text
)
Template
::
Text
.
new
(
options
[
:text
],
formats
.
try
(
:first
))
Template
::
Text
.
new
(
options
[
:text
],
formats
.
try
(
:first
))
elsif
options
.
key?
(
:file
)
elsif
options
.
key?
(
:file
)
with_fallbacks
{
find_template
(
options
[
:file
],
nil
,
false
,
keys
,
details
)
}
with_fallbacks
{
find_template
(
options
[
:file
],
nil
,
false
,
keys
,
@
details
)
}
elsif
options
.
key?
(
:inline
)
elsif
options
.
key?
(
:inline
)
handler
=
Template
.
handler_for_extension
(
options
[
:type
]
||
"erb"
)
handler
=
Template
.
handler_for_extension
(
options
[
:type
]
||
"erb"
)
Template
.
new
(
options
[
:inline
],
"inline template"
,
handler
,
:locals
=>
keys
)
Template
.
new
(
options
[
:inline
],
"inline template"
,
handler
,
:locals
=>
keys
)
elsif
options
.
key?
(
:template
)
elsif
options
.
key?
(
:template
)
options
[
:template
].
respond_to?
(
:render
)
?
options
[
:template
].
respond_to?
(
:render
)
?
options
[
:template
]
:
find_template
(
options
[
:template
],
options
[
:prefixes
],
false
,
keys
)
options
[
:template
]
:
find_template
(
options
[
:template
],
options
[
:prefixes
],
false
,
keys
,
@details
)
end
end
end
end
...
@@ -63,12 +61,11 @@ def find_layout(layout, keys)
...
@@ -63,12 +61,11 @@ def find_layout(layout, keys)
begin
begin
with_layout_format
do
with_layout_format
do
layout
=~
/^\//
?
layout
=~
/^\//
?
with_fallbacks
{
find_template
(
layout
,
nil
,
false
,
keys
)
}
:
find_template
(
layout
,
nil
,
false
,
key
s
)
with_fallbacks
{
find_template
(
layout
,
nil
,
false
,
keys
,
@details
)
}
:
find_template
(
layout
,
nil
,
false
,
keys
,
@detail
s
)
end
end
rescue
ActionView
::
MissingTemplate
rescue
ActionView
::
MissingTemplate
update_details
(
:formats
=>
nil
)
do
all_details
=
@details
.
merge
(
:formats
=>
@lookup_context
.
default_formats
)
raise
unless
template_exists?
(
layout
)
raise
unless
template_exists?
(
layout
,
nil
,
false
,
keys
,
all_details
)
end
end
end
end
end
end
end
...
...
actionpack/test/controller/new_base/render_partial_test.rb
浏览文件 @
119e9e2d
...
@@ -7,12 +7,12 @@ class BasicController < ActionController::Base
...
@@ -7,12 +7,12 @@ class BasicController < ActionController::Base
self
.
view_paths
=
[
ActionView
::
FixtureResolver
.
new
(
self
.
view_paths
=
[
ActionView
::
FixtureResolver
.
new
(
"render_partial/basic/_basic.html.erb"
=>
"BasicPartial!"
,
"render_partial/basic/_basic.html.erb"
=>
"BasicPartial!"
,
"render_partial/basic/basic.html.erb"
=>
"<%= @test_unchanged = 'goodbye' %><%= render :partial => 'basic' %><%= @test_unchanged %>"
,
"render_partial/basic/basic.html.erb"
=>
"<%= @test_unchanged = 'goodbye' %><%= render :partial => 'basic' %><%= @test_unchanged %>"
,
"render_partial/basic/with_json.html.erb"
=>
"<%= render
'with_json.json'
%>"
,
"render_partial/basic/with_json.html.erb"
=>
"<%= render
:partial => 'with_json', :formats => [:json]
%>"
,
"render_partial/basic/_with_json.json.erb"
=>
"<%= render
'final'
%>"
,
"render_partial/basic/_with_json.json.erb"
=>
"<%= render
:partial => 'final', :formats => [:json]
%>"
,
"render_partial/basic/_final.json.erb"
=>
"{ final: json }"
,
"render_partial/basic/_final.json.erb"
=>
"{ final: json }"
,
"render_partial/basic/overriden.html.erb"
=>
"<%= @test_unchanged = 'goodbye' %><%= render :partial => 'overriden' %><%= @test_unchanged %>"
,
"render_partial/basic/overriden.html.erb"
=>
"<%= @test_unchanged = 'goodbye' %><%= render :partial => 'overriden' %><%= @test_unchanged %>"
,
"render_partial/basic/_overriden.html.erb"
=>
"ParentPartial!"
,
"render_partial/basic/_overriden.html.erb"
=>
"ParentPartial!"
,
"render_partial/child/_overriden.html.erb"
=>
"OverridenPartial!"
"render_partial/child/_overriden.html.erb"
=>
"OverridenPartial!"
)]
)]
def
html_with_json_inside_json
def
html_with_json_inside_json
...
...
actionpack/test/controller/new_base/render_template_test.rb
浏览文件 @
119e9e2d
...
@@ -10,8 +10,8 @@ class WithoutLayoutController < ActionController::Base
...
@@ -10,8 +10,8 @@ class WithoutLayoutController < ActionController::Base
"xml_template.xml.builder"
=>
"xml.html do
\n
xml.p 'Hello'
\n
end"
,
"xml_template.xml.builder"
=>
"xml.html do
\n
xml.p 'Hello'
\n
end"
,
"with_raw.html.erb"
=>
"Hello <%=raw '<strong>this is raw</strong>' %>"
,
"with_raw.html.erb"
=>
"Hello <%=raw '<strong>this is raw</strong>' %>"
,
"with_implicit_raw.html.erb"
=>
"Hello <%== '<strong>this is also raw</strong>' %>"
,
"with_implicit_raw.html.erb"
=>
"Hello <%== '<strong>this is also raw</strong>' %>"
,
"test/with_json.html.erb"
=>
"<%= render :template => 'test/with_json
.json'
%>"
,
"test/with_json.html.erb"
=>
"<%= render :template => 'test/with_json
', :formats => [:json]
%>"
,
"test/with_json.json.erb"
=>
"<%= render :template => 'test/final' %>"
,
"test/with_json.json.erb"
=>
"<%= render :template => 'test/final'
, :formats => [:json]
%>"
,
"test/final.json.erb"
=>
"{ final: json }"
,
"test/final.json.erb"
=>
"{ final: json }"
,
"test/with_error.html.erb"
=>
"<%= idontexist %>"
"test/with_error.html.erb"
=>
"<%= idontexist %>"
)]
)]
...
@@ -117,7 +117,7 @@ class TestWithoutLayout < Rack::TestCase
...
@@ -117,7 +117,7 @@ class TestWithoutLayout < Rack::TestCase
assert_response
"{ final: json }"
assert_response
"{ final: json }"
end
end
test
"rendering a template with error properly exce
p
rts the code"
do
test
"rendering a template with error properly excerts the code"
do
get
:with_error
get
:with_error
assert_status
500
assert_status
500
assert_match
"undefined local variable or method `idontexist'"
,
response
.
body
assert_match
"undefined local variable or method `idontexist'"
,
response
.
body
...
...
actionpack/test/controller/render_test.rb
浏览文件 @
119e9e2d
...
@@ -797,7 +797,9 @@ def test_render_file_with_instance_variables
...
@@ -797,7 +797,9 @@ def test_render_file_with_instance_variables
end
end
def
test_render_file
def
test_render_file
get
:hello_world_file
assert_deprecated
do
get
:hello_world_file
end
assert_equal
"Hello world!"
,
@response
.
body
assert_equal
"Hello world!"
,
@response
.
body
end
end
...
...
actionpack/test/template/lookup_context_test.rb
浏览文件 @
119e9e2d
...
@@ -31,16 +31,6 @@ def teardown
...
@@ -31,16 +31,6 @@ def teardown
assert
@lookup_context
.
formats
.
frozen?
assert
@lookup_context
.
formats
.
frozen?
end
end
test
"allows me to change some details to execute an specific block of code"
do
formats
=
Mime
::
SET
@lookup_context
.
update_details
(
:locale
=>
:pt
)
do
assert_equal
formats
,
@lookup_context
.
formats
assert_equal
:pt
,
@lookup_context
.
locale
end
assert_equal
formats
,
@lookup_context
.
formats
assert_equal
:en
,
@lookup_context
.
locale
end
test
"provides getters and setters for formats"
do
test
"provides getters and setters for formats"
do
@lookup_context
.
formats
=
[
:html
]
@lookup_context
.
formats
=
[
:html
]
assert_equal
[
:html
],
@lookup_context
.
formats
assert_equal
[
:html
],
@lookup_context
.
formats
...
...
actionpack/test/template/render_test.rb
浏览文件 @
119e9e2d
...
@@ -38,6 +38,11 @@ def test_render_file_with_format
...
@@ -38,6 +38,11 @@ def test_render_file_with_format
assert_equal
"<error>No Comment</error>"
,
@view
.
render
(
:file
=>
"comments/empty"
,
:formats
=>
[
:xml
])
assert_equal
"<error>No Comment</error>"
,
@view
.
render
(
:file
=>
"comments/empty"
,
:formats
=>
[
:xml
])
end
end
def
test_render_template_with_format
assert_equal
"<h1>No Comment</h1>"
,
@view
.
render
(
:template
=>
"comments/empty"
,
:formats
=>
[
:html
])
assert_equal
"<error>No Comment</error>"
,
@view
.
render
(
:template
=>
"comments/empty"
,
:formats
=>
[
:xml
])
end
def
test_render_file_with_localization
def
test_render_file_with_localization
old_locale
,
@view
.
locale
=
@view
.
locale
,
:da
old_locale
,
@view
.
locale
=
@view
.
locale
,
:da
assert_equal
"Hey verden"
,
@view
.
render
(
:file
=>
"test/hello_world"
)
assert_equal
"Hey verden"
,
@view
.
render
(
:file
=>
"test/hello_world"
)
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录