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 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