meta_rails 0.0.1.beta1 → 0.0.1.beta2
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/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
|