active_workbench 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,3 @@
1
+ nbproject/*
2
+ *.gem
3
+ Gemfile.lock
data/History ADDED
File without changes
data/LICENSE ADDED
@@ -0,0 +1,3 @@
1
+ == activebench
2
+
3
+ Put appropriate LICENSE for your project here.
@@ -0,0 +1,148 @@
1
+ = Active Workbench
2
+
3
+ This gem generates ActiveRecord Model files from a MySQL Workbench .mwb file.
4
+ ActiveRecord's associations will be added to models by analyzing foreign keys in MySQL Workbench EER Model.
5
+
6
+ == Install
7
+
8
+ * git clone git@github.com:woolf/active_workbench.git
9
+ * cd active_workbench
10
+ * gem build active_workbench.gemspec
11
+ * gem install the gem that was built
12
+
13
+ == Usage
14
+
15
+ Usage: amwbench [options] path_to_file.mwb
16
+ -c, --create PATH Create ActiveRecord classes in provided directory. Warning! files with same name will be overwriten.
17
+ -v, --verbose Run verbosely
18
+ -?, --help Show this help
19
+
20
+ If you do not specify -c option, then results output will shown in console.
21
+
22
+
23
+ == Sample
24
+
25
+ Sample output for Sakila example database which you can download here http://dev.mysql.com/doc/index-other.html
26
+ Or use file provided it this gem in test folder.
27
+
28
+ * cd active_workbench
29
+ * amwbench test/sakila.mwb
30
+
31
+ class Rental < ActiveRecord::Base
32
+ set_table_name("rental")
33
+ has_many :payments, :class_name => "Payment", :primary_key = "rental_id"
34
+ belongs_to :staff, :class_name => "Staff", :primary_key = "staff_id"
35
+ belongs_to :customer, :class_name => "Customer", :primary_key = "customer_id"
36
+ belongs_to :inventory, :class_name => "Inventory", :primary_key = "inventory_id"
37
+ end
38
+
39
+ class FilmActor < ActiveRecord::Base
40
+ set_table_name("film_actor")
41
+ belongs_to :actor, :class_name => "Actor", :primary_key = "actor_id"
42
+ belongs_to :film, :class_name => "Film", :primary_key = "film_id"
43
+ end
44
+
45
+ class Actor < ActiveRecord::Base
46
+ set_table_name("actor")
47
+ has_many :film_actors, :class_name => "FilmActor", :primary_key = "actor_id"
48
+ end
49
+
50
+ class City < ActiveRecord::Base
51
+ set_table_name("city")
52
+ belongs_to :country, :class_name => "Country", :primary_key = "country_id"
53
+ has_many :addres, :class_name => "Addres", :primary_key = "city_id"
54
+ end
55
+
56
+ class Addres < ActiveRecord::Base
57
+ set_table_name("address")
58
+ has_many :customers, :class_name => "Customer", :foreign_key => "address_id", :primary_key = "address_id"
59
+ belongs_to :city, :class_name => "City", :primary_key = "city_id"
60
+ has_many :staffs, :class_name => "Staff", :foreign_key => "address_id", :primary_key = "address_id"
61
+ has_many :stores, :class_name => "Store", :foreign_key => "address_id", :primary_key = "address_id"
62
+ end
63
+
64
+ class Inventory < ActiveRecord::Base
65
+ set_table_name("inventory")
66
+ belongs_to :film, :class_name => "Film", :primary_key = "film_id"
67
+ has_many :film_texts, :class_name => "FilmText", :foreign_key => "film_id", :primary_key = "film_id"
68
+ belongs_to :store, :class_name => "Store", :primary_key = "store_id"
69
+ has_many :rentals, :class_name => "Rental", :primary_key = "inventory_id"
70
+ end
71
+
72
+ class Category < ActiveRecord::Base
73
+ set_table_name("category")
74
+ has_many :film_categories, :class_name => "FilmCategory", :primary_key = "category_id"
75
+ end
76
+
77
+ class Customer < ActiveRecord::Base
78
+ set_table_name("customer")
79
+ has_many :payments, :class_name => "Payment", :primary_key = "customer_id"
80
+ belongs_to :addre, :class_name => "Addres", :foreign_key => "address_id", :primary_key = "address_id"
81
+ belongs_to :store, :class_name => "Store", :primary_key = "store_id"
82
+ has_many :rentals, :class_name => "Rental", :primary_key = "customer_id"
83
+ end
84
+
85
+ class FilmCategory < ActiveRecord::Base
86
+ set_table_name("film_category")
87
+ belongs_to :film, :class_name => "Film", :primary_key = "film_id"
88
+ belongs_to :category, :class_name => "Category", :primary_key = "category_id"
89
+ end
90
+
91
+ class Film < ActiveRecord::Base
92
+ set_table_name("film")
93
+ has_many :inventories, :class_name => "Inventory", :primary_key = "film_id"
94
+ belongs_to :language, :class_name => "Language", :foreign_key => "original_language_id", :primary_key = "language_id"
95
+ has_many :film_categories, :class_name => "FilmCategory", :primary_key = "film_id"
96
+ has_many :film_actors, :class_name => "FilmActor", :primary_key = "film_id"
97
+ belongs_to :language, :class_name => "Language", :primary_key = "language_id"
98
+ end
99
+
100
+ class Staff < ActiveRecord::Base
101
+ set_table_name("staff")
102
+ has_many :stores, :class_name => "Store", :foreign_key => "manager_staff_id", :primary_key = "manager_staff_id"
103
+ has_many :rentals, :class_name => "Rental", :primary_key = "staff_id"
104
+ belongs_to :store, :class_name => "Store", :primary_key = "store_id"
105
+ has_many :payments, :class_name => "Payment", :primary_key = "staff_id"
106
+ belongs_to :addre, :class_name => "Addres", :foreign_key => "address_id", :primary_key = "address_id"
107
+ end
108
+
109
+ class Store < ActiveRecord::Base
110
+ set_table_name("store")
111
+ belongs_to :staff, :class_name => "Staff", :foreign_key => "manager_staff_id", :primary_key = "staff_id"
112
+ has_many :customers, :class_name => "Customer", :primary_key = "store_id"
113
+ has_many :staffs, :class_name => "Staff", :primary_key = "store_id"
114
+ has_many :inventories, :class_name => "Inventory", :primary_key = "store_id"
115
+ belongs_to :addre, :class_name => "Addres", :foreign_key => "address_id", :primary_key = "address_id"
116
+ end
117
+
118
+ class Payment < ActiveRecord::Base
119
+ set_table_name("payment")
120
+ belongs_to :rental, :class_name => "Rental", :primary_key = "rental_id"
121
+ belongs_to :customer, :class_name => "Customer", :primary_key = "customer_id"
122
+ belongs_to :staff, :class_name => "Staff", :primary_key = "staff_id"
123
+ end
124
+
125
+ class Language < ActiveRecord::Base
126
+ set_table_name("language")
127
+ has_many :films, :class_name => "Film", :foreign_key => "original_language_id", :primary_key = "original_language_id"
128
+ has_many :films, :class_name => "Film", :primary_key = "language_id"
129
+ end
130
+
131
+ class FilmText < ActiveRecord::Base
132
+ set_table_name("film_text")
133
+ belongs_to :inventory, :class_name => "Inventory", :foreign_key => "film_id", :primary_key = "film_id"
134
+ end
135
+
136
+ class Country < ActiveRecord::Base
137
+ set_table_name("country")
138
+ has_many :cities, :class_name => "City", :primary_key = "country_id"
139
+ end
140
+
141
+ == Issues
142
+
143
+ * active_workbench does not generate valid PK for ActiveRecord model if primary key differs from <tt>id</tt>
144
+
145
+ == Copyright
146
+
147
+ Copyright (c) 2011 Sergiy Volkov sv@mooby.org
148
+
@@ -0,0 +1,40 @@
1
+ require 'rubygems'
2
+ require 'rake'
3
+ require 'rake/clean'
4
+ require 'rake/gempackagetask'
5
+ require 'rake/rdoctask'
6
+ require 'rake/testtask'
7
+
8
+ spec = Gem::Specification.new do |s|
9
+ s.name = 'activebench'
10
+ s.version = '0.0.1'
11
+ s.has_rdoc = true
12
+ s.extra_rdoc_files = ['README', 'LICENSE']
13
+ s.summary = 'Gem generates ActiveRecord Model files from a MySQL Workbench .mwb file.'
14
+ s.description = s.summary
15
+ s.author = ''
16
+ s.email = ''
17
+ # s.executables = ['your_executable_here']
18
+ s.files = %w(LICENSE README.rdoc Rakefile) + Dir.glob("{bin,lib,test}/**/*")
19
+ s.require_path = "lib"
20
+ s.bindir = "bin"
21
+ end
22
+
23
+ Rake::GemPackageTask.new(spec) do |p|
24
+ p.gem_spec = spec
25
+ p.need_tar = true
26
+ p.need_zip = true
27
+ end
28
+
29
+ Rake::RDocTask.new do |rdoc|
30
+ files =['README.rdoc', 'LICENSE', 'lib/**/*.rb']
31
+ rdoc.rdoc_files.add(files)
32
+ rdoc.main = "README.rdoc" # page to start on
33
+ rdoc.title = "active_workbench Docs"
34
+ rdoc.rdoc_dir = 'doc/rdoc' # rdoc output folder
35
+ rdoc.options << '--line-numbers'
36
+ end
37
+
38
+ Rake::TestTask.new do |t|
39
+ t.test_files = FileList['test/**/*.rb']
40
+ end
@@ -0,0 +1,59 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run the gemspec command
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{active_workbench}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = ["Sergiy Volkov"]
12
+ s.date = %q{2010-01-18}
13
+ s.email = %q{sv@mooby.org}
14
+ s.extra_rdoc_files = [
15
+ "LICENSE",
16
+ "README.rdoc"
17
+ ]
18
+ s.files = [
19
+ ".gitignore",
20
+ "History",
21
+ "LICENSE",
22
+ "README.rdoc",
23
+ "Rakefile",
24
+ "active_workbench.gemspec",
25
+ "lib/active_workbench/base.rb",
26
+ "lib/active_workbench.rb",
27
+ ]
28
+ s.executables = ["amwbench"]
29
+ s.default_executable = "amwbench"
30
+ s.homepage = %q{https://github.com/woolf/active_workbench}
31
+ s.rdoc_options = ["--charset=UTF-8"]
32
+ s.require_paths = ["lib"]
33
+ s.rubyforge_project = %q{active_workbench}
34
+ s.rubygems_version = %q{0.0.1}
35
+ s.summary = %q{This gem generates ActiveRecord Model files from a MySQL Workbench .mwb file}
36
+ s.description = %q{Active Workbench gem generates ActiveRecord Model files from a MySQL Workbench .mwb file. ActiveRecord’s associations will be added to models by analyzing foreign keys in MySQL Workbench EER Model.}
37
+ s.test_files = [
38
+ ]
39
+
40
+ if s.respond_to? :specification_version then
41
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
42
+ s.specification_version = 3
43
+
44
+ if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
45
+ s.add_dependency(%q<nokogiri>, ["> 1.2.3"])
46
+ s.add_dependency(%q<activesupport>, ["> 2.3.5"])
47
+ s.add_dependency(%q<rubyzip2>, ["> 2.0.0"])
48
+ else
49
+ s.add_dependency(%q<nokogiri>, ["> 1.2.3"])
50
+ s.add_dependency(%q<activesupport>, ["> 2.3.5"])
51
+ s.add_dependency(%q<rubyzip2>, ["> 2.0.0"])
52
+ end
53
+ else
54
+ s.add_dependency(%q<nokogiri>, ["> 1.2.3"])
55
+ s.add_dependency(%q<activesupport>, ["> 2.3.5"])
56
+ s.add_dependency(%q<rubyzip2>, ["> 2.0.0"])
57
+ end
58
+ end
59
+
@@ -0,0 +1,62 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'optparse'
4
+ require 'fileutils'
5
+
6
+ begin
7
+ require 'active_workbench'
8
+ rescue LoadError
9
+ $stderr.puts <<-EOS
10
+ #{'*'*50}
11
+ Could not find 'active_workbench'
12
+ #{'*'*50}
13
+ EOS
14
+ exit(1)
15
+ end
16
+
17
+ options = {}
18
+ OptionParser.new do |opts|
19
+ opts.banner = "Usage: amwbench [options] path_to_file.mwb"
20
+
21
+ opts.on("-c", "--create PATH", "Create ActiveRecord classes in provided directory. Warning! files with same name will be overwriten.") do |c|
22
+ options[:create] = c
23
+ end
24
+ opts.on("-v", "--verbose", "Run verbosely") do |v|
25
+ options[:verbose] = v
26
+ end
27
+ opts.on("-?", "--help", "Show this help") do |v|
28
+ puts opts
29
+ exit
30
+ end
31
+ end.parse!
32
+
33
+ if ARGV.size < 1
34
+ $stderr.puts "No MySQL Workbench file specified"
35
+ exit 1
36
+ end
37
+
38
+ if options[:create]
39
+ begin
40
+ unless File.directory?(options[:create])
41
+ FileUtils.mkdir_p options[:create]
42
+ end
43
+ unless File.directory?(options[:create])
44
+ $stderr.puts "Could not create output directory - #{options[:create]}."
45
+ exit 1
46
+ end
47
+ rescue Errno::EACCES
48
+ $stderr.puts "Could not create output directory. #{$!.message}"
49
+ exit 1
50
+ end
51
+ end
52
+
53
+ begin
54
+ z = Zip::ZipFile.open(ARGV.first)
55
+ ActiveWorkbench::Runner.new(z.read("document.mwb.xml"), options).run
56
+ rescue Errno::ENOENT
57
+ $stderr.puts "MySQL Workbench file could not be parsed"
58
+ exit 1
59
+ rescue Zip::ZipError
60
+ $stderr.puts $!.message
61
+ exit 1
62
+ end
@@ -0,0 +1,80 @@
1
+ require "active_workbench/base"
2
+
3
+ module ActiveWorkbench
4
+ class Runner
5
+ def initialize file, options
6
+ @options = options
7
+ @doc = Nokogiri::XML(file)
8
+ @schema = Schema.new
9
+ end
10
+
11
+ def run
12
+ xml_tables = @doc.xpath("/data//value[@type='list'][@content-struct-name='db.mysql.Table'][@key='tables']/value[@type='object'][@struct-name='db.mysql.Table']")
13
+ xml_tables.each do |table|
14
+ table_id = table.attributes["id"].to_s
15
+ table_name = table.xpath("value[@type='string'][@key='name']").first.content.to_s
16
+ schema_table = @schema.add_table(table_id, table_name)
17
+ if @options[:verbose]
18
+ puts "Found table: #{schema_table.name}" # + "\t" + schema_table.id
19
+ end
20
+
21
+ table.xpath("value[@type='list'][@content-type='object'][@content-struct-name='db.mysql.Column'][@key='columns']").each do |columns|
22
+ columns.xpath("value[@type='object'][@struct-name='db.mysql.Column']").each do |column|
23
+ col = schema_table.add_column(column.attributes["id"].to_s, column.xpath("value[@type='string'][@key='name']").first.content.to_s)
24
+ if @options[:verbose]
25
+ puts "\t column: " + col.name # + "\t" + col.id
26
+ end
27
+ end
28
+ end
29
+ end
30
+
31
+ xml_tables.each do |table|
32
+ schema_table = @schema.table_by_id(table.attributes["id"].to_s)
33
+
34
+ table.xpath("value[@type='list'][@content-type='object'][@content-struct-name='db.mysql.ForeignKey'][@key='foreignKeys']/value[@type='object'][@struct-name='db.mysql.ForeignKey']").each do |fk|
35
+ ref_table = @schema.table_by_id(fk.xpath("link[@type='object'][@struct-name='db.mysql.Table'][@key='referencedTable']").first.content.to_s)
36
+
37
+ many = fk.xpath("value[@type='int'][@key='many']").first.content.to_i == 1 ? true : false
38
+
39
+ delete_rule = fk.xpath("value[@type='string'][@key='deleteRule']").first.content.to_s
40
+ update_rule = fk.xpath("value[@type='string'][@key='updateRule']").first.content.to_s
41
+
42
+ # belongs_to associations
43
+ schema_fk = schema_table.add_fk(fk.attributes["id"].to_s, fk.xpath("value[@type='string'][@key='name']").first.content.to_s, :many => many, :assoc => :belongs)
44
+ schema_fk.ref_table = ref_table
45
+
46
+ # has_one, has_many associations
47
+ ref_fk = ref_table.add_fk(fk.attributes["id"].to_s, fk.xpath("value[@type='string'][@key='name']").first.content.to_s, :many => many, :assoc => :has)
48
+ ref_fk.ref_table = schema_table
49
+
50
+ fk.xpath("value[@type='list'][@content-type='object'][@content-struct-name='db.Column'][@key='columns']/link[@type='object']").each do |col|
51
+ c = schema_table.column_by_id(col.content.to_s)
52
+ schema_fk.add_column(c)
53
+ ref_fk.add_ref_column(c)
54
+ end
55
+
56
+ fk.xpath("value[@type='list'][@content-type='object'][@content-struct-name='db.Column'][@key='referencedColumns']/link[@type='object']").each do |ref_col|
57
+ c = ref_table.column_by_id(ref_col.content.to_s)
58
+ schema_fk.add_ref_column(c)
59
+ ref_fk.add_column(c)
60
+ end
61
+ end
62
+ end
63
+ if @options[:create]
64
+ @schema.tables.each do |table|
65
+ f = File.new(File.join(@options[:create], table.name.classify.tableize.singularize + ".rb"), File::CREAT|File::TRUNC|File::RDWR)
66
+ f.write table.to_model
67
+ f.close
68
+ puts "Write: " + File.join(@options[:create], table.name.classify.tableize.singularize + ".rb")
69
+ end
70
+ else
71
+ @schema.tables.each do |table|
72
+ puts table.to_model
73
+ puts
74
+ end
75
+ end
76
+ end
77
+ end
78
+ end
79
+
80
+
@@ -0,0 +1,183 @@
1
+ require "rubygems"
2
+ require "nokogiri"
3
+ require 'active_support'
4
+ require 'active_support/inflector'
5
+ require 'zip/zip'
6
+ require 'optparse'
7
+
8
+ module ActiveWorkbench
9
+ class Schema
10
+ def add_table id, name
11
+ @tables_ids ||= {}
12
+ @tables_names ||= {}
13
+ @tables_ids[id] = @tables_names[name] = Table.new(self, id, name)
14
+ end
15
+
16
+ def tables
17
+ @tables_ids.values
18
+ end
19
+
20
+ def table_by_id id
21
+ @tables_ids[id]
22
+ end
23
+
24
+ def table_by_name name
25
+ @tables_names[name]
26
+ end
27
+
28
+ def generate
29
+
30
+ end
31
+ end
32
+
33
+ class Table
34
+ attr_reader :name, :id
35
+
36
+ def initialize schema, id, name
37
+ @schema = schema
38
+ @id = id
39
+ @name = name
40
+ @columns_ids ||= {}
41
+ @columns_names ||= {}
42
+ @fks_ids ||= {}
43
+ @fks_names ||= {}
44
+ end
45
+
46
+ def add_fk id, name, *opts
47
+ opts = *opts
48
+ @fks_ids[id] = @fks_names[name] = FK.new(self, id, name, opts[:many], opts[:assoc])
49
+ end
50
+
51
+ def fks
52
+ @fks_ids.values
53
+ end
54
+
55
+ def add_column id, name
56
+ @columns_ids[id] = @columns_names[name] = Column.new(self, id, name)
57
+ end
58
+
59
+ def columns
60
+ @columns_ids.values
61
+ end
62
+
63
+ def column_by_name name
64
+ @columns_names[name]
65
+ end
66
+
67
+ def column_by_id name
68
+ @columns_ids[name]
69
+ end
70
+
71
+ def plural?
72
+ @name == class_name.tableize
73
+ end
74
+
75
+ def class_name
76
+ @name.classify
77
+ end
78
+
79
+ def to_model
80
+ set_table_name = ""
81
+ unless plural?
82
+ # need to set table name with set_table_name()
83
+ set_table_name = "\n set_table_name(\"#{@name}\")"
84
+ end
85
+ associations = ""
86
+ fks.each do |fk|
87
+ associations << fk.to_assotiation
88
+ end
89
+
90
+ "class #{class_name} < ActiveRecord::Base#{set_table_name}#{associations}\nend"
91
+ end
92
+ end
93
+
94
+ class Column
95
+ attr_reader :name, :id, :table
96
+
97
+ def initialize table, id, name
98
+ @table = table
99
+ @id = id
100
+ @name = name
101
+ end
102
+ end
103
+
104
+ class FK
105
+ attr_reader :name, :id
106
+ attr_accessor :ref_table
107
+
108
+ def initialize table, id, name, many = false, assoc = :belongs
109
+ @table = table
110
+ @id = id
111
+ @name = name
112
+ @many = many
113
+ @assoc = assoc
114
+ end
115
+
116
+ def is_many?
117
+ @many == true
118
+ end
119
+
120
+ def columns
121
+ @columns
122
+ end
123
+
124
+ def ref_columns
125
+ @ref_columns
126
+ end
127
+
128
+ def add_column(col)
129
+ @columns ||= []
130
+ @columns << col
131
+ end
132
+
133
+ def add_ref_column(col)
134
+ @ref_columns ||= []
135
+ @ref_columns << col
136
+ end
137
+
138
+ def to_assotiation
139
+ # belongs_to assotiation
140
+ if @assoc == :belongs
141
+ pkey = ""
142
+ if @ref_columns.size > 1
143
+ else
144
+ #@ref_columns.collect { |col| "#{col.table.name}.#{col.name}
145
+
146
+ if @ref_columns.first.name != 'id'
147
+ pkey = ", :primary_key = \"#{@ref_columns.first.name}\""
148
+ end
149
+ end
150
+
151
+ fkey = ""
152
+ if @columns.size > 1
153
+ else
154
+ #@ref_columns.collect { |col| "#{col.table.name}.#{col.name}
155
+ if @columns.first.name != ref_table.class_name.tableize.singularize.foreign_key
156
+ fkey = ", :foreign_key => \"#{@columns.first.name}\""
157
+ end
158
+ end
159
+ "\n belongs_to :#{ref_table.class_name.tableize.singularize}#{ref_table.plural? ? "" : ", :class_name => \"#{ref_table.class_name}\""}#{fkey}#{pkey}" # :#{@columns.collect { |col| "#{col.table.name}.#{col.name}" }} >> :#{@ref_columns.collect { |col| "#{col.table.name}.#{col.name}" }}"
160
+ else
161
+
162
+ pkey = ""
163
+ if @columns.size > 1
164
+ else
165
+ #@ref_columns.collect { |col| "#{col.table.name}.#{col.name}
166
+ if @columns.first.name != 'id'
167
+ pkey = ", :primary_key = \"#{@ref_columns.first.name}\""
168
+ end
169
+ end
170
+
171
+ fkey = ""
172
+ if @ref_columns.size > 1
173
+ else
174
+ if @ref_columns.first.name != @table.class_name.tableize.singularize.foreign_key
175
+ fkey = ", :foreign_key => \"#{@ref_columns.first.name}\""
176
+ end
177
+ end
178
+
179
+ "\n #{@many ? "has_many :" + ref_table.class_name.tableize : "has_one :" + ref_table.class_name.tableize.singularize}#{ref_table.plural? ? "" : ", :class_name => \"#{ref_table.class_name}\""}#{fkey}#{pkey}" # :#{@columns.collect { |col| "#{col.table.name}.#{col.name}" }} >> :#{@ref_columns.collect { |col| "#{col.table.name}.#{col.name}" }}"
180
+ end
181
+ end
182
+ end
183
+ end
metadata ADDED
@@ -0,0 +1,123 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: active_workbench
3
+ version: !ruby/object:Gem::Version
4
+ hash: 29
5
+ prerelease:
6
+ segments:
7
+ - 0
8
+ - 0
9
+ - 1
10
+ version: 0.0.1
11
+ platform: ruby
12
+ authors:
13
+ - Sergiy Volkov
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+
18
+ date: 2010-01-18 00:00:00 +02:00
19
+ default_executable: amwbench
20
+ dependencies:
21
+ - !ruby/object:Gem::Dependency
22
+ name: nokogiri
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ">"
28
+ - !ruby/object:Gem::Version
29
+ hash: 25
30
+ segments:
31
+ - 1
32
+ - 2
33
+ - 3
34
+ version: 1.2.3
35
+ type: :runtime
36
+ version_requirements: *id001
37
+ - !ruby/object:Gem::Dependency
38
+ name: activesupport
39
+ prerelease: false
40
+ requirement: &id002 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">"
44
+ - !ruby/object:Gem::Version
45
+ hash: 9
46
+ segments:
47
+ - 2
48
+ - 3
49
+ - 5
50
+ version: 2.3.5
51
+ type: :runtime
52
+ version_requirements: *id002
53
+ - !ruby/object:Gem::Dependency
54
+ name: rubyzip2
55
+ prerelease: false
56
+ requirement: &id003 !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ">"
60
+ - !ruby/object:Gem::Version
61
+ hash: 15
62
+ segments:
63
+ - 2
64
+ - 0
65
+ - 0
66
+ version: 2.0.0
67
+ type: :runtime
68
+ version_requirements: *id003
69
+ description: "Active Workbench gem generates ActiveRecord Model files from a MySQL Workbench .mwb file. ActiveRecord\xE2\x80\x99s associations will be added to models by analyzing foreign keys in MySQL Workbench EER Model."
70
+ email: sv@mooby.org
71
+ executables:
72
+ - amwbench
73
+ extensions: []
74
+
75
+ extra_rdoc_files:
76
+ - LICENSE
77
+ - README.rdoc
78
+ files:
79
+ - .gitignore
80
+ - History
81
+ - LICENSE
82
+ - README.rdoc
83
+ - Rakefile
84
+ - active_workbench.gemspec
85
+ - lib/active_workbench/base.rb
86
+ - lib/active_workbench.rb
87
+ - bin/amwbench
88
+ has_rdoc: true
89
+ homepage: https://github.com/woolf/active_workbench
90
+ licenses: []
91
+
92
+ post_install_message:
93
+ rdoc_options:
94
+ - --charset=UTF-8
95
+ require_paths:
96
+ - lib
97
+ required_ruby_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ hash: 3
103
+ segments:
104
+ - 0
105
+ version: "0"
106
+ required_rubygems_version: !ruby/object:Gem::Requirement
107
+ none: false
108
+ requirements:
109
+ - - ">="
110
+ - !ruby/object:Gem::Version
111
+ hash: 3
112
+ segments:
113
+ - 0
114
+ version: "0"
115
+ requirements: []
116
+
117
+ rubyforge_project: active_workbench
118
+ rubygems_version: 1.4.1
119
+ signing_key:
120
+ specification_version: 3
121
+ summary: This gem generates ActiveRecord Model files from a MySQL Workbench .mwb file
122
+ test_files: []
123
+