ingoweiss_generators 0.0.3
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/generators/ingoweiss/helpers/scope_helpers.rb +41 -0
- data/lib/generators/ingoweiss/scaffold/scaffold_generator.rb +45 -0
- data/lib/generators/ingoweiss/scaffold_controller/scaffold_controller_generator.rb +114 -0
- data/lib/generators/ingoweiss/scaffold_controller/templates/controller.erb +58 -0
- data/lib/generators/ingoweiss/scaffold_views/scaffold_views_generator.rb +36 -0
- data/lib/generators/ingoweiss/scaffold_views/templates/_entry.html.erb +8 -0
- data/lib/generators/ingoweiss/scaffold_views/templates/_fields.html.erb +6 -0
- data/lib/generators/ingoweiss/scaffold_views/templates/edit.html.erb +6 -0
- data/lib/generators/ingoweiss/scaffold_views/templates/index.html.erb +15 -0
- data/lib/generators/ingoweiss/scaffold_views/templates/layout.html.erb +16 -0
- data/lib/generators/ingoweiss/scaffold_views/templates/new.html.erb +10 -0
- data/lib/generators/ingoweiss/scaffold_views/templates/show.html.erb +12 -0
- data/lib/generators/ingoweiss/templates/migration.erb +11 -0
- data/lib/ingoweiss_generators/railtie.rb +5 -0
- data/lib/ingoweiss_generators.rb +3 -0
- metadata +92 -0
@@ -0,0 +1,41 @@
|
|
1
|
+
module ScopeHelpers
|
2
|
+
|
3
|
+
def scope
|
4
|
+
options[:scope]
|
5
|
+
end
|
6
|
+
|
7
|
+
def scoped?
|
8
|
+
scope.any?
|
9
|
+
end
|
10
|
+
|
11
|
+
def unscoped?
|
12
|
+
!scoped?
|
13
|
+
end
|
14
|
+
|
15
|
+
def singleton?
|
16
|
+
options[:singleton]
|
17
|
+
end
|
18
|
+
|
19
|
+
# Example: 'post_comment_' for post_comment_approval_path
|
20
|
+
def scope_prefix
|
21
|
+
scope.collect{|s| s.singularize + '_'}.join
|
22
|
+
end
|
23
|
+
|
24
|
+
# Examples: 'post_comments', 'post_comment_approval'
|
25
|
+
def scoped_controller_plural_name
|
26
|
+
scope_prefix + (options[:singleton] ? singular_name : plural_name)
|
27
|
+
end
|
28
|
+
|
29
|
+
# Example: '@post, @comment, approval'
|
30
|
+
def instance_variable_scope(variable=nil)
|
31
|
+
instance_variables = scope.collect{|s| '@' + s.singularize}
|
32
|
+
instance_variables << variable if variable
|
33
|
+
instance_variables.join(', ')
|
34
|
+
end
|
35
|
+
|
36
|
+
# Examples: 'PostComments', 'PostCommentApproval'
|
37
|
+
def scoped_controller_class_name
|
38
|
+
scoped_controller_plural_name.camelize
|
39
|
+
end
|
40
|
+
|
41
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'rails/generators/resource_helpers'
|
2
|
+
require 'rails/generators/migration'
|
3
|
+
require File.join(File.dirname(__FILE__), '../helpers/scope_helpers')
|
4
|
+
|
5
|
+
module Ingoweiss
|
6
|
+
class ScaffoldGenerator < Rails::Generators::NamedBase
|
7
|
+
include Rails::Generators::ResourceHelpers
|
8
|
+
include Rails::Generators::Migration
|
9
|
+
include ScopeHelpers
|
10
|
+
|
11
|
+
argument :attributes, :type => :array, :required => false, :banner => 'field:type field:type'
|
12
|
+
class_option :scope, :type => :array, :default => [], :banner => 'grand_parent parent', :desc => 'Indicate parent resource(s) if nested'
|
13
|
+
class_option :singleton, :type => :boolean, :default => false, :desc => 'Is this a singleton resource?'
|
14
|
+
class_option :skip_route, :type => :boolean, :default => false, :desc => 'Do not add route to config/routes.rb'
|
15
|
+
|
16
|
+
hook_for :scaffold_controller
|
17
|
+
|
18
|
+
def self.source_root
|
19
|
+
@source_root ||= File.expand_path('../../templates', __FILE__)
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_routes
|
23
|
+
return if options[:skip_route]
|
24
|
+
route "resource#{'s' unless options[:singleton]} :#{options[:singleton] ? singular_name : plural_name}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def generate_model
|
28
|
+
arguments = [singular_name] + attributes.collect{ |a| [a.name, a.type].join(':') }
|
29
|
+
arguments << "#{scope.last.singularize}_id:integer" if scope.any?
|
30
|
+
invoke :model, arguments
|
31
|
+
end
|
32
|
+
|
33
|
+
def inject_associations
|
34
|
+
return if scope.empty?
|
35
|
+
parent = scope.last.singularize
|
36
|
+
inject_into_file("app/models/#{parent}.rb", :after => /< ActiveRecord::Base\n/) do
|
37
|
+
options[:singleton] ? " has_one :#{singular_name}\n" : " has_many :#{plural_name}\n"
|
38
|
+
end
|
39
|
+
inject_into_file("app/models/#{singular_name}.rb", :after => /< ActiveRecord::Base\n/) do
|
40
|
+
" belongs_to :#{parent}\n"
|
41
|
+
end
|
42
|
+
end
|
43
|
+
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,114 @@
|
|
1
|
+
require File.expand_path('../../helpers/scope_helpers', __FILE__)
|
2
|
+
|
3
|
+
module Ingoweiss
|
4
|
+
class ScaffoldControllerGenerator < Rails::Generators::NamedBase
|
5
|
+
|
6
|
+
include ScopeHelpers
|
7
|
+
argument :attributes, :type => :array, :required => false #only needed to determine whether resource HAS attributes or not. Maybe use boolean option --attributes instead?
|
8
|
+
class_option :scope, :type => :array, :default => [], :banner => 'grand_parent parent', :desc => 'Indicate parent resource(s) if nested'
|
9
|
+
class_option :singleton, :type => :boolean, :default => false, :desc => 'Is this a singleton resource?'
|
10
|
+
|
11
|
+
def self.source_root
|
12
|
+
@source_root ||= File.expand_path('../templates', __FILE__)
|
13
|
+
end
|
14
|
+
|
15
|
+
def generate_controller
|
16
|
+
template 'controller.erb', "app/controllers/#{scoped_controller_plural_name}_controller.rb"
|
17
|
+
end
|
18
|
+
|
19
|
+
def generate_views
|
20
|
+
invoke 'ingoweiss:scaffold_views'
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
# Examples: 'post_comments', 'post_comment_approval'
|
26
|
+
def scoped_controller_plural_name
|
27
|
+
scope_prefix + (options.singleton? ? singular_name : plural_name)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Examples: 'PostComments', 'PostCommentApproval'
|
31
|
+
def scoped_controller_class_name
|
32
|
+
scoped_controller_plural_name.camelize
|
33
|
+
end
|
34
|
+
|
35
|
+
def controller_retrieve_scope
|
36
|
+
lines = []
|
37
|
+
options.scope.each_with_index do |scope_item, index|
|
38
|
+
if index == 0
|
39
|
+
lines << "@#{scope_item.singularize} = #{scope_item.singularize.classify}.find(params[:#{scope_item.singularize}_id])"
|
40
|
+
else
|
41
|
+
previous_scope_item = scope[index-1]
|
42
|
+
if scope_item.pluralize == scope_item
|
43
|
+
lines << "@#{scope_item.singularize} = @#{previous_scope_item.singularize}.#{scope_item.pluralize}.find(params[:#{scope_item.singularize}_id])"
|
44
|
+
else
|
45
|
+
lines << "@#{scope_item.singularize} = @#{previous_scope_item.singularize}.#{scope_item.singularize}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
49
|
+
lines
|
50
|
+
end
|
51
|
+
|
52
|
+
def controller_retrieve_resource
|
53
|
+
if options.scope.any?
|
54
|
+
if options[:singleton]
|
55
|
+
"@#{name.singularize} = @#{scope.last.singularize}.#{name.singularize}"
|
56
|
+
else
|
57
|
+
"@#{name.singularize} = @#{scope.last.singularize}.#{name.pluralize}.find(params[:id])"
|
58
|
+
end
|
59
|
+
else
|
60
|
+
"@#{name.singularize} = #{name.singularize.classify}.find(params[:id])"
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def controller_retrieve_collection
|
65
|
+
if options.scope.any?
|
66
|
+
"@#{name.pluralize} = @#{scope.last.singularize}.#{name.pluralize}"
|
67
|
+
else
|
68
|
+
"@#{name.pluralize} = #{name.singularize.classify}.all"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def controller_build_resource
|
73
|
+
if options.scope.any?
|
74
|
+
if options[:singleton]
|
75
|
+
"@#{name.singularize} = @#{scope.last.singularize}.build_#{name.singularize}" + (attributes.any? ? "(params[:#{name.singularize}])" : '')
|
76
|
+
else
|
77
|
+
"@#{name.singularize} = @#{scope.last.singularize}.#{name.pluralize}.build" + (attributes.any? ? "(params[:#{name.singularize}])" : '')
|
78
|
+
end
|
79
|
+
else
|
80
|
+
"@#{name.singularize} = #{name.singularize.classify}.new" + (attributes.any? ? "(params[:#{name.singularize}])" : '')
|
81
|
+
end
|
82
|
+
end
|
83
|
+
|
84
|
+
def controller_create_resource
|
85
|
+
if options.scope.any?
|
86
|
+
if options[:singleton]
|
87
|
+
"@#{name.singularize} = @#{scope.last.singularize}.create_#{name.singularize}" + (attributes.any? ? "(params[:#{name.singularize}])" : '')
|
88
|
+
else
|
89
|
+
"@#{name.singularize} = @#{scope.last.singularize}.#{name.pluralize}.create" + (attributes.any? ? "(params[:#{name.singularize}])" : '')
|
90
|
+
end
|
91
|
+
|
92
|
+
else
|
93
|
+
"@#{name.singularize} = #{name.singularize.classify}.create" + (attributes.any? ? "(params[:#{name.singularize}])" : '')
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def controller_destroy_resource
|
98
|
+
"@#{name.singularize}.destroy"
|
99
|
+
end
|
100
|
+
|
101
|
+
def controller_update_resource
|
102
|
+
"@#{name.singularize}.update_attributes" + (attributes.any? ? "(params[:#{name.singularize}])" : '')
|
103
|
+
end
|
104
|
+
|
105
|
+
def controller_respond_with_collection
|
106
|
+
"respond_with #{(options.scope.collect{|scope_item| '@' + scope_item.singularize} + ['@' + name.pluralize]).join(', ')}"
|
107
|
+
end
|
108
|
+
|
109
|
+
def controller_respond_with_resource
|
110
|
+
"respond_with #{(options.scope.collect{|scope_item| '@' + scope_item.singularize} + ['@' + name.singularize]).join(', ')}"
|
111
|
+
end
|
112
|
+
|
113
|
+
end
|
114
|
+
end
|
@@ -0,0 +1,58 @@
|
|
1
|
+
class <%= scoped_controller_class_name %>Controller < ActionController::Base
|
2
|
+
|
3
|
+
<%- if scoped? -%>
|
4
|
+
before_filter :scope
|
5
|
+
<%- end -%>
|
6
|
+
respond_to :html, :xml, :json
|
7
|
+
layout 'scaffold'
|
8
|
+
|
9
|
+
<%- unless options[:singleton] -%>
|
10
|
+
def index
|
11
|
+
<%= controller_retrieve_collection %>
|
12
|
+
<%= controller_respond_with_collection %>
|
13
|
+
end
|
14
|
+
|
15
|
+
<%- end -%>
|
16
|
+
def show
|
17
|
+
<%= controller_retrieve_resource %>
|
18
|
+
<%= controller_respond_with_resource %>
|
19
|
+
end
|
20
|
+
|
21
|
+
def new
|
22
|
+
<%= controller_build_resource %>
|
23
|
+
<%= controller_respond_with_resource %>
|
24
|
+
end
|
25
|
+
|
26
|
+
def edit
|
27
|
+
<%= controller_retrieve_resource %>
|
28
|
+
<%= controller_respond_with_resource %>
|
29
|
+
end
|
30
|
+
|
31
|
+
def create
|
32
|
+
<%= controller_create_resource %>
|
33
|
+
<%= controller_respond_with_resource %>
|
34
|
+
end
|
35
|
+
|
36
|
+
def update
|
37
|
+
<%= controller_retrieve_resource %>
|
38
|
+
<%= controller_update_resource %>
|
39
|
+
<%= controller_respond_with_resource %>
|
40
|
+
end
|
41
|
+
|
42
|
+
def destroy
|
43
|
+
<%= controller_retrieve_resource %>
|
44
|
+
<%= controller_destroy_resource %>
|
45
|
+
<%= controller_respond_with_resource %>
|
46
|
+
end
|
47
|
+
|
48
|
+
<%- if scoped? -%>
|
49
|
+
private
|
50
|
+
|
51
|
+
def scope
|
52
|
+
<%- controller_retrieve_scope.each do |line| -%>
|
53
|
+
<%= line %>
|
54
|
+
<%- end -%>
|
55
|
+
end
|
56
|
+
|
57
|
+
<%- end -%>
|
58
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
require File.expand_path('../../helpers/scope_helpers', __FILE__)
|
2
|
+
require 'rails/generators/resource_helpers'
|
3
|
+
|
4
|
+
module Ingoweiss
|
5
|
+
class ScaffoldViewsGenerator < Rails::Generators::NamedBase
|
6
|
+
|
7
|
+
include Rails::Generators::ResourceHelpers
|
8
|
+
include ScopeHelpers
|
9
|
+
|
10
|
+
argument :attributes, :type => :array, :required => false, :banner => 'field:type field:type'
|
11
|
+
class_option :scope, :type => :array, :default => [], :banner => 'grand_parent parent', :desc => 'Indicate parent resource(s) if nested'
|
12
|
+
class_option :singleton, :type => :boolean, :default => false, :desc => 'Is this a singleton resource?'
|
13
|
+
|
14
|
+
def self.source_root
|
15
|
+
@source_root ||= File.expand_path('../templates', __FILE__)
|
16
|
+
end
|
17
|
+
|
18
|
+
def generate_views
|
19
|
+
template 'index.html.erb', "app/views/#{scoped_controller_plural_name}/index.html.erb" unless options[:singleton]
|
20
|
+
template '_entry.html.erb', "app/views/#{scoped_controller_plural_name}/_#{singular_name}.html.erb"
|
21
|
+
template 'new.html.erb', "app/views/#{scoped_controller_plural_name}/new.html.erb"
|
22
|
+
template 'edit.html.erb', "app/views/#{scoped_controller_plural_name}/edit.html.erb"
|
23
|
+
template '_fields.html.erb', "app/views/#{scoped_controller_plural_name}/_fields.html.erb"
|
24
|
+
template 'show.html.erb', "app/views/#{scoped_controller_plural_name}/show.html.erb"
|
25
|
+
template 'layout.html.erb', "app/views/layouts/scaffold.html.erb" unless File.exists?(File.join(destination_root, 'app/views/layouts/scaffold.html.erb'))
|
26
|
+
invoke :stylesheets
|
27
|
+
end
|
28
|
+
|
29
|
+
def inject_link_to_children_index
|
30
|
+
return if singleton? || unscoped?
|
31
|
+
parent_resource_view_folder = (scope[0..-2].collect(&:singularize) << scope.last).join('_')
|
32
|
+
append_file "app/views/#{parent_resource_view_folder}/show.html.erb", "<%= link_to 'Show #{plural_name}', #{scope_prefix}#{plural_name}_path(#{instance_variable_scope}) %>\n"
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
<tr>
|
2
|
+
<% for attribute in attributes -%>
|
3
|
+
<td><%%= <%= singular_name %>.<%= attribute.name %> %></td>
|
4
|
+
<% end -%>
|
5
|
+
<td><%%= link_to 'Show', <%= scope_prefix + singular_name %>_path(<%= instance_variable_scope(singular_name) %>) %></td>
|
6
|
+
<td><%%= link_to 'Edit', edit_<%= scope_prefix + singular_name %>_path(<%= instance_variable_scope(singular_name) %>) %></td>
|
7
|
+
<td><%%= link_to 'Destroy', <%= scope_prefix + singular_name %>_path(<%= instance_variable_scope(singular_name) %>), :confirm => 'Are you sure?', :method => :delete %></td>
|
8
|
+
</tr>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<h1>Listing <%= plural_name %></h1>
|
2
|
+
|
3
|
+
<table>
|
4
|
+
<tr>
|
5
|
+
<% for attribute in attributes -%>
|
6
|
+
<th><%= attribute.human_name %></th>
|
7
|
+
<% end -%>
|
8
|
+
<th></th>
|
9
|
+
<th></th>
|
10
|
+
<th></th>
|
11
|
+
</tr>
|
12
|
+
<%%= render :partial => '<%= singular_name %>', :collection => @<%= plural_name %> %>
|
13
|
+
</table>
|
14
|
+
|
15
|
+
<p><%%= link_to 'New <%= singular_name %>', new_<%= scope_prefix + singular_name %>_path(<%= instance_variable_scope %>) %></p>
|
@@ -0,0 +1,16 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title><%= controller_class_name %>: <%%= controller.action_name %></title>
|
5
|
+
<%%= stylesheet_link_tag 'scaffold' %>
|
6
|
+
<%%= javascript_include_tag :defaults %>
|
7
|
+
<%%= csrf_meta_tag %>
|
8
|
+
</head>
|
9
|
+
<body>
|
10
|
+
|
11
|
+
<p class="notice"><%%= notice %></p>
|
12
|
+
|
13
|
+
<%%= yield %>
|
14
|
+
|
15
|
+
</body>
|
16
|
+
</html>
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<h1>New <%= singular_name %></h1>
|
2
|
+
|
3
|
+
<%%= form_for :<%= singular_name %>, :url => <%= scope_prefix + (singleton? ? singular_name : plural_name) %>_path(<%= instance_variable_scope %>) do |f| %>
|
4
|
+
<%%= render :partial => 'fields', :locals => {:f => f} %>
|
5
|
+
<%%= f.submit %>
|
6
|
+
<%% end %>
|
7
|
+
<%- unless options[:singleton] -%>
|
8
|
+
|
9
|
+
<%%= link_to 'Back', <%= scope_prefix + plural_name %>_path(<%= instance_variable_scope %>) %>
|
10
|
+
<%- end -%>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<% for attribute in attributes -%>
|
2
|
+
<p>
|
3
|
+
<b><%= attribute.human_name %>:</b>
|
4
|
+
<%%= @<%= singular_name %>.<%= attribute.name %> %>
|
5
|
+
</p>
|
6
|
+
|
7
|
+
<% end -%>
|
8
|
+
|
9
|
+
<%%= link_to 'Edit', edit_<%= scope_prefix + singular_name %>_path(<%= instance_variable_scope('@' + singular_name) %>) %>
|
10
|
+
<%- unless options[:singleton] -%>
|
11
|
+
<%%= link_to 'Back', <%= scope_prefix + plural_name %>_path(<%= instance_variable_scope %>) %>
|
12
|
+
<%- end -%>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class <%= migration_class_name %> < ActiveRecord::Migration
|
2
|
+
def self.up<% attributes.each do |attribute| %>
|
3
|
+
<%= migration_action %>_column :<%= table_name %>, :<%= attribute.name %><% if migration_action == 'add' %>, :<%= attribute.type %><% end -%>
|
4
|
+
<%- end %>
|
5
|
+
end
|
6
|
+
|
7
|
+
def self.down<% attributes.reverse.each do |attribute| %>
|
8
|
+
<%= migration_action == 'add' ? 'remove' : 'add' %>_column :<%= table_name %>, :<%= attribute.name %><% if migration_action == 'remove' %>, :<%= attribute.type %><% end -%>
|
9
|
+
<%- end %>
|
10
|
+
end
|
11
|
+
end
|
metadata
ADDED
@@ -0,0 +1,92 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ingoweiss_generators
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 0
|
8
|
+
- 3
|
9
|
+
version: 0.0.3
|
10
|
+
platform: ruby
|
11
|
+
authors:
|
12
|
+
- Ingo Weiss
|
13
|
+
autorequire:
|
14
|
+
bindir: bin
|
15
|
+
cert_chain: []
|
16
|
+
|
17
|
+
date: 2010-05-09 00:00:00 +02:00
|
18
|
+
default_executable:
|
19
|
+
dependencies:
|
20
|
+
- !ruby/object:Gem::Dependency
|
21
|
+
name: rails
|
22
|
+
prerelease: false
|
23
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - ~>
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
segments:
|
28
|
+
- 3
|
29
|
+
- 0
|
30
|
+
- 0
|
31
|
+
- beta1
|
32
|
+
version: 3.0.0.beta1
|
33
|
+
type: :runtime
|
34
|
+
version_requirements: *id001
|
35
|
+
description: |
|
36
|
+
A collection of generators reflecting my personal preferences
|
37
|
+
|
38
|
+
email: ingo@ingoweiss.com
|
39
|
+
executables: []
|
40
|
+
|
41
|
+
extensions: []
|
42
|
+
|
43
|
+
extra_rdoc_files: []
|
44
|
+
|
45
|
+
files:
|
46
|
+
- lib/generators/ingoweiss/helpers/scope_helpers.rb
|
47
|
+
- lib/generators/ingoweiss/scaffold/scaffold_generator.rb
|
48
|
+
- lib/generators/ingoweiss/scaffold_controller/scaffold_controller_generator.rb
|
49
|
+
- lib/generators/ingoweiss/scaffold_controller/templates/controller.erb
|
50
|
+
- lib/generators/ingoweiss/scaffold_views/scaffold_views_generator.rb
|
51
|
+
- lib/generators/ingoweiss/scaffold_views/templates/_entry.html.erb
|
52
|
+
- lib/generators/ingoweiss/scaffold_views/templates/_fields.html.erb
|
53
|
+
- lib/generators/ingoweiss/scaffold_views/templates/edit.html.erb
|
54
|
+
- lib/generators/ingoweiss/scaffold_views/templates/index.html.erb
|
55
|
+
- lib/generators/ingoweiss/scaffold_views/templates/layout.html.erb
|
56
|
+
- lib/generators/ingoweiss/scaffold_views/templates/new.html.erb
|
57
|
+
- lib/generators/ingoweiss/scaffold_views/templates/show.html.erb
|
58
|
+
- lib/generators/ingoweiss/templates/migration.erb
|
59
|
+
- lib/ingoweiss_generators/railtie.rb
|
60
|
+
- lib/ingoweiss_generators.rb
|
61
|
+
has_rdoc: true
|
62
|
+
homepage:
|
63
|
+
licenses: []
|
64
|
+
|
65
|
+
post_install_message:
|
66
|
+
rdoc_options: []
|
67
|
+
|
68
|
+
require_paths:
|
69
|
+
- lib
|
70
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
71
|
+
requirements:
|
72
|
+
- - ">="
|
73
|
+
- !ruby/object:Gem::Version
|
74
|
+
segments:
|
75
|
+
- 0
|
76
|
+
version: "0"
|
77
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
|
+
requirements:
|
79
|
+
- - ">="
|
80
|
+
- !ruby/object:Gem::Version
|
81
|
+
segments:
|
82
|
+
- 0
|
83
|
+
version: "0"
|
84
|
+
requirements: []
|
85
|
+
|
86
|
+
rubyforge_project:
|
87
|
+
rubygems_version: 1.3.6
|
88
|
+
signing_key:
|
89
|
+
specification_version: 3
|
90
|
+
summary: A collection of generators
|
91
|
+
test_files: []
|
92
|
+
|