table_generator 0.1.1 → 0.1.2
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/table/table_generator.rb +50 -29
- metadata +2 -2
data/table/table_generator.rb
CHANGED
@@ -1,32 +1,43 @@
|
|
1
1
|
class TableColumn
|
2
|
-
attr_writer :name, :type, :
|
3
|
-
attr_reader :name, :type, :
|
4
|
-
@@types =
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
if (type != nil) : self.type=type end
|
12
|
-
if (typeSize !=nil) : self.typeSize=typeSize end
|
2
|
+
attr_writer :name, :type, :type_size
|
3
|
+
attr_reader :name, :type, :type_size
|
4
|
+
@@types = ActiveRecord::Base.connection.native_database_types
|
5
|
+
@@types.delete :primary_key
|
6
|
+
@@type_keys = @@types.keys
|
7
|
+
def initialize(name, type, type_size )
|
8
|
+
self.name=name
|
9
|
+
self.type=type
|
10
|
+
self.type_size=type_size
|
13
11
|
end
|
14
12
|
|
15
13
|
def type=(t)
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
14
|
+
return @type = @@types[:string][:name] if t.nil?
|
15
|
+
t = t.downcase
|
16
|
+
return @type = @@types[t.to_sym][:name] unless @@types[t.to_sym].nil?
|
17
|
+
@@type_keys.each { |type|
|
18
|
+
return @type = @@types[type][:name] if @@types[type][:name] == t
|
19
|
+
#hold a match on the first character if onne of the above doen't connect.
|
20
|
+
@type=@@types[type][:name] if(@type.nil? && @@types[type][:name][0]==t[0])
|
21
|
+
}
|
22
|
+
return @type || @type = @@types[:string][:name]
|
23
|
+
end
|
24
|
+
|
25
|
+
def type_size=(ts)
|
26
|
+
return nil unless (self.type==@@types[:integer][:name] ||
|
27
|
+
self.type==@@types[:string][:name])
|
28
|
+
return @type_size = ts unless ts.nil?
|
29
|
+
@@type_keys.each { |type|
|
30
|
+
t = @@types[type][:limit].to_s if type == @type
|
31
|
+
t = @@types[type][:limit].to_s if @@types[type][:name]==@type
|
32
|
+
return @type_size = t unless t.nil?
|
33
|
+
}
|
34
|
+
return '50'
|
26
35
|
end
|
36
|
+
|
37
|
+
|
27
38
|
def to_s
|
28
39
|
sql = '`'+name+'` '+type
|
29
|
-
sql << '('+
|
40
|
+
sql << '('+type_size+')' if(type=='int' || type=='varchar')
|
30
41
|
sql
|
31
42
|
end
|
32
43
|
end
|
@@ -43,10 +54,10 @@ class TableGenerator < Rails::Generator::NamedBase
|
|
43
54
|
type = arr[1] if arr.length>1
|
44
55
|
length = arr[2] if arr.length>2
|
45
56
|
@columns.push TableColumn.new(name, type, length)
|
46
|
-
}
|
47
|
-
end
|
57
|
+
}
|
48
58
|
|
49
|
-
|
59
|
+
end
|
60
|
+
# Removed directory logic.
|
50
61
|
# way easier to append namespace at the begining of the tablename.
|
51
62
|
def manifest
|
52
63
|
record do |m|
|
@@ -62,11 +73,12 @@ class TableGenerator < Rails::Generator::NamedBase
|
|
62
73
|
tablename = class_path.last + '_' + tablename
|
63
74
|
end
|
64
75
|
|
65
|
-
|
76
|
+
|
66
77
|
|
67
78
|
if options[:command] == :destroy
|
68
|
-
|
79
|
+
dropSql(tablename)
|
69
80
|
else
|
81
|
+
sql = createSql(tablename)
|
70
82
|
# need #{RAILS_ROOT} here for running from FastCGI
|
71
83
|
tableSqlFileName = File.join("#{RAILS_ROOT}",'db',"#{tablename}.sql")
|
72
84
|
sqlFile = File.open(tableSqlFileName,'w')
|
@@ -78,7 +90,8 @@ class TableGenerator < Rails::Generator::NamedBase
|
|
78
90
|
end
|
79
91
|
logger.debug(class_path.last)
|
80
92
|
end
|
81
|
-
ActiveRecord::Base.connection.execute(sql)
|
93
|
+
# ActiveRecord::Base.connection.execute(sql)
|
94
|
+
|
82
95
|
options[:generator] = 'scaffold'
|
83
96
|
# name is passed twice to enforce singular controller names.
|
84
97
|
logger.debug(name)
|
@@ -91,13 +104,21 @@ class TableGenerator < Rails::Generator::NamedBase
|
|
91
104
|
private
|
92
105
|
|
93
106
|
def createSql(name)
|
107
|
+
ActiveRecord::Base.connection.create_table(name)do |t|
|
108
|
+
@columns.each do |col|
|
109
|
+
col_type = col.type
|
110
|
+
# had to append here since t.column seems to ignore the :limit param
|
111
|
+
col_type = col.type + "(#{col.type_size})" unless col.type_size.nil?
|
112
|
+
t.column col.name, col_type
|
113
|
+
end
|
114
|
+
end
|
94
115
|
'CREATE TABLE `'+name+'` ('+
|
95
116
|
'`id` int(10) unsigned zerofill NOT NULL auto_increment,'+
|
96
117
|
@columns.join(", ") +', PRIMARY KEY (`id`) )'
|
97
118
|
end
|
98
119
|
|
99
120
|
def dropSql(name)
|
100
|
-
|
121
|
+
ActiveRecord::Base.connection.drop_table(name)
|
101
122
|
end
|
102
123
|
|
103
124
|
|