Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
2875b4a6
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,发现更多精彩内容 >>
提交
2875b4a6
编写于
1月 08, 2014
作者:
A
Aaron Patterson
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
add a more restricted codepath for templates fixes #13390
上级
e4e750ba
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
51 addition
and
12 deletion
+51
-12
railties/lib/rails/generators/app_base.rb
railties/lib/rails/generators/app_base.rb
+26
-8
railties/test/generators/app_generator_test.rb
railties/test/generators/app_generator_test.rb
+25
-4
未找到文件。
railties/lib/rails/generators/app_base.rb
浏览文件 @
2875b4a6
...
...
@@ -14,6 +14,7 @@ class AppBase < Base # :nodoc:
DATABASES
.
concat
(
JDBC_DATABASES
)
attr_accessor
:rails_template
attr_accessor
:app_template
add_shebang_option!
argument
:app_path
,
type: :string
...
...
@@ -26,6 +27,9 @@ def self.add_shared_options_for(name)
class_option
:template
,
type: :string
,
aliases:
'-m'
,
desc:
"Path to some
#{
name
}
template (can be a filesystem path or URL)"
class_option
:app_template
,
type: :string
,
aliases:
'-n'
,
desc:
"Path to some
#{
name
}
template (can be a filesystem path or URL)"
class_option
:skip_gemfile
,
type: :boolean
,
default:
false
,
desc:
"Don't create a Gemfile"
...
...
@@ -122,6 +126,10 @@ def add_gem_entry_filter
}.
curry
[
@gem_filter
]
end
def
remove_gem
(
name
)
add_gem_entry_filter
{
|
gem
|
gem
.
name
!=
name
}
end
def
builder
@builder
||=
begin
builder_class
=
get_builder_class
...
...
@@ -162,6 +170,10 @@ def add_gem_entry_filter(*args, &block)
@target
.
send
:add_gem_entry_filter
,
*
args
,
&
block
end
def
remove_gem
(
*
args
,
&
block
)
@target
.
send
:remove_gem
,
*
args
,
&
block
end
def
method_missing
(
name
,
*
args
,
&
block
)
@commands
<<
[
name
,
args
,
block
]
end
...
...
@@ -180,7 +192,8 @@ def replay!
def
apply_rails_template
@recorder
=
TemplateRecorder
.
new
self
apply
(
rails_template
,
target:
@recorder
)
if
rails_template
apply
(
rails_template
,
target:
self
)
if
rails_template
apply
(
app_template
,
target:
@recorder
)
if
app_template
rescue
Thor
::
Error
,
LoadError
,
Errno
::
ENOENT
=>
e
raise
Error
,
"The template [
#{
rails_template
}
] could not be loaded. Error:
#{
e
}
"
end
...
...
@@ -210,13 +223,18 @@ def apply(path, config={})
def
set_default_accessors!
self
.
destination_root
=
File
.
expand_path
(
app_path
,
destination_root
)
self
.
rails_template
=
case
options
[
:template
]
self
.
rails_template
=
expand_template
options
[
:template
]
self
.
app_template
=
expand_template
options
[
:app_template
]
end
def
expand_template
(
name
)
case
name
when
/^https?:\/\//
options
[
:template
]
name
when
String
File
.
expand_path
(
options
[
:template
]
,
Dir
.
pwd
)
File
.
expand_path
(
name
,
Dir
.
pwd
)
else
options
[
:template
]
name
end
end
...
...
railties/test/generators/app_generator_test.rb
浏览文件 @
2875b4a6
...
...
@@ -163,12 +163,21 @@ def test_config_database_is_added_by_default
end
end
def
test_arbitrary_code
output
=
Tempfile
.
open
(
'my_template'
)
do
|
template
|
template
.
puts
'puts "You are using Rails version #{Rails::VERSION::STRING}."'
template
.
close
run_generator
([
destination_root
,
"-m"
,
template
.
path
])
end
assert_match
'You are using'
,
output
end
def
test_add_gemfile_entry
Tempfile
.
open
(
'my_template'
)
do
|
template
|
template
.
puts
'gemfile_entry "tenderlove"'
template
.
flush
template
.
close
run_generator
([
destination_root
,
"-
m
"
,
template
.
path
])
run_generator
([
destination_root
,
"-
n
"
,
template
.
path
])
assert_file
"Gemfile"
,
/tenderlove/
end
end
...
...
@@ -176,9 +185,21 @@ def test_add_gemfile_entry
def
test_add_skip_entry
Tempfile
.
open
'my_template'
do
|
template
|
template
.
puts
'add_gem_entry_filter { |gem| gem.name != "jbuilder" }'
template
.
flush
template
.
close
run_generator
([
destination_root
,
"-m"
,
template
.
path
])
run_generator
([
destination_root
,
"-n"
,
template
.
path
])
assert_file
"Gemfile"
do
|
contents
|
assert_no_match
'jbuilder'
,
contents
end
end
end
def
test_remove_gem
Tempfile
.
open
'my_template'
do
|
template
|
template
.
puts
'remove_gem "jbuilder"'
template
.
close
run_generator
([
destination_root
,
"-n"
,
template
.
path
])
assert_file
"Gemfile"
do
|
contents
|
assert_no_match
'jbuilder'
,
contents
end
...
...
@@ -190,7 +211,7 @@ def test_skip_turbolinks_when_it_is_not_on_gemfile
template
.
puts
'add_gem_entry_filter { |gem| gem.name != "turbolinks" }'
template
.
flush
run_generator
([
destination_root
,
"-
m
"
,
template
.
path
])
run_generator
([
destination_root
,
"-
n
"
,
template
.
path
])
assert_file
"Gemfile"
do
|
contents
|
assert_no_match
'turbolinks'
,
contents
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录