Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
21db0481
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,发现更多精彩内容 >>
提交
21db0481
编写于
7月 03, 2009
作者:
J
José Valim
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
More tests for rails generators and lookup.
上级
3ca504c9
变更
12
隐藏空白更改
内联
并排
Showing
12 changed file
with
162 addition
and
55 deletion
+162
-55
railties/lib/generators.rb
railties/lib/generators.rb
+63
-48
railties/test/fixtures/lib/generators/active_record/fixjour/fixjour_generator.rb
...lib/generators/active_record/fixjour/fixjour_generator.rb
+8
-0
railties/test/fixtures/lib/generators/fixjour_generator.rb
railties/test/fixtures/lib/generators/fixjour_generator.rb
+2
-0
railties/test/fixtures/lib/generators/missing_class/missing_class_generator.rb
...s/lib/generators/missing_class/missing_class_generator.rb
+0
-0
railties/test/fixtures/lib/generators/missing_class/templates/.gitignore
...ixtures/lib/generators/missing_class/templates/.gitignore
+0
-0
railties/test/fixtures/lib/generators/missing_generator/templates/.gitignore
...res/lib/generators/missing_generator/templates/.gitignore
+0
-0
railties/test/fixtures/lib/generators/missing_templates/.gitignore
...test/fixtures/lib/generators/missing_templates/.gitignore
+0
-0
railties/test/fixtures/lib/generators/rails/javascripts_generator.rb
...st/fixtures/lib/generators/rails/javascripts_generator.rb
+4
-0
railties/test/fixtures/lib/generators/working/working_generator.rb
...test/fixtures/lib/generators/working/working_generator.rb
+0
-2
railties/test/generators/generators_test_helper.rb
railties/test/generators/generators_test_helper.rb
+3
-3
railties/test/generators/model_generator_test.rb
railties/test/generators/model_generator_test.rb
+2
-2
railties/test/generators_test.rb
railties/test/generators_test.rb
+80
-0
未找到文件。
railties/lib/generators.rb
浏览文件 @
21db0481
...
...
@@ -16,7 +16,6 @@
module
Rails
module
Generators
mattr_accessor
:load_path
# Generators load paths. First search on generators in the RAILS_ROOT, then
# look for them in rails generators.
...
...
@@ -33,42 +32,6 @@ def self.load_path
end
load_path
# Cache load paths
# Receives paths in an array and tries to find generators for it in the load
# path.
#
def
self
.
lookup
(
attempts
)
generators_path
=
[]
# Traverse attempts into directory lookups. For example:
#
# rails:generators:model
#
# Becomes:
#
# generators/rails/model/model_generator.rb
# generators/rails/model_generator.rb
# generators/model_generator.rb
#
attempts
.
each
do
|
attempt
|
paths
=
attempt
.
gsub
(
':generators:'
,
':'
).
split
(
':'
)
paths
<<
"
#{
paths
.
last
}
_generator.rb"
until
paths
.
empty?
generators_path
<<
File
.
join
(
*
paths
)
paths
.
delete_at
(
-
1
)
unless
paths
.
delete_at
(
-
2
)
end
end
generators_path
.
uniq!
generators_path
.
each
do
|
generator_path
|
self
.
load_path
.
each
do
|
path
|
Dir
[
File
.
join
(
path
,
generator_path
)].
each
do
|
file
|
require
file
end
end
end
end
# Keep builtin generators in an Array[Array[group, name]].
#
def
self
.
builtin
...
...
@@ -114,11 +77,15 @@ def self.find_by_namespace(name, base=nil, context=nil)
attempts
<<
name
.
sub
(
':'
,
':generators:'
)
if
name
.
count
(
':'
)
==
1
attempts
<<
name
unless
klass
=
find_many_by_namespace
(
attempts
)
lookup
(
attempts
)
klass
=
find_many_by_namespace
(
attempts
)
unloaded
=
attempts
-
namespaces
lookup
(
unloaded
)
attempts
.
each
do
|
namespace
|
klass
=
Thor
::
Util
.
find_by_namespace
(
namespace
)
return
klass
if
klass
end
klass
nil
end
# Show help message with available generators.
...
...
@@ -133,8 +100,23 @@ def self.help
puts
"Please select a generator."
puts
"Builtin:
#{
rails
.
join
(
', '
)
}
."
# TODO Show others after lookup is implemented
# puts "Others: #{others.join(', ')}."
# Load paths and remove builtin
paths
,
others
=
load_path
.
dup
,
[]
paths
.
shift
paths
.
each
do
|
path
|
tail
=
[
"*"
,
"*"
,
"*_generator.rb"
]
until
tail
.
empty?
others
+=
Dir
[
File
.
join
(
path
,
*
tail
)].
collect
do
|
file
|
file
.
split
(
'/'
)[
-
tail
.
size
,
2
].
join
(
':'
).
sub
(
/_generator\.rb$/
,
''
)
end
tail
.
shift
end
end
others
.
sort!
puts
"Others:
#{
others
.
join
(
', '
)
}
."
unless
others
.
empty?
end
# Receives a namespace, arguments and the behavior to invoke the generator.
...
...
@@ -152,12 +134,45 @@ def self.invoke(namespace, args=ARGV, behavior=:invoke)
protected
def
self
.
find_many_by_namespace
(
attempts
)
attempts
.
each
do
|
namespace
|
klass
=
Thor
::
Util
.
find_by_namespace
(
namespace
)
return
klass
if
klass
# Return all defined namespaces.
#
def
self
.
namespaces
Thor
::
Base
.
subclasses
.
map
(
&
:namespace
)
end
# Receives namespaces in an array and tries to find matching generators
# in the load path. Each path is traversed into directory lookups. For
# example:
#
# rails:generators:model
#
# Becomes:
#
# generators/rails/model/model_generator.rb
# generators/rails/model_generator.rb
# generators/model_generator.rb
#
def
self
.
lookup
(
attempts
)
attempts
.
each
do
|
attempt
|
generators_path
=
[
'.'
]
paths
=
attempt
.
gsub
(
':generators:'
,
':'
).
split
(
':'
)
name
=
"
#{
paths
.
last
}
_generator.rb"
until
paths
.
empty?
generators_path
.
unshift
File
.
join
(
*
paths
)
paths
.
pop
end
generators_path
.
uniq!
generators_path
=
"{
#{
generators_path
.
join
(
','
)
}
}"
self
.
load_path
.
each
do
|
path
|
Dir
[
File
.
join
(
path
,
generators_path
,
name
)].
each
do
|
file
|
require
file
end
end
end
nil
end
end
...
...
railties/test/fixtures/lib/generators/active_record/fixjour/fixjour_generator.rb
0 → 100644
浏览文件 @
21db0481
require
'generators/active_record'
module
ActiveRecord
module
Generators
class
FixjourGenerator
<
Base
end
end
end
railties/test/fixtures/lib/generators/fixjour_generator.rb
0 → 100644
浏览文件 @
21db0481
class
FixjourGenerator
<
Rails
::
Generators
::
NamedBase
end
railties/test/fixtures/lib/generators/missing_class/missing_class_generator.rb
已删除
100644 → 0
浏览文件 @
3ca504c9
railties/test/fixtures/lib/generators/missing_class/templates/.gitignore
已删除
100644 → 0
浏览文件 @
3ca504c9
railties/test/fixtures/lib/generators/missing_generator/templates/.gitignore
已删除
100644 → 0
浏览文件 @
3ca504c9
railties/test/fixtures/lib/generators/missing_templates/.gitignore
已删除
100644 → 0
浏览文件 @
3ca504c9
railties/test/fixtures/lib/generators/rails/javascripts_generator.rb
0 → 100644
浏览文件 @
21db0481
module
Rails::Generators
class
JavascriptsGenerator
<
Rails
::
Generators
::
NamedBase
end
end
railties/test/fixtures/lib/generators/working/working_generator.rb
已删除
100644 → 0
浏览文件 @
3ca504c9
class
WorkingGenerator
<
Rails
::
Generator
::
NamedBase
end
railties/test/generators/generators_test_helper.rb
浏览文件 @
21db0481
require
'test/unit'
require
'fileutils'
$LOAD_PATH
.
unshift
"
#{
File
.
dirname
(
__FILE__
)
}
/../../lib"
require
'generators'
fixtures
=
File
.
expand_path
(
File
.
join
(
File
.
dirname
(
__FILE__
),
'..'
,
'fixtures'
))
if
defined?
(
RAILS_ROOT
)
RAILS_ROOT
.
replace
fixtures
...
...
@@ -11,6 +8,9 @@
RAILS_ROOT
=
fixtures
end
$LOAD_PATH
.
unshift
"
#{
File
.
dirname
(
__FILE__
)
}
/../../lib"
require
'generators'
class
GeneratorsTestCase
<
Test
::
Unit
::
TestCase
include
FileUtils
...
...
railties/test/generators/model_generator_test.rb
浏览文件 @
21db0481
...
...
@@ -107,8 +107,8 @@ def test_fixture_is_skipped
end
def
test_fixture_is_skipped_if_fixture_replacement_is_given
content
=
run_generator
[
"account"
,
"-r"
,
"f
ixjour
"
]
assert_match
/Could not find and invoke 'f
ixjour
'/
,
content
content
=
run_generator
[
"account"
,
"-r"
,
"f
actory_girl
"
]
assert_match
/Could not find and invoke 'f
actory_girl
'/
,
content
assert_no_file
"test/fixtures/accounts.yml"
end
...
...
railties/test/generators_test.rb
0 → 100644
浏览文件 @
21db0481
require
File
.
join
(
File
.
dirname
(
__FILE__
),
'generators'
,
'generators_test_helper'
)
require
'generators/rails/model/model_generator'
require
'mocha'
class
GeneratorsTest
<
GeneratorsTestCase
def
test_invoke_when_generator_is_not_found
output
=
capture
(
:stdout
){
Rails
::
Generators
.
invoke
:unknown
}
assert_equal
"Could not find generator unknown.
\n
"
,
output
end
def
test_help_when_a_generator_with_required_arguments_is_invoked_without_arguments
output
=
capture
(
:stdout
){
Rails
::
Generators
.
invoke
:model
,
[]
}
assert_match
/Description:/
,
output
end
def
test_invoke_with_default_behavior
Rails
::
Generators
::
ModelGenerator
.
expects
(
:start
).
with
([
"Account"
],
:behavior
=>
:invoke
)
Rails
::
Generators
.
invoke
:model
,
[
"Account"
]
end
def
test_invoke_with_given_behavior
Rails
::
Generators
::
ModelGenerator
.
expects
(
:start
).
with
([
"Account"
],
:behavior
=>
:skip
)
Rails
::
Generators
.
invoke
:model
,
[
"Account"
],
:skip
end
def
test_find_by_namespace_without_base_or_context
assert_nil
Rails
::
Generators
.
find_by_namespace
(
:model
)
end
def
test_find_by_namespace_with_base
klass
=
Rails
::
Generators
.
find_by_namespace
(
:model
,
:rails
)
assert
klass
assert_equal
"rails:generators:model"
,
klass
.
namespace
end
def
test_find_by_namespace_with_context
klass
=
Rails
::
Generators
.
find_by_namespace
(
:test_unit
,
nil
,
:model
)
assert
klass
assert_equal
"test_unit:generators:model"
,
klass
.
namespace
end
def
test_find_by_namespace_add_generators_to_raw_lookups
klass
=
Rails
::
Generators
.
find_by_namespace
(
"test_unit:model"
)
assert
klass
assert_equal
"test_unit:generators:model"
,
klass
.
namespace
end
def
test_find_by_namespace_lookup_to_the_rails_root_folder
klass
=
Rails
::
Generators
.
find_by_namespace
(
:fixjour
)
assert
klass
assert_equal
"fixjour"
,
klass
.
namespace
end
def
test_find_by_namespace_lookup_to_deep_rails_root_folders
klass
=
Rails
::
Generators
.
find_by_namespace
(
:fixjour
,
:active_record
)
assert
klass
assert_equal
"active_record:generators:fixjour"
,
klass
.
namespace
end
def
test_find_by_namespace_lookup_traverse_folders
klass
=
Rails
::
Generators
.
find_by_namespace
(
:javascripts
,
:rails
)
assert
klass
assert_equal
"rails:generators:javascripts"
,
klass
.
namespace
end
def
test_builtin_generators
assert
Rails
::
Generators
.
builtin
.
include?
%w(rails model)
end
def
test_rails_generators_help_with_builtin_information
output
=
capture
(
:stdout
){
Rails
::
Generators
.
help
}
assert_match
/model/
,
output
assert_match
/scaffold_controller/
,
output
end
def
test_rails_generators_with_others_information
output
=
capture
(
:stdout
){
Rails
::
Generators
.
help
}.
split
(
"
\n
"
).
last
assert_equal
"Others: active_record:fixjour, fixjour, rails:javascripts."
,
output
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录