Added plugin generators (and a couple of TODOs).

This commit is contained in:
José Valim
2009-06-23 20:42:29 +02:00
parent d7bab3a43a
commit ea106cf051
20 changed files with 175 additions and 12 deletions

View File

@@ -1,8 +1,10 @@
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 @@ module Rails
#
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 @@ module Rails
# 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 @@ module Rails
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

View File

@@ -1,6 +0,0 @@
module Rails
module Generators
class Error < Thor::Error
end
end
end

View File

@@ -0,0 +1,13 @@
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

View File

@@ -0,0 +1,41 @@
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

View File

@@ -0,0 +1,20 @@
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.

View File

@@ -0,0 +1,13 @@
<%= 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

View File

@@ -0,0 +1,23 @@
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

View File

@@ -0,0 +1,2 @@
class <%= class_name %>Generator < Rails::Generators::NamedBase
end

View File

@@ -0,0 +1,8 @@
Description:
Explain the generator
Example:
./script/generate <%= file_name %> Thing
This will create:
what/will/it/create

View File

@@ -0,0 +1 @@
# Include hook code here

View File

@@ -0,0 +1 @@
# Install hook code here

View File

@@ -0,0 +1 @@
# <%= class_name %>

View File

@@ -0,0 +1,4 @@
# desc "Explaining what the task does"
# task :<%= file_name %> do
# # Task goes here
# end

View File

@@ -0,0 +1 @@
# Uninstall hook code here

View File

@@ -1,8 +1,8 @@
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'

View File

@@ -0,0 +1,13 @@
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

View File

@@ -0,0 +1,14 @@
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

View File

@@ -0,0 +1,8 @@
require 'test_helper'
class <%= class_name %>Test < ActiveSupport::TestCase
# Replace this with your real tests.
test "the truth" do
assert true
end
end

View File

@@ -0,0 +1,3 @@
require 'rubygems'
require 'active_support'
require 'active_support/test_case'