wp-generate 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +2 -0
- data/README.rdoc +22 -0
- data/Rakefile +17 -0
- data/VERSION +1 -0
- data/bin/wp-generate +5 -0
- data/lib/wp_generate.rb +46 -0
- data/lib/wp_generate/generator.rb +59 -0
- data/lib/wp_generate/generator/template.rb +14 -0
- data/lib/wp_generate/generator/theme.rb +25 -0
- data/lib/wp_generate/templates/template/helper.php.erb +9 -0
- data/lib/wp_generate/templates/template/style.sass.erb +1 -0
- data/lib/wp_generate/templates/template/template.php.erb +5 -0
- data/lib/wp_generate/templates/theme/helpers/helper.php.erb +20 -0
- data/lib/wp_generate/templates/theme/index.php +0 -0
- data/lib/wp_generate/templates/theme/partials/footer.php +4 -0
- data/lib/wp_generate/templates/theme/partials/header.php.erb +14 -0
- data/lib/wp_generate/templates/theme/sass/sass_output.php +64 -0
- data/lib/wp_generate/templates/theme/style.css.erb +10 -0
- data/spec/generator_spec.rb +92 -0
- data/spec/spec_helper.rb +12 -0
- data/spec/wp_generate_spec.rb +24 -0
- metadata +95 -0
data/.gitignore
ADDED
data/README.rdoc
ADDED
@@ -0,0 +1,22 @@
|
|
1
|
+
= wp-generate
|
2
|
+
|
3
|
+
script/generate for WordPress
|
4
|
+
|
5
|
+
== Installation
|
6
|
+
|
7
|
+
gem install wp-generate
|
8
|
+
|
9
|
+
== Usage
|
10
|
+
|
11
|
+
To create a new theme:
|
12
|
+
|
13
|
+
wp-generate theme wp-content/themes/mytheme
|
14
|
+
|
15
|
+
This will create a theme just the way we like it.
|
16
|
+
|
17
|
+
Then get started with the home page:
|
18
|
+
|
19
|
+
cd wp-content/themes/mytheme
|
20
|
+
wp-generate template home
|
21
|
+
|
22
|
+
This will create the appropriate page template, helper, and stylesheet.
|
data/Rakefile
ADDED
@@ -0,0 +1,17 @@
|
|
1
|
+
require 'rake'
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'jeweler'
|
5
|
+
Jeweler::Tasks.new do |gem|
|
6
|
+
gem.name = "wp-generate"
|
7
|
+
gem.summary = %Q{script/generate for WordPress}
|
8
|
+
gem.description = %Q{}
|
9
|
+
gem.email = "tom@thedextrousweb.com"
|
10
|
+
gem.homepage = "http://github.com/dxw/wp-generate"
|
11
|
+
gem.authors = ["The Dextrous Web"]
|
12
|
+
gem.add_runtime_dependency "activesupport"
|
13
|
+
end
|
14
|
+
Jeweler::GemcutterTasks.new
|
15
|
+
rescue LoadError
|
16
|
+
puts "Jeweler (or a dependency) not available. Install it with: gem install jeweler"
|
17
|
+
end
|
data/VERSION
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
0.2.0
|
data/bin/wp-generate
ADDED
data/lib/wp_generate.rb
ADDED
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'active_support'
|
2
|
+
require 'erb'
|
3
|
+
require 'fileutils'
|
4
|
+
|
5
|
+
class WpGenerate; end
|
6
|
+
require 'wp_generate/generator'
|
7
|
+
|
8
|
+
String.send :include, ActiveSupport::CoreExtensions::String::Inflections
|
9
|
+
|
10
|
+
# A hack. I don't really know how to go about this best.
|
11
|
+
begin
|
12
|
+
require 'wp_capistrano'
|
13
|
+
rescue LoadError
|
14
|
+
end
|
15
|
+
|
16
|
+
class WpGenerate
|
17
|
+
def self.generate args
|
18
|
+
options = []
|
19
|
+
while generator = args.shift
|
20
|
+
break unless generator.start_with? '-'
|
21
|
+
options << generator
|
22
|
+
end
|
23
|
+
|
24
|
+
base_path = 'wp_generate/generator'
|
25
|
+
|
26
|
+
if generator.nil?
|
27
|
+
STDERR.puts 'Usage: wp-generate [GLOBAL OPT...] [generator] [PATH|OPT]'
|
28
|
+
STDERR.puts 'Generators:'
|
29
|
+
$:.map{|path|File.join(path,base_path,'*.rb')}.each do |path|
|
30
|
+
Dir.glob(path).map{|generator| generator.match(%r&/([^/]+)\.rb$&)[1]}.each do |generator|
|
31
|
+
STDERR.puts ' '+generator
|
32
|
+
end
|
33
|
+
end
|
34
|
+
exit 1
|
35
|
+
end
|
36
|
+
|
37
|
+
generator_path = File.join(base_path,generator)
|
38
|
+
begin
|
39
|
+
require generator_path
|
40
|
+
rescue LoadError
|
41
|
+
true # This is for rcov
|
42
|
+
end
|
43
|
+
|
44
|
+
generator_path.camelize.constantize.new(args, options).generate
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,59 @@
|
|
1
|
+
class WpGenerate::Generator
|
2
|
+
def initialize *args
|
3
|
+
raise NotImplementedError, "This class doesn't do anything on its own, subclass it!"
|
4
|
+
end
|
5
|
+
|
6
|
+
def templates_dir
|
7
|
+
File.join(File.dirname(__FILE__), 'templates')
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate
|
11
|
+
opt_parse
|
12
|
+
|
13
|
+
template_name = self.class.to_s.demodulize.downcase
|
14
|
+
@templates.each_pair do |template_path,output|
|
15
|
+
output = "#{cwd}/#{output}"
|
16
|
+
input = "#{template_name}/#{template_path}"
|
17
|
+
full_path = File.join(templates_dir, input)
|
18
|
+
erb = false
|
19
|
+
if not File.exist? full_path
|
20
|
+
full_path = "#{full_path}.erb"
|
21
|
+
erb = true
|
22
|
+
end
|
23
|
+
|
24
|
+
raise IOError, "Will not overwrite existing files without global -f option" if File.exist? output and not @options[:force]
|
25
|
+
|
26
|
+
dir = File.dirname(output)
|
27
|
+
FileUtils.makedirs dir unless File.directory? dir
|
28
|
+
|
29
|
+
STDERR.puts "#{input} => #{output}" unless @options[:quiet]
|
30
|
+
name = @vars[:name]
|
31
|
+
open(output, 'w+') do |f|
|
32
|
+
if erb
|
33
|
+
f.write ERB.new(open(full_path).read).result(binding)
|
34
|
+
else
|
35
|
+
f.write open(full_path).read
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def opt_parse
|
42
|
+
if @options.is_a? Array
|
43
|
+
opt = {}
|
44
|
+
@options.each do |o|
|
45
|
+
case o
|
46
|
+
when '-f'
|
47
|
+
opt[:force] = true
|
48
|
+
when '-q'
|
49
|
+
opt[:quiet] = true
|
50
|
+
end
|
51
|
+
end
|
52
|
+
@options = opt
|
53
|
+
end
|
54
|
+
end
|
55
|
+
|
56
|
+
def cwd
|
57
|
+
ENV['WPGEN_WORK_DIR'] || Dir.pwd
|
58
|
+
end
|
59
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
class WpGenerate::Generator::Template < WpGenerate::Generator
|
2
|
+
def initialize args, options
|
3
|
+
@options = options
|
4
|
+
name = args.shift
|
5
|
+
if name.nil? or name.empty?
|
6
|
+
STDERR.puts 'Usage: wp-generate template [name]'
|
7
|
+
STDERR.puts 'Example: cd wp-content/themes/mytheme && wp-generate template home'
|
8
|
+
exit 1
|
9
|
+
end
|
10
|
+
|
11
|
+
@templates = {"template.php" => "#{name}.php", "helper.php" => "helpers/#{name}.php", "style.sass" => "sass/#{name}.sass"}
|
12
|
+
@vars = {:name => name}
|
13
|
+
end
|
14
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
class WpGenerate::Generator::Theme < WpGenerate::Generator
|
2
|
+
def initialize args, options
|
3
|
+
@options = options
|
4
|
+
name = args.shift
|
5
|
+
if name.nil? or name.empty?
|
6
|
+
STDERR.puts 'Usage: wp-generate theme [path]'
|
7
|
+
STDERR.puts 'Example: cd wp-content/themes && wp-generate theme mytheme'
|
8
|
+
exit 1
|
9
|
+
end
|
10
|
+
|
11
|
+
templates = %w[
|
12
|
+
index.php
|
13
|
+
style.css
|
14
|
+
helpers/helper.php
|
15
|
+
partials/header.php
|
16
|
+
partials/footer.php
|
17
|
+
sass/sass_output.php
|
18
|
+
]
|
19
|
+
@templates = {}
|
20
|
+
templates.each do |t|
|
21
|
+
@templates[t] = "#{name}/#{t}"
|
22
|
+
end
|
23
|
+
@vars = {:name => name}
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1 @@
|
|
1
|
+
body.page-template-<%= name %>-php #container
|
@@ -0,0 +1,20 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
function render_partial($partial, $arguments = array()) {
|
4
|
+
if (!empty($arguments)) {
|
5
|
+
if(is_array($arguments)) {
|
6
|
+
extract($arguments);
|
7
|
+
} else {
|
8
|
+
extract(parse_str($arguments));
|
9
|
+
}
|
10
|
+
}
|
11
|
+
|
12
|
+
$helper_path = TEMPLATEPATH.'/helpers/'.$partial.'.php';
|
13
|
+
|
14
|
+
if (file_exists($helper_path))
|
15
|
+
include_once $helper_path;
|
16
|
+
|
17
|
+
include TEMPLATEPATH."/partials/$partial.php";
|
18
|
+
}
|
19
|
+
|
20
|
+
?>
|
File without changes
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<?php header('content-type: text/html;charset=utf-8') ?>
|
2
|
+
<!DOCTYPE html>
|
3
|
+
<html>
|
4
|
+
<head>
|
5
|
+
<title><?php the_title() ?></title>
|
6
|
+
<link rel="stylesheet" href="<?php bloginfo('stylesheet_url') ?>" type="text/css">
|
7
|
+
<?php wp_head() ?>
|
8
|
+
</head>
|
9
|
+
<?php flush() ?>
|
10
|
+
<body <?php body_class() ?>>
|
11
|
+
<div id="container">
|
12
|
+
<div id="header">
|
13
|
+
<h1><a href="/"><?php the_title() ?></a></h1>
|
14
|
+
</div>
|
@@ -0,0 +1,64 @@
|
|
1
|
+
<?php
|
2
|
+
|
3
|
+
// Configuration
|
4
|
+
|
5
|
+
$pre = array('mixins', 'reset', 'common', 'layout', 'page');
|
6
|
+
$post = array('ie');
|
7
|
+
|
8
|
+
// The below are not the droids you are looking for
|
9
|
+
|
10
|
+
function array_delete($arr, $val){ // lacking?
|
11
|
+
foreach ($arr as $key => $value) // so
|
12
|
+
if ($arr[$key] == $val) // PHP
|
13
|
+
unset($arr[$key]); // is
|
14
|
+
return $arr = array_values($arr);// Why
|
15
|
+
}
|
16
|
+
|
17
|
+
header('content-type: text/css');
|
18
|
+
|
19
|
+
// Find the executable
|
20
|
+
|
21
|
+
$sass = 'sass';
|
22
|
+
if (file_exists('config.php')) include 'config.php';
|
23
|
+
if (defined('SASS_PATH')) $sass = SASS_PATH;
|
24
|
+
|
25
|
+
// Find the SASS files, and put them in some sort of order
|
26
|
+
|
27
|
+
$files = glob('*.sass');
|
28
|
+
|
29
|
+
$_pre = array();
|
30
|
+
foreach ($pre as $s) {
|
31
|
+
$s = $s.'.sass';
|
32
|
+
if (file_exists($s)) $_pre[] = $s;
|
33
|
+
array_delete(&$files, $s);
|
34
|
+
}
|
35
|
+
$_post = array();
|
36
|
+
foreach ($post as $s) {
|
37
|
+
$s = $s.'.sass';
|
38
|
+
if (file_exists($s)) $_post[] = $s;
|
39
|
+
array_delete(&$files, $s);
|
40
|
+
}
|
41
|
+
|
42
|
+
$files = array_merge($_pre, $files, $_post);
|
43
|
+
|
44
|
+
// Pipe things into sass
|
45
|
+
|
46
|
+
$descriptorspec = array(0 => array("pipe", "r"), 1 => array("pipe", "w"));
|
47
|
+
$process = proc_open($sass, $descriptorspec, $pipes);
|
48
|
+
|
49
|
+
if (is_resource($process)) {
|
50
|
+
foreach ($files as $s)
|
51
|
+
fwrite($pipes[0], "@import $s\n");
|
52
|
+
fclose($pipes[0]);
|
53
|
+
|
54
|
+
$output = stream_get_contents($pipes[1]);
|
55
|
+
fclose($pipes[1]);
|
56
|
+
|
57
|
+
$return_value = proc_close($process);
|
58
|
+
if ($return_value != 0)
|
59
|
+
echo '/* sass error */';
|
60
|
+
else
|
61
|
+
echo $output;
|
62
|
+
} else
|
63
|
+
echo '/* wtf error */';
|
64
|
+
?>
|
@@ -0,0 +1,92 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe WpGenerate::Generator do
|
4
|
+
it "should not be possible to instantiate directly" do
|
5
|
+
lambda { WpGenerate::Generator.new }.should raise_error NotImplementedError
|
6
|
+
end
|
7
|
+
|
8
|
+
it "should correctly determine the cwd" do
|
9
|
+
g = BlankGen.new
|
10
|
+
g.cwd.should == Dir.pwd
|
11
|
+
ENV['WPGEN_WORK_DIR'] = '/tmp'
|
12
|
+
g.cwd.should == '/tmp'
|
13
|
+
end
|
14
|
+
|
15
|
+
it "should parse options correctly" do
|
16
|
+
g = BlankGen.new
|
17
|
+
g.instance_eval { @options = %w[hello there -f -c -d] }
|
18
|
+
g.opt_parse
|
19
|
+
g.instance_eval { @options[:force].should == true }
|
20
|
+
end
|
21
|
+
|
22
|
+
it "should create appropriate files from templates" do
|
23
|
+
g = BlankGen.new
|
24
|
+
g.instance_eval { @templates = {'abc' => 'def'}; @vars = {:name => 'the_name'}; @options = %w[-q] }
|
25
|
+
full_path = %r[/templates/blankgen/abc$]
|
26
|
+
output = %r[/def$]
|
27
|
+
text = "Here is some <%= test %> text"
|
28
|
+
|
29
|
+
File.should_receive(:exist?).with(full_path).and_return(true)
|
30
|
+
File.should_receive(:exist?).with(output).and_return(false)
|
31
|
+
File.should_receive(:directory?).with(an_instance_of(String)).and_return(true)
|
32
|
+
f = mock
|
33
|
+
f.should_receive(:write).with(text)
|
34
|
+
Kernel.should_receive(:open).with(output,'w+').and_yield(f)
|
35
|
+
f2 = mock
|
36
|
+
f2.should_receive(:read).and_return(text)
|
37
|
+
Kernel.should_receive(:open).with(full_path).and_return(f2)
|
38
|
+
g.generate
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should not overwrite files" do
|
42
|
+
g = BlankGen.new
|
43
|
+
g.instance_eval { @templates = {'abc' => 'def'}; @vars = {:name => 'the_name'}; @options = %w[-q] }
|
44
|
+
full_path = %r[/templates/blankgen/abc$]
|
45
|
+
output = %r[/def$]
|
46
|
+
text = "Here is some text"
|
47
|
+
|
48
|
+
File.should_receive(:exist?).with(full_path).and_return(true)
|
49
|
+
File.should_receive(:exist?).with(output).and_return(true)
|
50
|
+
lambda { g.generate }.should raise_error IOError
|
51
|
+
end
|
52
|
+
|
53
|
+
it "should overwrite files with -f option" do
|
54
|
+
g = BlankGen.new
|
55
|
+
g.instance_eval { @templates = {'abc' => 'def'}; @vars = {:name => 'the_name'}; @options = %w[-q -f] }
|
56
|
+
full_path = %r[/templates/blankgen/abc$]
|
57
|
+
output = %r[/def$]
|
58
|
+
text = "Here is some <%= test %> text"
|
59
|
+
|
60
|
+
File.should_receive(:exist?).with(full_path).and_return(true)
|
61
|
+
File.should_receive(:exist?).with(output).and_return(true)
|
62
|
+
File.should_receive(:directory?).with(an_instance_of(String)).and_return(true)
|
63
|
+
f = mock
|
64
|
+
f.should_receive(:write).with(text)
|
65
|
+
Kernel.should_receive(:open).with(output,'w+').and_yield(f)
|
66
|
+
f2 = mock
|
67
|
+
f2.should_receive(:read).and_return(text)
|
68
|
+
Kernel.should_receive(:open).with(full_path).and_return(f2)
|
69
|
+
g.generate
|
70
|
+
end
|
71
|
+
|
72
|
+
it "should use ERB" do
|
73
|
+
g = BlankGen.new
|
74
|
+
g.instance_eval { @templates = {'abc' => 'def'}; @vars = {:name => 'the_name'}; @options = %w[-q] }
|
75
|
+
full_path = %r[/templates/blankgen/abc$]
|
76
|
+
full_path_erb = %r[/templates/blankgen/abc.erb$]
|
77
|
+
output = %r[/def$]
|
78
|
+
text = "Here is some <%= name %> text"
|
79
|
+
text_out = "Here is some the_name text"
|
80
|
+
|
81
|
+
File.should_receive(:exist?).with(full_path).and_return(false)
|
82
|
+
File.should_receive(:exist?).with(output).and_return(false)
|
83
|
+
File.should_receive(:directory?).with(an_instance_of(String)).and_return(true)
|
84
|
+
f = mock
|
85
|
+
f.should_receive(:write).with(text_out)
|
86
|
+
Kernel.should_receive(:open).with(output,'w+').and_yield(f)
|
87
|
+
f2 = mock
|
88
|
+
f2.should_receive(:read).and_return(text)
|
89
|
+
Kernel.should_receive(:open).with(full_path_erb).and_return(f2)
|
90
|
+
g.generate
|
91
|
+
end
|
92
|
+
end
|
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require File.dirname(__FILE__) + '/spec_helper'
|
2
|
+
|
3
|
+
describe WpGenerate do
|
4
|
+
it "should parse options correctly" do
|
5
|
+
global_args = %w[-a -b --see]
|
6
|
+
local_args = %w[-o -opt test --p -a]
|
7
|
+
args = global_args + %w[spec_helper/generator] + local_args
|
8
|
+
|
9
|
+
class WpGenerate::Generator::SpecHelper; class Generator; end; end
|
10
|
+
g = WpGenerate::Generator::SpecHelper::Generator.new
|
11
|
+
g.should_receive(:generate)
|
12
|
+
WpGenerate::Generator::SpecHelper::Generator.should_receive(:new).with(local_args, global_args).and_return(g)
|
13
|
+
|
14
|
+
WpGenerate.generate args
|
15
|
+
end
|
16
|
+
|
17
|
+
it "should raise an exception with no args" do
|
18
|
+
lambda { WpGenerate.generate([]) }.should raise_error ArgumentError
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should raise an exception with no generator name" do
|
22
|
+
lambda { WpGenerate.generate(%w[-hello --there]) }.should raise_error ArgumentError
|
23
|
+
end
|
24
|
+
end
|
metadata
ADDED
@@ -0,0 +1,95 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: wp-generate
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- The Dextrous Web
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-25 00:00:00 +01:00
|
18
|
+
default_executable: wp-generate
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: activesupport
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ">="
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 0
|
29
|
+
version: "0"
|
30
|
+
type: :runtime
|
31
|
+
version_requirements: *id001
|
32
|
+
description: ""
|
33
|
+
email: tom@thedextrousweb.com
|
34
|
+
executables:
|
35
|
+
- wp-generate
|
36
|
+
extensions: []
|
37
|
+
|
38
|
+
extra_rdoc_files:
|
39
|
+
- README.rdoc
|
40
|
+
files:
|
41
|
+
- .gitignore
|
42
|
+
- README.rdoc
|
43
|
+
- Rakefile
|
44
|
+
- VERSION
|
45
|
+
- bin/wp-generate
|
46
|
+
- lib/wp_generate.rb
|
47
|
+
- lib/wp_generate/generator.rb
|
48
|
+
- lib/wp_generate/generator/template.rb
|
49
|
+
- lib/wp_generate/generator/theme.rb
|
50
|
+
- lib/wp_generate/templates/template/helper.php.erb
|
51
|
+
- lib/wp_generate/templates/template/style.sass.erb
|
52
|
+
- lib/wp_generate/templates/template/template.php.erb
|
53
|
+
- lib/wp_generate/templates/theme/helpers/helper.php.erb
|
54
|
+
- lib/wp_generate/templates/theme/index.php
|
55
|
+
- lib/wp_generate/templates/theme/partials/footer.php
|
56
|
+
- lib/wp_generate/templates/theme/partials/header.php.erb
|
57
|
+
- lib/wp_generate/templates/theme/sass/sass_output.php
|
58
|
+
- lib/wp_generate/templates/theme/style.css.erb
|
59
|
+
- spec/generator_spec.rb
|
60
|
+
- spec/spec_helper.rb
|
61
|
+
- spec/wp_generate_spec.rb
|
62
|
+
has_rdoc: true
|
63
|
+
homepage: http://github.com/dxw/wp-generate
|
64
|
+
licenses: []
|
65
|
+
|
66
|
+
post_install_message:
|
67
|
+
rdoc_options:
|
68
|
+
- --charset=UTF-8
|
69
|
+
require_paths:
|
70
|
+
- lib
|
71
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - ">="
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
segments:
|
76
|
+
- 0
|
77
|
+
version: "0"
|
78
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
segments:
|
83
|
+
- 0
|
84
|
+
version: "0"
|
85
|
+
requirements: []
|
86
|
+
|
87
|
+
rubyforge_project:
|
88
|
+
rubygems_version: 1.3.6
|
89
|
+
signing_key:
|
90
|
+
specification_version: 3
|
91
|
+
summary: script/generate for WordPress
|
92
|
+
test_files:
|
93
|
+
- spec/generator_spec.rb
|
94
|
+
- spec/wp_generate_spec.rb
|
95
|
+
- spec/spec_helper.rb
|