ixtlan-generators 0.1.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/MIT-LICENSE +20 -0
- data/lib/generators/ixtlan/base.rb +45 -0
- data/lib/generators/ixtlan/configuration_model/configuration_model_generator.rb +12 -0
- data/lib/generators/ixtlan/configuration_scaffold/configuration_scaffold_generator.rb +12 -0
- data/lib/generators/ixtlan/setup/setup_generator.rb +38 -0
- data/lib/generators/ixtlan/setup/templates/application_layout.html.erb +17 -0
- data/lib/generators/ixtlan/setup/templates/database.yml.example +48 -0
- data/lib/generators/ixtlan/setup/templates/error.html.erb +1 -0
- data/lib/generators/ixtlan/setup/templates/error_with_session.html.erb +1 -0
- data/lib/generators/ixtlan/setup/templates/gitignore +2 -0
- data/lib/generators/ixtlan/setup/templates/initializer.rb +64 -0
- data/lib/generators/ixtlan/setup/templates/preinitializer.rb +31 -0
- data/lib/generators/ixtlan/setup/templates/production.yml.example +8 -0
- data/lib/generators/ixtlan/setup/templates/stale.html.erb +2 -0
- data/lib/generators/model/model_generator.rb +12 -0
- data/lib/generators/rails/active_record/active_record_generator.rb +40 -0
- data/lib/generators/rails/active_record/model/migration.rb +19 -0
- data/lib/generators/rails/active_record/model/model.rb +16 -0
- data/lib/generators/rails/erb/erb_generator.rb +37 -0
- data/lib/generators/rails/erb/scaffold/_form.html.erb +28 -0
- data/lib/generators/rails/erb/scaffold/edit.html.erb +24 -0
- data/lib/generators/rails/erb/scaffold/index.html.erb +49 -0
- data/lib/generators/rails/erb/scaffold/new.html.erb +11 -0
- data/lib/generators/rails/erb/scaffold/show.html.erb +30 -0
- data/lib/generators/rails/scaffold_controller/scaffold_controller/controller.rb +129 -0
- data/lib/generators/rails/scaffold_controller/scaffold_controller/singleton_controller.rb +43 -0
- data/lib/generators/scaffold/scaffold_generator.rb +35 -0
- data/lib/generators/scaffold_controller/scaffold_controller_generator.rb +34 -0
- data/lib/ixtlan-generators.rb +3 -0
- data/lib/ixtlan/railtie.rb +9 -0
- metadata +143 -0
data/MIT-LICENSE
ADDED
@@ -0,0 +1,20 @@
|
|
1
|
+
Copyright (c) 2008 Kristian Meier
|
2
|
+
|
3
|
+
Permission is hereby granted, free of charge, to any person obtaining
|
4
|
+
a copy of this software and associated documentation files (the
|
5
|
+
"Software"), to deal in the Software without restriction, including
|
6
|
+
without limitation the rights to use, copy, modify, merge, publish,
|
7
|
+
distribute, sublicense, and/or sell copies of the Software, and to
|
8
|
+
permit persons to whom the Software is furnished to do so, subject to
|
9
|
+
the following conditions:
|
10
|
+
|
11
|
+
The above copyright notice and this permission notice shall be
|
12
|
+
included in all copies or substantial portions of the Software.
|
13
|
+
|
14
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
15
|
+
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
16
|
+
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
17
|
+
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
18
|
+
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
19
|
+
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
20
|
+
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
@@ -0,0 +1,45 @@
|
|
1
|
+
require 'rails/generators/named_base'
|
2
|
+
module Ixtlan
|
3
|
+
module Generators
|
4
|
+
class Base < Rails::Generators::Base
|
5
|
+
|
6
|
+
argument :name, :type => :string, :required => false
|
7
|
+
|
8
|
+
protected
|
9
|
+
def generator_name
|
10
|
+
raise "please overwrite generator_name"
|
11
|
+
end
|
12
|
+
|
13
|
+
public
|
14
|
+
def create
|
15
|
+
args = []
|
16
|
+
if name
|
17
|
+
args << ARGV.shift
|
18
|
+
else
|
19
|
+
args << "configuration"
|
20
|
+
end
|
21
|
+
|
22
|
+
if defined? ::Ixtlan::Errors
|
23
|
+
args << "errors_keep_dump:integer"
|
24
|
+
args << "errors_dir:string"
|
25
|
+
args << "errors_from:string"
|
26
|
+
args << "errors_to:string"
|
27
|
+
end
|
28
|
+
|
29
|
+
if defined? ::Ixtlan::Sessions
|
30
|
+
args << "idle_session_timeout:integer"
|
31
|
+
end
|
32
|
+
|
33
|
+
if defined? ::Ixtlan::Audit
|
34
|
+
args << "audit_keep_log:integer"
|
35
|
+
end
|
36
|
+
|
37
|
+
args += ARGV[0, 10000] || []
|
38
|
+
|
39
|
+
args << "--singleton"
|
40
|
+
|
41
|
+
generate generator_name, *args
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,38 @@
|
|
1
|
+
require 'rails/generators/base'
|
2
|
+
module Ixtlan
|
3
|
+
module Generators
|
4
|
+
class SetupGenerator < Rails::Generators::Base
|
5
|
+
|
6
|
+
source_root File.expand_path('../templates', __FILE__)
|
7
|
+
|
8
|
+
def create_preinitializer_files
|
9
|
+
template 'preinitializer.rb', File.join('config', "preinitializer.rb")
|
10
|
+
template 'gitignore', File.join('config', ".gitignore")
|
11
|
+
template 'production.yml.example', File.join('config', "production.yml.example")
|
12
|
+
template 'database.yml.example', File.join('config', "database.yml.example")
|
13
|
+
end
|
14
|
+
|
15
|
+
def create_initializer_file
|
16
|
+
template 'initializer.rb', File.join('config', "initializers", "ixtlan.rb")
|
17
|
+
end
|
18
|
+
|
19
|
+
# TODO make only if template-engine is ERB
|
20
|
+
def error_templates
|
21
|
+
if defined? Ixtlan::Errors
|
22
|
+
views_dir = File.join('app', 'views', 'errors')
|
23
|
+
['error', 'error_with_session', 'stale'].each do |f|
|
24
|
+
file = "#{f}.html.erb"
|
25
|
+
template file, File.join(views_dir, file)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def create_application_layout_file
|
31
|
+
if defined? Ixtlan::Sessions
|
32
|
+
layout = File.join('app', 'views', 'layouts', 'application.html.erb')
|
33
|
+
template 'application_layout.html.erb', layout
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title><%= app_const_base %></title>
|
5
|
+
<%%= stylesheet_link_tag :all %>
|
6
|
+
<%%= javascript_include_tag :defaults %>
|
7
|
+
<%%= csrf_meta_tag %>
|
8
|
+
<%% if controller.respond_to?(:current_user) && controller.send(:current_user) != nil %>
|
9
|
+
<meta http-equiv="refresh" content="<%%= controller.send(:idle_session_timeout) * 60 + 5 %>" />
|
10
|
+
<%% end %>
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
|
14
|
+
<%%= yield %>
|
15
|
+
|
16
|
+
</body>
|
17
|
+
</html>
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# MySQL. Versions 4.1 and 5.0 are recommended.
|
2
|
+
#
|
3
|
+
# Install the MySQL driver:
|
4
|
+
# gem install mysql
|
5
|
+
# On Mac OS X:
|
6
|
+
# sudo gem install mysql -- --with-mysql-dir=/usr/local/mysql
|
7
|
+
# On Mac OS X Leopard:
|
8
|
+
# sudo env ARCHFLAGS="-arch i386" gem install mysql -- --with-mysql-config=/usr/local/mysql/bin/mysql_config
|
9
|
+
# This sets the ARCHFLAGS environment variable to your native architecture
|
10
|
+
# On Windows:
|
11
|
+
# gem install mysql
|
12
|
+
# Choose the win32 build.
|
13
|
+
# Install MySQL and put its /bin directory on your path.
|
14
|
+
#
|
15
|
+
# And be sure to use new-style password hashing:
|
16
|
+
# http://dev.mysql.com/doc/refman/5.0/en/old-client.html
|
17
|
+
development:
|
18
|
+
adapter: mysql
|
19
|
+
encoding: utf8
|
20
|
+
reconnect: false
|
21
|
+
database: test_development
|
22
|
+
pool: 5
|
23
|
+
username: root
|
24
|
+
password:
|
25
|
+
socket: /var/run/mysqld/mysqld.sock
|
26
|
+
|
27
|
+
# Warning: The database defined as "test" will be erased and
|
28
|
+
# re-generated from your development database when you run "rake".
|
29
|
+
# Do not set this db to the same as development or production.
|
30
|
+
test:
|
31
|
+
adapter: mysql
|
32
|
+
encoding: utf8
|
33
|
+
reconnect: false
|
34
|
+
database: test_test
|
35
|
+
pool: 5
|
36
|
+
username: root
|
37
|
+
password:
|
38
|
+
socket: /var/run/mysqld/mysqld.sock
|
39
|
+
|
40
|
+
production:
|
41
|
+
adapter: mysql
|
42
|
+
encoding: utf8
|
43
|
+
reconnect: false
|
44
|
+
database: CONFIG[:db][:database]
|
45
|
+
pool: 5
|
46
|
+
username: CONFIG[:db][:username]
|
47
|
+
password: CONFIG[:db][:password]
|
48
|
+
socket: /var/run/mysqld/mysqld.sock
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1><%%= @notice %></h1>
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1><%%= @notice %></h1>
|
@@ -0,0 +1,64 @@
|
|
1
|
+
# dynamic configuration through a Configuration singleton model
|
2
|
+
|
3
|
+
# configuration model
|
4
|
+
# -------------------
|
5
|
+
# CONFIGURATION = Configuration
|
6
|
+
# config.configuration_model = CONFIGURATION
|
7
|
+
begin
|
8
|
+
config_instance = CONFIGURATION.instance
|
9
|
+
rescue
|
10
|
+
# allow rake tasks to work without configuration migrated
|
11
|
+
return
|
12
|
+
end
|
13
|
+
|
14
|
+
# notification email on errors and dump directory for the system dump
|
15
|
+
# the error dumps will be cleanup after the days to keeps dump expired
|
16
|
+
# --------------------------------------------------------------------
|
17
|
+
# config_instance.register("error_dumper") do |config|
|
18
|
+
# Rails.configuration.error_dumper.dump_dir = config.errors_dir
|
19
|
+
# Rails.configuration.error_dumper.email_from = config.errors_from
|
20
|
+
# Rails.configuration.error_dumper.email_to = config.errors_to
|
21
|
+
# Rails.configuration.error_dumper.keep_dumps = config.errors_keep_dump # days
|
22
|
+
# end
|
23
|
+
|
24
|
+
# idle session timeout configuration (in minutes)
|
25
|
+
# -----------------------------------------------
|
26
|
+
# config_instance.register("session_idle_timeout") do |config|
|
27
|
+
# Rails.configuration.session_idle_timeout = config.session_idle_timeout
|
28
|
+
# end
|
29
|
+
|
30
|
+
# audit log manager
|
31
|
+
# -----------------
|
32
|
+
|
33
|
+
# config.audit_manager.model = MyAudit # default: Audit
|
34
|
+
# config.audit_manager.username_method = :username # default: :login
|
35
|
+
|
36
|
+
# config_instance.register("audit_manager") do |config|
|
37
|
+
# Rails.configuration.audit_manager.keep_log = config.keep_log # days
|
38
|
+
# end
|
39
|
+
|
40
|
+
# --------------------
|
41
|
+
# static configuration
|
42
|
+
# --------------------
|
43
|
+
|
44
|
+
# error dumper
|
45
|
+
# ------------
|
46
|
+
# notification email on errors and dump directory for the system dump. per
|
47
|
+
# default there is no email notification and if email_from or email_to is
|
48
|
+
# missing then there is no email too
|
49
|
+
|
50
|
+
# config.error_dumper.dump_dir = Rails.root + "/log/errors" # default: log/errors
|
51
|
+
# config.error_dumper.email_from = "no-reply@example.com"
|
52
|
+
# config.error_dumper.email_to = "developer1@example.com,developer2@example.com"
|
53
|
+
# config.error_dumper.keep_dumps = 30 # days
|
54
|
+
# config.skip_rescue_module = true # do not include the predefined Rescue
|
55
|
+
|
56
|
+
# idle session timeout configuration
|
57
|
+
# ----------------------------------
|
58
|
+
# config.session_idle_timeout = 30 #minutes
|
59
|
+
|
60
|
+
# audit log manager
|
61
|
+
# -----------------
|
62
|
+
# config.audit_manager.model = MyAudit # default: Audit
|
63
|
+
# config.audit_manager.username_method = :username # default: :login
|
64
|
+
# config.audit_manager.keep_log = 30 # days
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require 'yaml'
|
2
|
+
require 'erb'
|
3
|
+
module Ixtlan
|
4
|
+
class Configurator
|
5
|
+
|
6
|
+
def self.symbolize_keys(h)
|
7
|
+
result = {}
|
8
|
+
|
9
|
+
h.each do |k, v|
|
10
|
+
v = ' ' if v.nil?
|
11
|
+
if v.is_a?(Hash)
|
12
|
+
result[k.to_sym] = symbolize_keys(v) unless v.size == 0
|
13
|
+
else
|
14
|
+
result[k.to_sym] = v unless k.to_sym == v.to_sym
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
result
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.load(file)
|
22
|
+
if File.exists?(file)
|
23
|
+
symbolize_keys(YAML::load(ERB.new(IO.read(file)).result))
|
24
|
+
else
|
25
|
+
warn "no file #{file} to load - maybe the is a #{file}.example"
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
CONFIG = Ixtlan::Configurator.load(File.join(File.dirname(__FILE__), 'production.yml')) || {}
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module Rails
|
2
|
+
module Generators
|
3
|
+
class ModelGenerator < NamedBase #metagenerator
|
4
|
+
argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
|
5
|
+
hook_for :orm, :required => true
|
6
|
+
|
7
|
+
if defined? Resty
|
8
|
+
hook_for :resty, :type => :boolean, :default => true
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
require 'rails/generators/active_record'
|
2
|
+
|
3
|
+
module ActiveRecord
|
4
|
+
module Generators
|
5
|
+
class ModelGenerator < Base
|
6
|
+
include ::Ixtlan::Core::Singleton
|
7
|
+
|
8
|
+
argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
|
9
|
+
|
10
|
+
check_class_collision
|
11
|
+
|
12
|
+
class_option :migration, :type => :boolean
|
13
|
+
class_option :timestamps, :type => :boolean
|
14
|
+
class_option :parent, :type => :string, :desc => "The parent class for the generated model"
|
15
|
+
|
16
|
+
def create_migration_file
|
17
|
+
return unless options[:migration] && options[:parent].nil?
|
18
|
+
migration_template "migration.rb", "db/migrate/create_#{table_name}.rb"
|
19
|
+
end
|
20
|
+
|
21
|
+
def create_model_file
|
22
|
+
template 'model.rb', File.join('app/models', class_path, "#{file_name}.rb")
|
23
|
+
end
|
24
|
+
|
25
|
+
def create_module_file
|
26
|
+
return if class_path.empty?
|
27
|
+
template 'module.rb', File.join('app/models', "#{class_path.join('/')}.rb") if behavior == :invoke
|
28
|
+
end
|
29
|
+
|
30
|
+
hook_for :test_framework
|
31
|
+
|
32
|
+
protected
|
33
|
+
|
34
|
+
def parent_class_name
|
35
|
+
options[:parent] || "ActiveRecord::Base"
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
class <%= migration_class_name %> < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table :<%= table_name %> do |t|
|
4
|
+
<% attributes.select {|attr| ![:has_one, :has_many].include?(attr.type) }.each do |attribute| -%>
|
5
|
+
t.<%= attribute.type %> :<%= attribute.name %>
|
6
|
+
<% end -%>
|
7
|
+
<% if options[:timestamps] %>
|
8
|
+
t.timestamps
|
9
|
+
<% end -%>
|
10
|
+
<% if options[:modified_by] %>
|
11
|
+
t.references :modified_by
|
12
|
+
<% end -%>
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.down
|
17
|
+
drop_table :<%= table_name %>
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
class <%= class_name %> < <%= parent_class_name.classify %>
|
2
|
+
<% attributes.select {|attr| attr.reference? }.each do |attribute| -%>
|
3
|
+
belongs_to :<%= attribute.name %>
|
4
|
+
<% end -%>
|
5
|
+
<% attributes.select {|attr| [:has_one, :has_many].include?(attr.type) }.each do |attribute| -%>
|
6
|
+
<%= attribute.type %> :<%= attribute.name %>
|
7
|
+
<% end -%>
|
8
|
+
<% if options[:modified_by] -%>
|
9
|
+
belongs_to :modified_by, :class_name => "<%= options[:user_model] %>"
|
10
|
+
<% end -%>
|
11
|
+
<% if options[:singleton] -%>
|
12
|
+
def self.instance
|
13
|
+
self.first || self.new
|
14
|
+
end
|
15
|
+
<% end -%>
|
16
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
require 'rails/generators/erb'
|
2
|
+
require 'rails/generators/resource_helpers'
|
3
|
+
|
4
|
+
module Erb
|
5
|
+
module Generators
|
6
|
+
class ScaffoldGenerator < Base
|
7
|
+
include Rails::Generators::ResourceHelpers
|
8
|
+
|
9
|
+
class_option :optimistic, :type => :boolean, :default => false
|
10
|
+
class_option :singleton, :type => :boolean, :default => false
|
11
|
+
class_option :timestamps, :type => :boolean, :default => true
|
12
|
+
|
13
|
+
argument :attributes, :type => :array, :default => [], :banner => "field:type field:type"
|
14
|
+
|
15
|
+
def create_root_folder
|
16
|
+
empty_directory File.join("app/views", controller_file_path)
|
17
|
+
end
|
18
|
+
|
19
|
+
def copy_view_files
|
20
|
+
available_views.each do |view|
|
21
|
+
filename = filename_with_extensions(view)
|
22
|
+
template filename, File.join("app/views", controller_file_path, filename)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
protected
|
27
|
+
|
28
|
+
def available_views
|
29
|
+
if options[:singleton]
|
30
|
+
%w(edit show _form)
|
31
|
+
else
|
32
|
+
%w(index edit show new _form)
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
<%%= form_for(@<%= singular_table_name %><% if options[:singleton] -%>
|
2
|
+
, :url => <%= singular_table_name %>_path, :html => { :method => :put, :class => "edit_<%= singular_table_name %>", :id => "edit_<%= singular_table_name %>"}<% end -%>
|
3
|
+
) do |f| %>
|
4
|
+
<%% if @<%= singular_table_name %>.errors.any? %>
|
5
|
+
<div id="error_explanation">
|
6
|
+
<h2><%%= pluralize(@<%= singular_table_name %>.errors.count, "error") %> prohibited this <%= singular_table_name %> from being saved:</h2>
|
7
|
+
|
8
|
+
<ul>
|
9
|
+
<%% @<%= singular_table_name %>.errors.full_messages.each do |msg| %>
|
10
|
+
<li><%%= msg %></li>
|
11
|
+
<%% end %>
|
12
|
+
</ul>
|
13
|
+
</div>
|
14
|
+
<%% end %>
|
15
|
+
|
16
|
+
<% for attribute in attributes -%>
|
17
|
+
<div class="field"><!-- begin - <%= attribute.name %> -->
|
18
|
+
<%%= f.label :<%= attribute.name %> %><br />
|
19
|
+
<%%= f.<%= attribute.field_type %> :<%= attribute.name %> %>
|
20
|
+
</div><!-- end - <%= attribute.name %> -->
|
21
|
+
<% end -%>
|
22
|
+
<div class="actions">
|
23
|
+
<% if options[:optimistic] && options[:timestamps] -%>
|
24
|
+
<%%= f.hidden_field :updated_at %>
|
25
|
+
<% end -%>
|
26
|
+
<%%= f.submit %>
|
27
|
+
</div>
|
28
|
+
<%% end %>
|
@@ -0,0 +1,24 @@
|
|
1
|
+
<h1>Editing <%= singular_table_name %></h1>
|
2
|
+
|
3
|
+
<%%= render 'form' %>
|
4
|
+
|
5
|
+
<% if defined? ::Ixtlan::Guard -%>
|
6
|
+
<%% if allowed?(:<%= table_name %>, :show) %>
|
7
|
+
<% end -%>
|
8
|
+
<% if options[:singleton] -%>
|
9
|
+
<%%= link_to 'Show', <%= singular_table_name %>_path %>
|
10
|
+
<% else -%>
|
11
|
+
<%%= link_to 'Show', @<%= singular_table_name %> %>
|
12
|
+
<% end -%>
|
13
|
+
<% if defined? ::Ixtlan::Guard -%>
|
14
|
+
<%% end %>
|
15
|
+
<% end -%>
|
16
|
+
<% unless options[:singleton] -%>
|
17
|
+
<% if defined? ::Ixtlan::Guard -%>
|
18
|
+
<%% if allowed?(:<%= table_name %>, :index) %>
|
19
|
+
<% end -%>
|
20
|
+
| <%%= link_to 'Back', <%= index_helper %>_path %>
|
21
|
+
<% if defined? ::Ixtlan::Guard -%>
|
22
|
+
<%% end %>
|
23
|
+
<% end -%>
|
24
|
+
<% end -%>
|
@@ -0,0 +1,49 @@
|
|
1
|
+
<h1>Listing <%= plural_table_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
|
+
|
13
|
+
<%% @<%= plural_table_name %>.each do |<%= singular_table_name %>| %>
|
14
|
+
<tr>
|
15
|
+
<% for attribute in attributes -%>
|
16
|
+
<td><%%= <%= singular_table_name %>.<%= attribute.name %> %></td>
|
17
|
+
<% end -%>
|
18
|
+
<% if defined? ::Ixtlan::Guard -%>
|
19
|
+
<%% if allowed?(:<%= table_name %>, :show) %>
|
20
|
+
<% end -%>
|
21
|
+
<td><%%= link_to 'Show', <%= singular_table_name %> %></td>
|
22
|
+
<% if defined? ::Ixtlan::Guard -%>
|
23
|
+
<%% end %>
|
24
|
+
<%% if allowed?(:<%= table_name %>, :update) %>
|
25
|
+
<% end -%>
|
26
|
+
<td><%%= link_to 'Edit', edit_<%= singular_table_name %>_path(<%= singular_table_name %>) %></td>
|
27
|
+
<% if defined? ::Ixtlan::Guard -%>
|
28
|
+
<%% end %>
|
29
|
+
<%% if allowed?(:<%= table_name %>, :destroy) %>
|
30
|
+
<% end -%>
|
31
|
+
<td><% if options[:optimistic] && options[:timestamps] -%>
|
32
|
+
<%%= link_to 'Destroy', <%= singular_table_name %>_path(<%= singular_table_name %>) + "?<%= singular_table_name %>[updated_at]=#{<%= singular_table_name %>.updated_at.utc.strftime('%Y-%m-%d %H:%M:%S') + ("%06d" % <%= singular_table_name %>.updated_at.utc)}", :confirm => 'Are you sure?', :method => :delete %><% else -%><%%= link_to 'Destroy', <%= singular_table_name %>, :confirm => 'Are you sure?', :method => :delete %>
|
33
|
+
<% end -%></td>
|
34
|
+
<% if defined? ::Ixtlan::Guard -%>
|
35
|
+
<%% end %>
|
36
|
+
<% end -%>
|
37
|
+
</tr>
|
38
|
+
<%% end %>
|
39
|
+
</table>
|
40
|
+
|
41
|
+
<br />
|
42
|
+
|
43
|
+
<% if defined? ::Ixtlan::Guard -%>
|
44
|
+
<%% if allowed?(:<%= table_name %>, :create) %>
|
45
|
+
<% end -%>
|
46
|
+
<%%= link_to 'New <%= human_name %>', new_<%= singular_table_name %>_path %>
|
47
|
+
<% if defined? ::Ixtlan::Guard -%>
|
48
|
+
<%% end %>
|
49
|
+
<% end -%>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
<h1>New <%= singular_table_name %></h1>
|
2
|
+
|
3
|
+
<%%= render 'form' %>
|
4
|
+
|
5
|
+
<% if defined? ::Ixtlan::Guard -%>
|
6
|
+
<%% if allowed?(:<%= table_name %>, :index) %>
|
7
|
+
<% end -%>
|
8
|
+
<%%= link_to 'Back', <%= index_helper %>_path %>
|
9
|
+
<% if defined? ::Ixtlan::Guard -%>
|
10
|
+
<%% end %>
|
11
|
+
<% end -%>
|
@@ -0,0 +1,30 @@
|
|
1
|
+
<p id="notice"><%%= notice %></p>
|
2
|
+
|
3
|
+
<% for attribute in attributes -%>
|
4
|
+
<p>
|
5
|
+
<b><%= attribute.human_name %>:</b>
|
6
|
+
<%%= @<%= singular_table_name %>.<%= attribute.name %> %>
|
7
|
+
</p>
|
8
|
+
|
9
|
+
<% end -%>
|
10
|
+
|
11
|
+
<% if defined? ::Ixtlan::Guard -%>
|
12
|
+
<%% if allowed?(:<%= table_name %>, :update) %>
|
13
|
+
<% end -%>
|
14
|
+
<% if options[:singleton] -%>
|
15
|
+
<%%= link_to 'Edit', edit_<%= singular_table_name %>_path %>
|
16
|
+
<% else -%>
|
17
|
+
<%%= link_to 'Edit', edit_<%= singular_table_name %>_path(@<%= singular_table_name %>) %>
|
18
|
+
<% end -%>
|
19
|
+
<% if defined? ::Ixtlan::Guard -%>
|
20
|
+
<%% end %>
|
21
|
+
<% end -%>
|
22
|
+
<% unless options[:singleton] -%>
|
23
|
+
<% if defined? ::Ixtlan::Guard -%>
|
24
|
+
<%% if allowed?(:<%= table_name %>, :index) %>
|
25
|
+
<% end -%>
|
26
|
+
| <%%= link_to 'Back', <%= index_helper %>_path %>
|
27
|
+
<% if defined? ::Ixtlan::Guard -%>
|
28
|
+
<%% end %>
|
29
|
+
<% end -%>
|
30
|
+
<% end -%>
|
@@ -0,0 +1,129 @@
|
|
1
|
+
class <%= controller_class_name %>Controller < ApplicationController
|
2
|
+
# GET <%= route_url %>
|
3
|
+
# GET <%= route_url %>.xml
|
4
|
+
# GET <%= route_url %>.json
|
5
|
+
def index
|
6
|
+
@<%= plural_table_name %> = <%= orm_class.all(class_name) %>
|
7
|
+
|
8
|
+
respond_to do |format|
|
9
|
+
format.html # index.html.erb
|
10
|
+
format.xml { render :xml => @<%= plural_table_name %> }
|
11
|
+
format.json { render :json => @<%= plural_table_name %> }
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
# GET <%= route_url %>/1
|
16
|
+
# GET <%= route_url %>/1.xml
|
17
|
+
# GET <%= route_url %>/1.json
|
18
|
+
def show
|
19
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
20
|
+
|
21
|
+
respond_to do |format|
|
22
|
+
format.html # show.html.erb
|
23
|
+
format.xml { render :xml => @<%= singular_table_name %> }
|
24
|
+
format.json { render :json => @<%= singular_table_name %> }
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
# GET <%= route_url %>/new
|
29
|
+
def new
|
30
|
+
@<%= singular_table_name %> = <%= orm_class.build(class_name) %>
|
31
|
+
end
|
32
|
+
|
33
|
+
# GET <%= route_url %>/1/edit
|
34
|
+
def edit
|
35
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
36
|
+
end
|
37
|
+
|
38
|
+
# POST <%= route_url %>
|
39
|
+
# POST <%= route_url %>.xml
|
40
|
+
# POST <%= route_url %>.json
|
41
|
+
def create
|
42
|
+
@<%= singular_table_name %> = <%= orm_class.build(class_name, "params[:#{singular_table_name}]") %>
|
43
|
+
<% if options[:modified_by] -%>
|
44
|
+
@<%= singular_table_name %>.current_user = current_user
|
45
|
+
<% end -%>
|
46
|
+
|
47
|
+
respond_to do |format|
|
48
|
+
if @<%= orm_instance.save %>
|
49
|
+
format.html { redirect_to(@<%= singular_table_name %>, :notice => '<%= human_name %> was successfully created.') }
|
50
|
+
format.xml { render :xml => @<%= singular_table_name %>, :status => :created, :location => @<%= singular_table_name %> }
|
51
|
+
format.json { render :json => @<%= singular_table_name %>, :status => :created, :location => @<%= singular_table_name %> }
|
52
|
+
else
|
53
|
+
format.html { render :action => "new" }
|
54
|
+
format.xml { render :xml => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
|
55
|
+
format.json { render :json => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
|
60
|
+
# PUT <%= route_url %>/1
|
61
|
+
# PUT <%= route_url %>/1.xml
|
62
|
+
# PUT <%= route_url %>/1.json
|
63
|
+
def update
|
64
|
+
<% if options[:optimistic] && options[:timestamps] -%>
|
65
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "(params[:#{singular_table_name}]||[]).delete(:updated_at), params[:id]").sub(/\.(get|find)/, '.optimistic_\1') %>
|
66
|
+
|
67
|
+
if @<%= singular_table_name %>.nil?
|
68
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
69
|
+
respond_to do |format|
|
70
|
+
format.html { render :action => "edit" }
|
71
|
+
format.xml { render :xml => nil, :status => :conflict }
|
72
|
+
format.json { render :json => nil, :status => :conflict }
|
73
|
+
end
|
74
|
+
return
|
75
|
+
end
|
76
|
+
<% else -%>
|
77
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
78
|
+
(params[:<%= singular_table_name %>]||[]).delete(:updated_at)
|
79
|
+
<% end -%>
|
80
|
+
(params[:<%= singular_table_name %>]||[]).delete(:id)
|
81
|
+
<% if options[:modified_by] -%>
|
82
|
+
@<%= singular_table_name %>.current_user = current_user
|
83
|
+
<% end -%>
|
84
|
+
|
85
|
+
respond_to do |format|
|
86
|
+
if @<%= orm_instance.update_attributes("params[:#{singular_table_name}]") %>
|
87
|
+
format.html { redirect_to(@<%= singular_table_name %>, :notice => '<%= human_name %> was successfully updated.') }
|
88
|
+
format.xml { render :xml => @<%= singular_table_name %> }
|
89
|
+
format.json { render :json => @<%= singular_table_name %> }
|
90
|
+
else
|
91
|
+
format.html { render :action => "edit" }
|
92
|
+
format.xml { render :xml => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
|
93
|
+
format.json { render :json => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
|
94
|
+
end
|
95
|
+
end
|
96
|
+
end
|
97
|
+
|
98
|
+
# DELETE <%= route_url %>/1
|
99
|
+
# DELETE <%= route_url %>/1.xml
|
100
|
+
# DELETE <%= route_url %>/1.json
|
101
|
+
def destroy
|
102
|
+
<% if options[:optimistic] && options[:timestamps] -%>
|
103
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "(params[:#{singular_table_name}]||[]).delete(:updated_at), params[:id]").sub(/\.(get|find)/, '.optimistic_\1') %>
|
104
|
+
|
105
|
+
if @<%= singular_table_name %>.nil?
|
106
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
107
|
+
respond_to do |format|
|
108
|
+
format.html { render :action => "edit" }
|
109
|
+
format.xml { render :xml => nil, :status => :conflict }
|
110
|
+
format.json { render :json => nil, :status => :conflict }
|
111
|
+
end
|
112
|
+
return
|
113
|
+
end
|
114
|
+
<% else -%>
|
115
|
+
@<%= singular_table_name %> = <%= orm_class.find(class_name, "params[:id]") %>
|
116
|
+
<% end -%>
|
117
|
+
<% if options[:modified_by] -%>
|
118
|
+
@<%= singular_table_name %>.current_user = current_user
|
119
|
+
<% end -%>
|
120
|
+
|
121
|
+
@<%= orm_instance.destroy %>
|
122
|
+
|
123
|
+
respond_to do |format|
|
124
|
+
format.html { redirect_to(<%= index_helper %>_url) }
|
125
|
+
format.xml { head :ok }
|
126
|
+
format.json { head :ok }
|
127
|
+
end
|
128
|
+
end
|
129
|
+
end
|
@@ -0,0 +1,43 @@
|
|
1
|
+
class <%= controller_class_name %>Controller < ApplicationController
|
2
|
+
|
3
|
+
# GET <%= route_url %>
|
4
|
+
# GET <%= route_url %>.xml
|
5
|
+
# GET <%= route_url %>.json
|
6
|
+
def show
|
7
|
+
@<%= singular_table_name %> = <%= class_name %>.instance
|
8
|
+
|
9
|
+
respond_to do |format|
|
10
|
+
format.html # show.html.erb
|
11
|
+
format.xml { render :xml => @<%= singular_table_name %> }
|
12
|
+
format.json { render :json => @<%= singular_table_name %> }
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
# GET <%= route_url %>/edit
|
17
|
+
def edit
|
18
|
+
@<%= singular_table_name %> = <%= class_name %>.instance
|
19
|
+
end
|
20
|
+
|
21
|
+
# PUT <%= route_url %>
|
22
|
+
# PUT <%= route_url %>.xml
|
23
|
+
# PUT <%= route_url %>.json
|
24
|
+
def update
|
25
|
+
@<%= singular_table_name %> = <%= class_name %>.instance
|
26
|
+
<% orm_class.find(class_name)
|
27
|
+
if options[:modified_by] -%>
|
28
|
+
@<%= singular_table_name %>.current_user = current_user
|
29
|
+
<% end -%>
|
30
|
+
|
31
|
+
respond_to do |format|
|
32
|
+
if @<%= orm_instance.update_attributes("params[:#{singular_table_name}]") %>
|
33
|
+
format.html { redirect_to(<%= singular_table_name %>_path, :notice => '<%= human_name %> was successfully updated.') }
|
34
|
+
format.xml { render :xml => @<%= singular_table_name %> }
|
35
|
+
format.json { render :json => @<%= singular_table_name %> }
|
36
|
+
else
|
37
|
+
format.html { render :action => "edit" }
|
38
|
+
format.xml { render :xml => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
|
39
|
+
format.json { render :json => @<%= orm_instance.errors %>, :status => :unprocessable_entity }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'rails/generators/rails/resource/resource_generator'
|
2
|
+
|
3
|
+
module Rails
|
4
|
+
module Generators
|
5
|
+
class ScaffoldGenerator < ResourceGenerator #metagenerator
|
6
|
+
remove_hook_for :resource_controller
|
7
|
+
remove_class_option :actions
|
8
|
+
|
9
|
+
class_option :singleton, :type => :boolean, :default => false
|
10
|
+
|
11
|
+
hook_for :scaffold_controller, :required => true, :in => :scaffold_controller
|
12
|
+
hook_for :stylesheets
|
13
|
+
|
14
|
+
if defined? Resty
|
15
|
+
hook_for :resty, :type => :boolean, :default => true
|
16
|
+
end
|
17
|
+
|
18
|
+
if defined? ::Ixtlan::Guard
|
19
|
+
hook_for :guard, :type => :boolean, :default => true
|
20
|
+
end
|
21
|
+
|
22
|
+
def add_resource_route
|
23
|
+
return if options[:actions].present?
|
24
|
+
route_config = class_path.collect{|namespace| "namespace :#{namespace} do " }.join(" ")
|
25
|
+
if options[:singleton]
|
26
|
+
route_config << "resource :#{file_name}"
|
27
|
+
else
|
28
|
+
route_config << "resources :#{file_name.pluralize}"
|
29
|
+
end
|
30
|
+
route_config << " end" * class_path.size
|
31
|
+
route route_config
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
require 'rails/generators/resource_helpers'
|
2
|
+
require 'rails/generators/named_base'
|
3
|
+
|
4
|
+
module ScaffoldController
|
5
|
+
module Generators
|
6
|
+
class ScaffoldControllerGenerator < ::Rails::Generators::NamedBase
|
7
|
+
include ::Rails::Generators::ResourceHelpers
|
8
|
+
|
9
|
+
check_class_collision :suffix => "Controller"
|
10
|
+
|
11
|
+
class_option :orm, :banner => "NAME", :type => :string, :required => true,
|
12
|
+
:desc => "ORM to generate the controller for"
|
13
|
+
|
14
|
+
class_option :singleton, :type => :boolean, :default => false
|
15
|
+
class_option :optimistic, :type => :boolean, :default => false
|
16
|
+
class_option :timestamps, :type => :boolean, :default => true
|
17
|
+
|
18
|
+
def create_controller_files
|
19
|
+
if options[:singleton]
|
20
|
+
template 'singleton_controller.rb', File.join('app/controllers', class_path, "#{controller_file_name}_controller.rb")
|
21
|
+
else
|
22
|
+
template 'controller.rb', File.join('app/controllers', class_path, "#{controller_file_name}_controller.rb")
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
hook_for :template_engine, :test_framework, :as => :scaffold, :in => :rails
|
27
|
+
|
28
|
+
# Invoke the helper using the controller name (pluralized)
|
29
|
+
hook_for :helper, :as => :scaffold, :in => :rails do |invoked|
|
30
|
+
invoke invoked, [ controller_name ]
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
metadata
ADDED
@@ -0,0 +1,143 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ixtlan-generators
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 0.1.0
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- mkristian
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
|
13
|
+
date: 2011-09-05 00:00:00 +05:30
|
14
|
+
default_executable:
|
15
|
+
dependencies:
|
16
|
+
- !ruby/object:Gem::Dependency
|
17
|
+
name: ixtlan-core
|
18
|
+
prerelease: false
|
19
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
20
|
+
none: false
|
21
|
+
requirements:
|
22
|
+
- - ">="
|
23
|
+
- !ruby/object:Gem::Version
|
24
|
+
version: "0.5"
|
25
|
+
- - <
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: "0.99999"
|
28
|
+
type: :development
|
29
|
+
version_requirements: *id001
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: rails
|
32
|
+
prerelease: false
|
33
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
34
|
+
none: false
|
35
|
+
requirements:
|
36
|
+
- - "="
|
37
|
+
- !ruby/object:Gem::Version
|
38
|
+
version: 3.0.9
|
39
|
+
type: :development
|
40
|
+
version_requirements: *id002
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rspec
|
43
|
+
prerelease: false
|
44
|
+
requirement: &id003 !ruby/object:Gem::Requirement
|
45
|
+
none: false
|
46
|
+
requirements:
|
47
|
+
- - "="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 2.6.0
|
50
|
+
type: :development
|
51
|
+
version_requirements: *id003
|
52
|
+
- !ruby/object:Gem::Dependency
|
53
|
+
name: cucumber
|
54
|
+
prerelease: false
|
55
|
+
requirement: &id004 !ruby/object:Gem::Requirement
|
56
|
+
none: false
|
57
|
+
requirements:
|
58
|
+
- - "="
|
59
|
+
- !ruby/object:Gem::Version
|
60
|
+
version: 0.9.4
|
61
|
+
type: :development
|
62
|
+
version_requirements: *id004
|
63
|
+
- !ruby/object:Gem::Dependency
|
64
|
+
name: ruby-maven
|
65
|
+
prerelease: false
|
66
|
+
requirement: &id005 !ruby/object:Gem::Requirement
|
67
|
+
none: false
|
68
|
+
requirements:
|
69
|
+
- - "="
|
70
|
+
- !ruby/object:Gem::Version
|
71
|
+
version: 0.8.3.0.3.0.28.3
|
72
|
+
type: :development
|
73
|
+
version_requirements: *id005
|
74
|
+
description: rails generator templates for ixtlan gems
|
75
|
+
email:
|
76
|
+
- m.kristian@web.de
|
77
|
+
executables: []
|
78
|
+
|
79
|
+
extensions: []
|
80
|
+
|
81
|
+
extra_rdoc_files: []
|
82
|
+
|
83
|
+
files:
|
84
|
+
- MIT-LICENSE
|
85
|
+
- lib/ixtlan-generators.rb
|
86
|
+
- lib/generators/model/model_generator.rb
|
87
|
+
- lib/generators/scaffold/scaffold_generator.rb
|
88
|
+
- lib/generators/scaffold_controller/scaffold_controller_generator.rb
|
89
|
+
- lib/generators/rails/erb/erb_generator.rb
|
90
|
+
- lib/generators/rails/erb/scaffold/new.html.erb
|
91
|
+
- lib/generators/rails/erb/scaffold/_form.html.erb
|
92
|
+
- lib/generators/rails/erb/scaffold/index.html.erb
|
93
|
+
- lib/generators/rails/erb/scaffold/show.html.erb
|
94
|
+
- lib/generators/rails/erb/scaffold/edit.html.erb
|
95
|
+
- lib/generators/rails/scaffold_controller/scaffold_controller/controller.rb
|
96
|
+
- lib/generators/rails/scaffold_controller/scaffold_controller/singleton_controller.rb
|
97
|
+
- lib/generators/rails/active_record/active_record_generator.rb
|
98
|
+
- lib/generators/rails/active_record/model/model.rb
|
99
|
+
- lib/generators/rails/active_record/model/migration.rb
|
100
|
+
- lib/generators/ixtlan/base.rb
|
101
|
+
- lib/generators/ixtlan/configuration_scaffold/configuration_scaffold_generator.rb
|
102
|
+
- lib/generators/ixtlan/setup/setup_generator.rb
|
103
|
+
- lib/generators/ixtlan/setup/templates/database.yml.example
|
104
|
+
- lib/generators/ixtlan/setup/templates/error_with_session.html.erb
|
105
|
+
- lib/generators/ixtlan/setup/templates/error.html.erb
|
106
|
+
- lib/generators/ixtlan/setup/templates/application_layout.html.erb
|
107
|
+
- lib/generators/ixtlan/setup/templates/preinitializer.rb
|
108
|
+
- lib/generators/ixtlan/setup/templates/initializer.rb
|
109
|
+
- lib/generators/ixtlan/setup/templates/gitignore
|
110
|
+
- lib/generators/ixtlan/setup/templates/stale.html.erb
|
111
|
+
- lib/generators/ixtlan/setup/templates/production.yml.example
|
112
|
+
- lib/generators/ixtlan/configuration_model/configuration_model_generator.rb
|
113
|
+
- lib/ixtlan/railtie.rb
|
114
|
+
has_rdoc: true
|
115
|
+
homepage: http://github.com/mkristian/ixtlan-generators
|
116
|
+
licenses:
|
117
|
+
- MIT-LICENSE
|
118
|
+
post_install_message:
|
119
|
+
rdoc_options: []
|
120
|
+
|
121
|
+
require_paths:
|
122
|
+
- lib
|
123
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
124
|
+
none: false
|
125
|
+
requirements:
|
126
|
+
- - ">="
|
127
|
+
- !ruby/object:Gem::Version
|
128
|
+
version: "0"
|
129
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
130
|
+
none: false
|
131
|
+
requirements:
|
132
|
+
- - ">="
|
133
|
+
- !ruby/object:Gem::Version
|
134
|
+
version: "0"
|
135
|
+
requirements: []
|
136
|
+
|
137
|
+
rubyforge_project:
|
138
|
+
rubygems_version: 1.5.1
|
139
|
+
signing_key:
|
140
|
+
specification_version: 3
|
141
|
+
summary: rails generator templates for ixtlan gems
|
142
|
+
test_files: []
|
143
|
+
|