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 CHANGED
@@ -1,4 +1,5 @@
1
1
  source "http://rubygems.org"
2
2
 
3
+ gem 'rails', '>= 3.1.0'
3
4
  # Specify your gem's dependencies in meta_rails.gemspec
4
5
  gemspec
data/lib/meta_rails/USAGE CHANGED
@@ -1,8 +1,6 @@
1
1
  Description:
2
- Explain the generator
2
+ Generates models, controllers, views, migrations from yaml
3
3
 
4
4
  Example:
5
- rails generate rml
5
+ rails generate meta_rails ./project.yml
6
6
 
7
- This will create:
8
- what/will/it/create
@@ -1,52 +1,52 @@
1
1
  require 'yaml'
2
2
  require 'erb'
3
-
4
- module MetaRails
5
- class Generator < Rails::Generators::NamedBase
6
- TEMPLATE_DIR = File.expand_path('../templates', __FILE__)
7
- source_root TEMPLATE_DIR
8
-
9
- argument :yml_file, :type => :string, :default => "./project.yml"
10
-
11
- def generate_rml
12
- config = YAML.load_file(yml_file)
13
- migration_template = ERB.new(File.read(TEMPLATE_DIR + '/migration.erb'))
14
- migration = []
15
-
16
- config['models'].each do |m|
17
- @m = canonicalize_model(m)
18
- template 'model.rb.erb', "app/models/#{@m['name'].underscore}.rb"
19
- migration << migration_template.result(binding)
20
- end
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
- def canonicalize_field(f)
41
- splitted = f.split(/\s+/)
42
- type = splitted.length > 1 ? splitted[0] : (f.match(/^(.*_)?id$/) ? 'integer' : 'string')
43
- name = splitted.length > 1 ? splitted[1] : f
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['name'].tableize %> do |t|
2
- <% @m['fields'].each do |f| %>t.<%= f['type'] %> :<%= f['name'] %>
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
- <% Array(@m['belongs_to']).each do |b| %>t.references :<%= b.underscore %>
5
+ <% @m.belongs_to.each do |b| %>t.references :<%= b.underscore %>
6
6
  <% end %>
7
7
 
8
8
  t.timestamps
9
9
  end
10
- <% Array(@m['belongs_to']).each do |b| %>add_index :<%= @m['name'].tableize %>, <%= b %>
10
+ <% @m.belongs_to.each do |b| %>add_index :<%= @m.name.tableize %>, <%= b %>
11
11
  <% end %>
@@ -1,6 +1,6 @@
1
- class <%= @m['name'].classify %> < ActiveRecord::Base
2
- <% @m['has_many'].each do |hm| %>has_many :<%= hm %>
1
+ class <%= @m.name.classify %> < ActiveRecord::Base
2
+ <% @m.has_many.each do |hm| %>has_many :<%= hm %>
3
3
  <% end %>
4
- <% @m['belongs_to'].each do |bt| %>belongs_to :<%= bt %>
4
+ <% @m.belongs_to.each do |bt| %>belongs_to :<%= bt %>
5
5
  <% end %>
6
6
  end
@@ -1,3 +1,3 @@
1
1
  module MetaRails
2
- VERSION = "0.0.1.beta1"
2
+ VERSION = "0.0.1.beta2"
3
3
  end
data/lib/meta_rails.rb CHANGED
@@ -1,7 +1,3 @@
1
- require "meta_rails/version"
2
-
3
- module MetaRails
4
- # Your code goes here...
5
- end
6
-
7
- require "meta_rails/generator"
1
+ META_RAILS_DIR = File.expand_path('../meta_rails', __FILE__)
2
+ require META_RAILS_DIR + '/version'
3
+ require META_RAILS_DIR + '/generator'
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.beta1
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-15 00:00:00 Z
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