meta_rails 0.0.1.beta1

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/.gitignore ADDED
@@ -0,0 +1,4 @@
1
+ *.gem
2
+ .bundle
3
+ Gemfile.lock
4
+ pkg/*
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source "http://rubygems.org"
2
+
3
+ # Specify your gem's dependencies in meta_rails.gemspec
4
+ gemspec
data/Rakefile ADDED
@@ -0,0 +1 @@
1
+ require 'bundler/gem_tasks'
data/lib/meta_rails.rb ADDED
@@ -0,0 +1,7 @@
1
+ require "meta_rails/version"
2
+
3
+ module MetaRails
4
+ # Your code goes here...
5
+ end
6
+
7
+ require "meta_rails/generator"
@@ -0,0 +1,8 @@
1
+ Description:
2
+ Explain the generator
3
+
4
+ Example:
5
+ rails generate rml
6
+
7
+ This will create:
8
+ what/will/it/create
@@ -0,0 +1,52 @@
1
+ require 'yaml'
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
+ }
38
+ 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
+ }
49
+ end
50
+
51
+ end
52
+ end
@@ -0,0 +1,11 @@
1
+ create_table :<%= @m['name'].tableize %> do |t|
2
+ <% @m['fields'].each do |f| %>t.<%= f['type'] %> :<%= f['name'] %>
3
+ <% end %>
4
+
5
+ <% Array(@m['belongs_to']).each do |b| %>t.references :<%= b.underscore %>
6
+ <% end %>
7
+
8
+ t.timestamps
9
+ end
10
+ <% Array(@m['belongs_to']).each do |b| %>add_index :<%= @m['name'].tableize %>, <%= b %>
11
+ <% end %>
@@ -0,0 +1,6 @@
1
+ class <%= @m['name'].classify %> < ActiveRecord::Base
2
+ <% @m['has_many'].each do |hm| %>has_many :<%= hm %>
3
+ <% end %>
4
+ <% @m['belongs_to'].each do |bt| %>belongs_to :<%= bt %>
5
+ <% end %>
6
+ end
@@ -0,0 +1,3 @@
1
+ module MetaRails
2
+ VERSION = "0.0.1.beta1"
3
+ end
@@ -0,0 +1,20 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require "meta_rails/version"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "meta_rails"
7
+ s.version = MetaRails::VERSION
8
+ s.authors = ["Jeff Su"]
9
+ s.email = ["me@jeffsu.com"]
10
+ s.homepage = ""
11
+ s.summary = %q{Quick rails model prototyping}
12
+ s.description = %q{Use one YAML file to describe the scaffolding of your rails project}
13
+
14
+ s.rubyforge_project = "meta_rails"
15
+
16
+ s.files = `git ls-files`.split("\n")
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib"]
20
+ end
metadata ADDED
@@ -0,0 +1,64 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: meta_rails
3
+ version: !ruby/object:Gem::Version
4
+ prerelease: 6
5
+ version: 0.0.1.beta1
6
+ platform: ruby
7
+ authors:
8
+ - Jeff Su
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-09-15 00:00:00 Z
14
+ dependencies: []
15
+
16
+ description: Use one YAML file to describe the scaffolding of your rails project
17
+ email:
18
+ - me@jeffsu.com
19
+ executables: []
20
+
21
+ extensions: []
22
+
23
+ extra_rdoc_files: []
24
+
25
+ files:
26
+ - .gitignore
27
+ - Gemfile
28
+ - Rakefile
29
+ - lib/meta_rails.rb
30
+ - lib/meta_rails/USAGE
31
+ - lib/meta_rails/generator.rb
32
+ - lib/meta_rails/templates/migration.erb
33
+ - lib/meta_rails/templates/model.rb.erb
34
+ - lib/meta_rails/version.rb
35
+ - meta_rails.gemspec
36
+ homepage: ""
37
+ licenses: []
38
+
39
+ post_install_message:
40
+ rdoc_options: []
41
+
42
+ require_paths:
43
+ - lib
44
+ required_ruby_version: !ruby/object:Gem::Requirement
45
+ none: false
46
+ requirements:
47
+ - - ">="
48
+ - !ruby/object:Gem::Version
49
+ version: "0"
50
+ required_rubygems_version: !ruby/object:Gem::Requirement
51
+ none: false
52
+ requirements:
53
+ - - ">"
54
+ - !ruby/object:Gem::Version
55
+ version: 1.3.1
56
+ requirements: []
57
+
58
+ rubyforge_project: meta_rails
59
+ rubygems_version: 1.8.9
60
+ signing_key:
61
+ specification_version: 3
62
+ summary: Quick rails model prototyping
63
+ test_files: []
64
+