mirror of
https://github.com/puma/puma.git
synced 2022-11-09 13:48:40 -05:00
Implements the resource and config features.
git-svn-id: svn+ssh://rubyforge.org/var/svn/mongrel/trunk@98 19e92222-5c0b-0410-8929-a290d50e31e9
This commit is contained in:
parent
4955892595
commit
bbb705e619
9 changed files with 220 additions and 1 deletions
|
@ -23,7 +23,9 @@ setup_gem(name, version) do |spec|
|
||||||
spec.summary = "A plugin system based only on rubygems that uses dependencies only"
|
spec.summary = "A plugin system based only on rubygems that uses dependencies only"
|
||||||
spec.description = spec.summary
|
spec.description = spec.summary
|
||||||
spec.test_file = "test/test_plugins.rb"
|
spec.test_file = "test/test_plugins.rb"
|
||||||
scripts=[]
|
spec.files += Dir.glob("resources/**/*")
|
||||||
|
spec.executables=["gpgen"]
|
||||||
|
spec.add_dependency("rake", ">= 0.7")
|
||||||
end
|
end
|
||||||
|
|
||||||
task :install => [:test, :package] do
|
task :install => [:test, :package] do
|
||||||
|
|
60
projects/gem_plugin/bin/gpgen
Executable file
60
projects/gem_plugin/bin/gpgen
Executable file
|
@ -0,0 +1,60 @@
|
||||||
|
require 'erb'
|
||||||
|
require 'fileutils'
|
||||||
|
include FileUtils
|
||||||
|
|
||||||
|
if ARGV.length != 1
|
||||||
|
STDERR.puts "ERROR: You must give a name for your plugin and directory."
|
||||||
|
STDERR.puts "usage: gpgen name"
|
||||||
|
STDERR.puts "example: gpgen mygemplugin"
|
||||||
|
exit 1
|
||||||
|
end
|
||||||
|
|
||||||
|
# setup the required binding variables for erb processing later
|
||||||
|
project = ARGV.shift
|
||||||
|
gem_plugin_base = File.expand_path(File.join(File.dirname(__FILE__), ".."))
|
||||||
|
resources = File.join(gem_plugin_base, "resources")
|
||||||
|
gem_plugin_version = gem_plugin_base[gem_plugin_base.rindex("-")+1 .. -1]
|
||||||
|
|
||||||
|
|
||||||
|
# make the dir if it don't exist
|
||||||
|
if not File.exist? project
|
||||||
|
puts "Creating directory #{project}"
|
||||||
|
mkdir project
|
||||||
|
else
|
||||||
|
puts "Directory #{project} exists, skipping."
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
# go through all the resource files, erb them, and write them verbatim to output
|
||||||
|
# do not overwrite if exists already
|
||||||
|
|
||||||
|
Dir.glob("#{resources}/**/*") do |infile|
|
||||||
|
outfile = File.join(project, infile[resources.length .. -1])
|
||||||
|
if File.exist? outfile
|
||||||
|
puts "File #{outfile} exists, skipping."
|
||||||
|
else
|
||||||
|
if File.directory? infile
|
||||||
|
puts "Creating directory #{outfile}"
|
||||||
|
mkdir_p outfile
|
||||||
|
elsif File.file? infile
|
||||||
|
puts "Creating file #{outfile}"
|
||||||
|
open(infile) do |content|
|
||||||
|
template = ERB.new(content.read)
|
||||||
|
open(outfile,"w") {|f| f.write(template.result(binding)) }
|
||||||
|
end
|
||||||
|
else
|
||||||
|
puts "!!! Resources contains something not a file or directory."
|
||||||
|
puts "Skipping #{infile}."
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
# Finally, move the base init.rb to the right dir
|
||||||
|
init_file = File.join(project,"lib",project)
|
||||||
|
if File.exist? init_file
|
||||||
|
puts "File init.rb already exists, skipping."
|
||||||
|
puts "WARNING: There might be a junk '#{project}/lib/project/init.rb' file you can delete."
|
||||||
|
else
|
||||||
|
puts "Creating proper '#{project}/lib/#{project}/init.rb' file"
|
||||||
|
mv File.join(project,"lib","project"), init_file
|
||||||
|
end
|
1
projects/gem_plugin/resources/COPYING
Normal file
1
projects/gem_plugin/resources/COPYING
Normal file
|
@ -0,0 +1 @@
|
||||||
|
No copying restrictions/license given.
|
1
projects/gem_plugin/resources/LICENSE
Normal file
1
projects/gem_plugin/resources/LICENSE
Normal file
|
@ -0,0 +1 @@
|
||||||
|
No license given.
|
5
projects/gem_plugin/resources/README
Normal file
5
projects/gem_plugin/resources/README
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
== <%= project.capitalize %> GemPlugin
|
||||||
|
|
||||||
|
You should document your project here.
|
||||||
|
|
||||||
|
|
37
projects/gem_plugin/resources/Rakefile
Normal file
37
projects/gem_plugin/resources/Rakefile
Normal file
|
@ -0,0 +1,37 @@
|
||||||
|
require 'rake'
|
||||||
|
require 'rake/testtask'
|
||||||
|
require 'rake/clean'
|
||||||
|
require 'rake/gempackagetask'
|
||||||
|
require 'rake/rdoctask'
|
||||||
|
require 'tools/rakehelp'
|
||||||
|
require 'fileutils'
|
||||||
|
include FileUtils
|
||||||
|
|
||||||
|
setup_tests
|
||||||
|
setup_clean ["pkg", "lib/*.bundle", "*.gem", ".config"]
|
||||||
|
|
||||||
|
setup_rdoc ['README', 'LICENSE', 'COPYING', 'lib/**/*.rb', 'doc/**/*.rdoc']
|
||||||
|
|
||||||
|
desc "Does a full compile, test run"
|
||||||
|
task :default => [:test, :package]
|
||||||
|
|
||||||
|
version="0.1"
|
||||||
|
name="<%= project %>"
|
||||||
|
|
||||||
|
setup_gem(name, version) do |spec|
|
||||||
|
spec.summary = "The <%= project %> GemPlugin"
|
||||||
|
spec.description = spec.summary
|
||||||
|
spec.author="Nobody"
|
||||||
|
spec.add_dependency('gem_plugin', '>= <%= gem_plugin_version %>')
|
||||||
|
spec.files += Dir.glob("resources/**/*")
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
task :install => [:test, :package] do
|
||||||
|
sh %{sudo gem install pkg/#{name}-#{version}.gem}
|
||||||
|
end
|
||||||
|
|
||||||
|
task :uninstall => [:clean] do
|
||||||
|
sh %{sudo gem uninstall #{name}}
|
||||||
|
end
|
||||||
|
|
6
projects/gem_plugin/resources/lib/project/init.rb
Normal file
6
projects/gem_plugin/resources/lib/project/init.rb
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
require 'gem_plugin'
|
||||||
|
|
||||||
|
# give this class the name you want for your command <%= project %>
|
||||||
|
class ChangeME < GemPlugin::Plugin "/somecategory"
|
||||||
|
end
|
||||||
|
|
2
projects/gem_plugin/resources/resources/defaults.yaml
Normal file
2
projects/gem_plugin/resources/resources/defaults.yaml
Normal file
|
@ -0,0 +1,2 @@
|
||||||
|
---
|
||||||
|
:debug: false
|
105
projects/gem_plugin/resources/tools/rakehelp.rb
Normal file
105
projects/gem_plugin/resources/tools/rakehelp.rb
Normal file
|
@ -0,0 +1,105 @@
|
||||||
|
|
||||||
|
def make(makedir)
|
||||||
|
Dir.chdir(makedir) do
|
||||||
|
sh(PLATFORM =~ /win32/ ? 'nmake' : 'make')
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def extconf(dir)
|
||||||
|
Dir.chdir(dir) do ruby "extconf.rb" end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def setup_tests
|
||||||
|
Rake::TestTask.new do |t|
|
||||||
|
t.libs << "test"
|
||||||
|
t.test_files = FileList['test/test*.rb']
|
||||||
|
t.verbose = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def setup_clean otherfiles
|
||||||
|
files = ['build/*', '**/*.o', '**/*.so', '**/*.a', 'lib/*-*', '**/*.log'] + otherfiles
|
||||||
|
CLEAN.include(files)
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def setup_rdoc files
|
||||||
|
Rake::RDocTask.new do |rdoc|
|
||||||
|
rdoc.rdoc_dir = 'doc/rdoc'
|
||||||
|
rdoc.options << '--line-numbers'
|
||||||
|
rdoc.rdoc_files.add(files)
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def setup_extension(dir, extension)
|
||||||
|
ext = "ext/#{dir}"
|
||||||
|
ext_so = "#{ext}/#{extension}.#{Config::CONFIG['DLEXT']}"
|
||||||
|
ext_files = FileList[
|
||||||
|
"#{ext}/*.c",
|
||||||
|
"#{ext}/*.h",
|
||||||
|
"#{ext}/extconf.rb",
|
||||||
|
"#{ext}/Makefile",
|
||||||
|
"lib"
|
||||||
|
]
|
||||||
|
|
||||||
|
task "lib" do
|
||||||
|
directory "lib"
|
||||||
|
end
|
||||||
|
|
||||||
|
desc "Builds just the #{extension} extension"
|
||||||
|
task extension.to_sym => ["#{ext}/Makefile", ext_so ]
|
||||||
|
|
||||||
|
file "#{ext}/Makefile" => ["#{ext}/extconf.rb"] do
|
||||||
|
extconf "#{ext}"
|
||||||
|
end
|
||||||
|
|
||||||
|
file ext_so => ext_files do
|
||||||
|
make "#{ext}"
|
||||||
|
cp ext_so, "lib"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
|
||||||
|
def base_gem_spec(pkg_name, pkg_version)
|
||||||
|
pkg_version = pkg_version
|
||||||
|
pkg_name = pkg_name
|
||||||
|
pkg_file_name = "#{pkg_name}-#{pkg_version}"
|
||||||
|
Gem::Specification.new do |s|
|
||||||
|
s.name = pkg_name
|
||||||
|
s.version = pkg_version
|
||||||
|
s.platform = Gem::Platform::RUBY
|
||||||
|
s.has_rdoc = true
|
||||||
|
s.extra_rdoc_files = [ "README" ]
|
||||||
|
|
||||||
|
s.files = %w(COPYING LICENSE README Rakefile) +
|
||||||
|
Dir.glob("{bin,doc/rdoc,test,lib}/**/*") +
|
||||||
|
Dir.glob("ext/**/*.{h,c,rb}") +
|
||||||
|
Dir.glob("examples/**/*.rb") +
|
||||||
|
Dir.glob("tools/*.rb")
|
||||||
|
|
||||||
|
s.require_path = "lib"
|
||||||
|
s.extensions = FileList["ext/**/extconf.rb"].to_a
|
||||||
|
s.bindir = "bin"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup_gem(pkg_name, pkg_version)
|
||||||
|
spec = base_gem_spec(pkg_name, pkg_version)
|
||||||
|
yield spec if block_given?
|
||||||
|
|
||||||
|
Rake::GemPackageTask.new(spec) do |p|
|
||||||
|
p.gem_spec = spec
|
||||||
|
p.need_tar = true
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
def setup_win32_gem(pkg_name, pkg_version)
|
||||||
|
spec = base_gem_spec(pkg_name, pkg_version)
|
||||||
|
yield spec if block_given?
|
||||||
|
|
||||||
|
Gem::Builder.new(spec).build
|
||||||
|
end
|
Loading…
Add table
Add a link
Reference in a new issue