提交 ea106cf0 编写于 作者: J José Valim

Added plugin generators (and a couple of TODOs).

上级 d7bab3a4
require 'generators/actions'
require 'generators/error'
module Rails
module Generators
class Error < Thor::Error
end
class Base < Thor::Group
include Rails::Generators::Actions
include Thor::Actions
......@@ -45,7 +47,7 @@ def self.base_name
#
def self.generator_name
@generator_name ||= begin
klass_name = self.name.gsub(/^Rails::Generators::/, '')
klass_name = self.name.split('::').last
klass_name.gsub!(/Generator$/, '')
klass_name.underscore
end
......@@ -71,7 +73,8 @@ def self.add_shebang_option!
# Small macro to add test_framework option and invoke it.
#
def self.add_test_framework_option!
class_option :test_framework, :type => :string, :aliases => "-t", :default => "testunit",
# TODO Reduce the example name
class_option :test_framework, :type => :string, :aliases => "-t", :default => "test_unit",
:desc => "Test framework to be invoked by this generator"
define_method :invoke_test_framework do
......@@ -80,7 +83,7 @@ def self.add_test_framework_option!
begin
invoke name
rescue Thor::UndefinedTaskError
rescue Thor::UndefinedTaskError # TODO Ensure this message is called.
say "Could not find and/or invoke #{name}."
end
end
......
module Rails
module Generators
class Error < Thor::Error
end
end
end
Description:
Stubs out a new plugin at vendor/plugins. Pass the plugin name, either
CamelCased or under_scored, as an argument.
Example:
`./script/generate plugin BrowserFilters`
creates a standard browser_filters plugin:
vendor/plugins/browser_filters/README
vendor/plugins/browser_filters/init.rb
vendor/plugins/browser_filters/install.rb
vendor/plugins/browser_filters/lib/browser_filters.rb
vendor/plugins/browser_filters/test/browser_filters_test.rb
module Rails
module Generators
class PluginGenerator < NamedBase
def create_root
self.root = File.expand_path("vendor/plugins/#{file_name}", root)
empty_directory '.'
FileUtils.cd(root)
end
# TODO Check class collision
def create_root_files
%w(README MIT-LICENSE Rakefile init.rb install.rb uninstall.rb).each do |file|
template file
end
end
def create_lib_files
directory 'lib'
end
add_test_framework_option!
class_option :with_tasks, :type => :boolean, :aliases => "-r", :default => false,
:desc => "When supplied creates tasks base files."
class_option :with_generator, :type => :boolean, :aliases => "-g", :default => false,
:desc => "When supplied creates generator base files."
def create_tasks_files
return unless options[:with_tasks]
directory 'tasks'
end
def create_generator_files
return unless options[:with_generator]
directory 'generators'
end
end
end
end
Copyright (c) <%= Date.today.year %> [name of plugin creator]
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
<%= class_name %>
<%= "=" * class_name.size %>
Introduction goes here.
Example
=======
Example goes here.
Copyright (c) <%= Date.today.year %> [name of plugin creator], released under the MIT license
require 'rake'
require 'rake/testtask'
require 'rake/rdoctask'
desc 'Default: run unit tests.'
task :default => :test
desc 'Test the <%= file_name %> plugin.'
Rake::TestTask.new(:test) do |t|
t.libs << 'lib'
t.libs << 'test'
t.pattern = 'test/**/*_test.rb'
t.verbose = true
end
desc 'Generate documentation for the <%= file_name %> plugin.'
Rake::RDocTask.new(:rdoc) do |rdoc|
rdoc.rdoc_dir = 'rdoc'
rdoc.title = '<%= class_name %>'
rdoc.options << '--line-numbers' << '--inline-source'
rdoc.rdoc_files.include('README')
rdoc.rdoc_files.include('lib/**/*.rb')
end
Description:
Explain the generator
Example:
./script/generate <%= file_name %> Thing
This will create:
what/will/it/create
# desc "Explaining what the task does"
# task :<%= file_name %> do
# # Task goes here
# end
require 'generators/named_base'
module Rails
module TestUnit
module Generators
class TestUnit < NamedBase
class Base < Rails::Generators::NamedBase
protected
def self.base_name
'test_unit'
......
Description:
Stubs out a new plugin at vendor/plugins. Pass the plugin name, either
CamelCased or under_scored, as an argument.
Example:
`./script/generate plugin BrowserFilters`
creates a standard browser_filters plugin:
vendor/plugins/browser_filters/README
vendor/plugins/browser_filters/init.rb
vendor/plugins/browser_filters/install.rb
vendor/plugins/browser_filters/lib/browser_filters.rb
vendor/plugins/browser_filters/test/browser_filters_test.rb
module TestUnit
module Generators
class PluginGenerator < Base
desc <<DESC
Description:
Create TestUnit files for plugin generator.
DESC
def create_test_files
directory 'test'
end
end
end
end
require 'test_helper'
class <%= class_name %>Test < ActiveSupport::TestCase
# Replace this with your real tests.
test "the truth" do
assert true
end
end
require 'rubygems'
require 'active_support'
require 'active_support/test_case'
\ No newline at end of file
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册