Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
张重言
rails
提交
695937c2
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,发现更多精彩内容 >>
提交
695937c2
编写于
7月 27, 2015
作者:
R
Rafael Mendonça França
浏览文件
操作
浏览文件
下载
差异文件
Merge pull request #21003 from robin850/api-plugins
Allow generating plugins for API applications
上级
b55484af
a120f271
变更
5
隐藏空白更改
内联
并排
Showing
5 changed file
with
84 addition
and
9 deletion
+84
-9
railties/CHANGELOG.md
railties/CHANGELOG.md
+5
-0
railties/lib/rails/generators/rails/plugin/plugin_generator.rb
...ies/lib/rails/generators/rails/plugin/plugin_generator.rb
+23
-8
railties/lib/rails/generators/rails/plugin/templates/app/controllers/%namespaced_name%/application_controller.rb.tt
...ontrollers/%namespaced_name%/application_controller.rb.tt
+1
-1
railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/engine.rb
...rs/rails/plugin/templates/lib/%namespaced_name%/engine.rb
+1
-0
railties/test/generators/plugin_generator_test.rb
railties/test/generators/plugin_generator_test.rb
+54
-0
未找到文件。
railties/CHANGELOG.md
浏览文件 @
695937c2
*
Add a
`--api`
option in order to generate plugins that can be added
inside an API application.
*Robin Dupret*
*
Fix
`NoMethodError`
when generating a scaffold inside a full engine.
*Yuji Yaginuma*
...
...
railties/lib/rails/generators/rails/plugin/plugin_generator.rb
浏览文件 @
695937c2
...
...
@@ -17,15 +17,22 @@ def rakefile
def
app
if
mountable?
directory
'app'
empty_directory_with_keep_file
"app/assets/images/
#{
namespaced_name
}
"
if
api?
directory
'app'
,
exclude_pattern:
%r{app/(views|helpers)}
else
directory
'app'
empty_directory_with_keep_file
"app/assets/images/
#{
namespaced_name
}
"
end
elsif
full?
empty_directory_with_keep_file
'app/models'
empty_directory_with_keep_file
'app/controllers'
empty_directory_with_keep_file
'app/views'
empty_directory_with_keep_file
'app/helpers'
empty_directory_with_keep_file
'app/mailers'
empty_directory_with_keep_file
"app/assets/images/
#{
namespaced_name
}
"
unless
api?
empty_directory_with_keep_file
"app/assets/images/
#{
namespaced_name
}
"
empty_directory_with_keep_file
'app/helpers'
empty_directory_with_keep_file
'app/views'
end
end
end
...
...
@@ -82,6 +89,7 @@ def generate_test_dummy(force = false)
opts
=
(
options
||
{}).
slice
(
*
PASSTHROUGH_OPTIONS
)
opts
[
:force
]
=
force
opts
[
:skip_bundle
]
=
true
opts
[
:api
]
=
options
.
api?
invoke
Rails
::
Generators
::
AppGenerator
,
[
File
.
expand_path
(
dummy_path
,
destination_root
)
],
opts
...
...
@@ -176,6 +184,9 @@ class PluginGenerator < AppBase # :nodoc:
desc:
"If creating plugin in application's directory "
+
"skip adding entry to Gemfile"
class_option
:api
,
type: :boolean
,
default:
false
,
desc:
"Generate a smaller stack for API application plugins"
def
initialize
(
*
args
)
@dummy_path
=
nil
super
...
...
@@ -210,15 +221,15 @@ def create_lib_files
end
def
create_public_stylesheets_files
build
(
:stylesheets
)
build
(
:stylesheets
)
unless
api?
end
def
create_javascript_files
build
(
:javascripts
)
build
(
:javascripts
)
unless
api?
end
def
create_images_directory
build
(
:images
)
build
(
:images
)
unless
api?
end
def
create_bin_files
...
...
@@ -305,6 +316,10 @@ def with_dummy_app?
options
[
:skip_test
].
blank?
||
options
[
:dummy_path
]
!=
'test/dummy'
end
def
api?
options
[
:api
]
end
def
self
.
banner
"rails plugin new
#{
self
.
arguments
.
map
(
&
:usage
).
join
(
' '
)
}
[options]"
end
...
...
railties/lib/rails/generators/rails/plugin/templates/app/controllers/%namespaced_name%/application_controller.rb.tt
浏览文件 @
695937c2
<%= wrap_in_modules <<-rb.strip_heredoc
class ApplicationController < ActionController::
Base
class ApplicationController < ActionController::
#{api? ? "API" : "Base"}
end
rb
%>
railties/lib/rails/generators/rails/plugin/templates/lib/%namespaced_name%/engine.rb
浏览文件 @
695937c2
<
%= wrap_in_modules <<-rb.strip_heredoc
class Engine < ::Rails::Engine
#{mountable? ? ' isolate_namespace ' + camelized_modules : ' '}
#{api? ? " config.generators.api_only =
true
" : ' '}
end
rb
%>
railties/test/generators/plugin_generator_test.rb
浏览文件 @
695937c2
...
...
@@ -544,6 +544,60 @@ def test_no_details_from_git_when_skip_git
end
end
def
test_skipping_useless_folders_generation_for_api_engines
[
'--full'
,
'--mountable'
].
each
do
|
option
|
run_generator
[
destination_root
,
option
,
'--api'
]
assert_no_directory
"app/assets"
assert_no_directory
"app/helpers"
assert_no_directory
"app/views"
FileUtils
.
rm_rf
destination_root
end
end
def
test_application_controller_parent_for_mountable_api_plugins
run_generator
[
destination_root
,
'--mountable'
,
'--api'
]
assert_file
"app/controllers/bukkits/application_controller.rb"
do
|
content
|
assert_match
"ApplicationController < ActionController::API"
,
content
end
end
def
test_dummy_api_application_for_api_plugins
run_generator
[
destination_root
,
'--api'
]
assert_file
"test/dummy/config/application.rb"
do
|
content
|
assert_match
"config.api_only = true"
,
content
end
end
def
test_api_generators_configuration_for_api_engines
run_generator
[
destination_root
,
'--full'
,
'--api'
]
assert_file
"lib/bukkits/engine.rb"
do
|
content
|
assert_match
"config.generators.api_only = true"
,
content
end
end
def
test_scaffold_generator_for_mountable_api_plugins
run_generator
[
destination_root
,
'--mountable'
,
'--api'
]
capture
(
:stdout
)
do
`
#{
destination_root
}
/bin/rails g scaffold article`
end
assert_file
"app/models/bukkits/article.rb"
assert_file
"app/controllers/bukkits/articles_controller.rb"
do
|
content
|
assert_match
"only: [:show, :update, :destroy]"
,
content
end
assert_no_directory
"app/assets"
assert_no_directory
"app/helpers"
assert_no_directory
"app/views"
end
protected
def
action
(
*
args
,
&
block
)
silence
(
:stdout
){
generator
.
send
(
*
args
,
&
block
)
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录