meta_rails 0.0.1.beta1 → 0.0.1.beta2
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +1 -0
- data/lib/meta_rails/USAGE +2 -4
- data/lib/meta_rails/generator.rb +46 -46
- data/lib/meta_rails/templates/migration.erb +4 -4
- data/lib/meta_rails/templates/model.rb.erb +3 -3
- data/lib/meta_rails/version.rb +1 -1
- data/lib/meta_rails.rb +3 -7
- metadata +2 -2
data/Gemfile
CHANGED
data/lib/meta_rails/USAGE
CHANGED
data/lib/meta_rails/generator.rb
CHANGED
@@ -1,52 +1,52 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'erb'
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
File.open('./meta_rails_migration.rb', 'w') do |f|
|
23
|
-
f << "class MetaRailsMigration < ActiveRecord::Migration\n"
|
24
|
-
f << " def change\n"
|
25
|
-
f << migration.join("\n")
|
26
|
-
f << "\n end\nend"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def canonicalize_model(m)
|
33
|
-
return {
|
34
|
-
:belongs_to => Array(m['belongs_to']),
|
35
|
-
:has_many => Array(m['has_many']),
|
36
|
-
:fields => Array(m['fields']).collect { |f| canonicalize_field(f) }
|
37
|
-
}
|
3
|
+
require 'ostruct'
|
4
|
+
require 'rails/generators'
|
5
|
+
|
6
|
+
class MetaRailsGenerator < Rails::Generators::NamedBase
|
7
|
+
TEMPLATE_DIR = File.expand_path('../templates', __FILE__)
|
8
|
+
source_root TEMPLATE_DIR
|
9
|
+
|
10
|
+
argument :yml_file, :type => :string, :default => "./project.yml"
|
11
|
+
|
12
|
+
def generate_meta_rails
|
13
|
+
config = YAML.load_file(yml_file)
|
14
|
+
migration_template = ERB.new(File.read(TEMPLATE_DIR + '/migration.erb'))
|
15
|
+
migration = []
|
16
|
+
|
17
|
+
config['models'].each do |m|
|
18
|
+
@m = canonicalize_model(m)
|
19
|
+
template 'model.rb.erb', "app/models/#{@m.name.underscore}.rb"
|
20
|
+
migration << migration_template.result(binding)
|
38
21
|
end
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
return {
|
46
|
-
:type => type,
|
47
|
-
:name => name
|
48
|
-
}
|
22
|
+
|
23
|
+
File.open('./meta_rails_migration.rb', 'w') do |f|
|
24
|
+
f << "class MetaRailsMigration < ActiveRecord::Migration\n"
|
25
|
+
f << " def change\n"
|
26
|
+
f << migration.join("\n")
|
27
|
+
f << "\n end\nend"
|
49
28
|
end
|
50
|
-
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def canonicalize_model(m)
|
34
|
+
return OpenStruct.new({
|
35
|
+
:name => m['name'],
|
36
|
+
:belongs_to => Array(m['belongs_to']),
|
37
|
+
:has_many => Array(m['has_many']),
|
38
|
+
:fields => Array(m['fields']).collect { |f| canonicalize_field(f) }
|
39
|
+
})
|
40
|
+
end
|
41
|
+
|
42
|
+
def canonicalize_field(f)
|
43
|
+
splitted = f.split(/\s+/)
|
44
|
+
type = splitted.length > 1 ? splitted[0] : (f.match(/^(.*_)?id$/) ? 'integer' : 'string')
|
45
|
+
name = splitted.length > 1 ? splitted[1] : f
|
46
|
+
|
47
|
+
return OpenStruct.new({
|
48
|
+
:type => type,
|
49
|
+
:name => name
|
50
|
+
})
|
51
51
|
end
|
52
52
|
end
|
@@ -1,11 +1,11 @@
|
|
1
|
-
create_table :<%= @m
|
2
|
-
<% @m
|
1
|
+
create_table :<%= @m.name.tableize %> do |t|
|
2
|
+
<% @m.fields.each do |f| %>t.<%= f.type %> :<%= f.name %>
|
3
3
|
<% end %>
|
4
4
|
|
5
|
-
<%
|
5
|
+
<% @m.belongs_to.each do |b| %>t.references :<%= b.underscore %>
|
6
6
|
<% end %>
|
7
7
|
|
8
8
|
t.timestamps
|
9
9
|
end
|
10
|
-
<%
|
10
|
+
<% @m.belongs_to.each do |b| %>add_index :<%= @m.name.tableize %>, <%= b %>
|
11
11
|
<% end %>
|
@@ -1,6 +1,6 @@
|
|
1
|
-
class <%= @m
|
2
|
-
<% @m
|
1
|
+
class <%= @m.name.classify %> < ActiveRecord::Base
|
2
|
+
<% @m.has_many.each do |hm| %>has_many :<%= hm %>
|
3
3
|
<% end %>
|
4
|
-
<% @m
|
4
|
+
<% @m.belongs_to.each do |bt| %>belongs_to :<%= bt %>
|
5
5
|
<% end %>
|
6
6
|
end
|
data/lib/meta_rails/version.rb
CHANGED
data/lib/meta_rails.rb
CHANGED
metadata
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
name: meta_rails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
4
|
prerelease: 6
|
5
|
-
version: 0.0.1.
|
5
|
+
version: 0.0.1.beta2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Jeff Su
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date: 2011-09-
|
13
|
+
date: 2011-09-16 00:00:00 Z
|
14
14
|
dependencies: []
|
15
15
|
|
16
16
|
description: Use one YAML file to describe the scaffolding of your rails project
|