godfat-dm-mapping 0.7.0 → 0.7.1
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/CHANGES +8 -0
- data/README +1 -1
- data/Rakefile +2 -1
- data/dm-mapping.gemspec +9 -6
- data/lib/dm-mapping/adapters/abstract_adapter.rb +106 -102
- data/lib/dm-mapping/adapters/mysql_adapter.rb +56 -52
- data/lib/dm-mapping/adapters/postgres_adapter.rb +58 -54
- data/lib/dm-mapping/adapters/sqlite3_adapter.rb +44 -36
- data/lib/dm-mapping/version.rb +1 -1
- data/test/test_dm-mapping.rb +0 -1
- metadata +12 -3
data/CHANGES
CHANGED
@@ -1,5 +1,13 @@
|
|
1
1
|
= dm-mapper changes history
|
2
2
|
|
3
|
+
=== dm-mapping 0.7.1,
|
4
|
+
don't open module Migration and edit it, instead, use include, more see:
|
5
|
+
* added DataMapper::Mapping::AbstractAdapter
|
6
|
+
* added DataMapper::Mapping::Sqlite3Adapter
|
7
|
+
* added DataMapper::Mapping::MysqlAdapter
|
8
|
+
* added DataMapper::Mapping::PostgresAdapter
|
9
|
+
* each adapter was included in related adapter in DataMapper.
|
10
|
+
|
3
11
|
=== dm-mapping 0.7.0, 2008-09-01
|
4
12
|
* feature added
|
5
13
|
- added postgres support.
|
data/README
CHANGED
data/Rakefile
CHANGED
@@ -12,6 +12,7 @@ PROJ.name = 'dm-mapping'
|
|
12
12
|
PROJ.ruby_opts.delete '-w'
|
13
13
|
|
14
14
|
PROJ.gem.dependencies << ['dm-core', '>=0.9.3'] << ['extlib', '>=0.9.3']
|
15
|
+
PROJ.gem.development_dependencies << ['minitest', '>=1.3.0']
|
15
16
|
# PROJ.gem.executables = ["bin/#{PROJ.name}"]
|
16
17
|
|
17
18
|
task :default do
|
@@ -46,7 +47,7 @@ PROJ.rdoc.main = 'README'
|
|
46
47
|
PROJ.rdoc.exclude += ['Rakefile', '^tasks', '^test']
|
47
48
|
PROJ.rdoc.include << '\w+'
|
48
49
|
PROJ.rdoc.opts << '--diagram' if !WIN32 and `which dot` =~ %r/\/dot/
|
49
|
-
PROJ.rdoc.opts += ['--charset=utf-8', '--inline-source',
|
50
|
+
PROJ.rdoc.opts += ['--charset=utf-8', '--inline-source',
|
50
51
|
'--line-numbers', '--promiscuous']
|
51
52
|
|
52
53
|
PROJ.spec.opts << '--color'
|
data/dm-mapping.gemspec
CHANGED
@@ -3,11 +3,11 @@
|
|
3
3
|
|
4
4
|
Gem::Specification.new do |s|
|
5
5
|
s.name = %q{dm-mapping}
|
6
|
-
s.version = "0.7.
|
6
|
+
s.version = "0.7.1"
|
7
7
|
|
8
8
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
9
9
|
s.authors = ["Lin Jen-Shin (a.k.a. godfat \347\234\237\345\270\270)"]
|
10
|
-
s.date = %q{2008-
|
10
|
+
s.date = %q{2008-12-17}
|
11
11
|
s.description = %q{DataMapper plugin that helps you manipulate an existing database. It creates mappings between existing columns and model's properties.}
|
12
12
|
s.email = %q{godfat (XD) godfat.org}
|
13
13
|
s.extra_rdoc_files = ["CHANGES", "LICENSE", "NOTICE", "README", "TODO", "dm-mapping.gemspec"]
|
@@ -17,7 +17,7 @@ Gem::Specification.new do |s|
|
|
17
17
|
s.rdoc_options = ["--diagram", "--charset=utf-8", "--inline-source", "--line-numbers", "--promiscuous", "--main", "README"]
|
18
18
|
s.require_paths = ["lib"]
|
19
19
|
s.rubyforge_project = %q{ludy}
|
20
|
-
s.rubygems_version = %q{1.3.
|
20
|
+
s.rubygems_version = %q{1.3.1}
|
21
21
|
s.summary = %q{DataMapper plugin that helps you manipulate an existing database. It creates mappings between existing columns and model's properties.}
|
22
22
|
s.test_files = ["test/test_dm-mapping.rb"]
|
23
23
|
|
@@ -28,15 +28,18 @@ Gem::Specification.new do |s|
|
|
28
28
|
if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
|
29
29
|
s.add_runtime_dependency(%q<dm-core>, [">= 0.9.3"])
|
30
30
|
s.add_runtime_dependency(%q<extlib>, [">= 0.9.3"])
|
31
|
-
s.add_development_dependency(%q<bones>, [">= 2.1.
|
31
|
+
s.add_development_dependency(%q<bones>, [">= 2.1.1"])
|
32
|
+
s.add_development_dependency(%q<minitest>, [">= 1.3.0"])
|
32
33
|
else
|
33
34
|
s.add_dependency(%q<dm-core>, [">= 0.9.3"])
|
34
35
|
s.add_dependency(%q<extlib>, [">= 0.9.3"])
|
35
|
-
s.add_dependency(%q<bones>, [">= 2.1.
|
36
|
+
s.add_dependency(%q<bones>, [">= 2.1.1"])
|
37
|
+
s.add_dependency(%q<minitest>, [">= 1.3.0"])
|
36
38
|
end
|
37
39
|
else
|
38
40
|
s.add_dependency(%q<dm-core>, [">= 0.9.3"])
|
39
41
|
s.add_dependency(%q<extlib>, [">= 0.9.3"])
|
40
|
-
s.add_dependency(%q<bones>, [">= 2.1.
|
42
|
+
s.add_dependency(%q<bones>, [">= 2.1.1"])
|
43
|
+
s.add_dependency(%q<minitest>, [">= 1.3.0"])
|
41
44
|
end
|
42
45
|
end
|
@@ -2,121 +2,125 @@
|
|
2
2
|
require 'dm-mapping/type_map'
|
3
3
|
|
4
4
|
module DataMapper
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
end
|
5
|
+
module Mapping
|
6
|
+
module AbstractAdapter
|
7
|
+
# returns all tables' name in the repository.
|
8
|
+
# e.g.
|
9
|
+
# ['comments', 'users']
|
10
|
+
def storages
|
11
|
+
raise NotImplementedError
|
12
|
+
end
|
14
13
|
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
14
|
+
# returns all fields, with format [[name, type, attrs]]
|
15
|
+
# e.g.
|
16
|
+
# [[:created_at, DateTime, {:nullable => true}],
|
17
|
+
# [:email, String, {:nullable => true, :size => 255,
|
18
|
+
# :default => 'nospam@nospam.tw'}],
|
19
|
+
# [:id, Integer, {:nullable => false, :serial => true,
|
20
|
+
# :key => true}],
|
21
|
+
# [:salt_first, String, {:nullable => true, :size => 50}],
|
22
|
+
# [:salt_second, String, {:nullable => true, :size => 50}]]
|
23
|
+
def fields storage
|
24
|
+
dmm_query_storage(storage).map{ |field|
|
25
|
+
primitive = dmm_primitive(field)
|
26
|
+
type, chain = self.class.type_map.lookup_primitive(primitive) ||
|
27
|
+
dmm_lookup_primitive(primitive)
|
29
28
|
|
30
|
-
|
31
|
-
|
32
|
-
|
29
|
+
[dmm_field_name(field).to_sym, type, dmm_attributes(field)]
|
30
|
+
}
|
31
|
+
end
|
33
32
|
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
33
|
+
# returns a hash with storage names in keys and
|
34
|
+
# corresponded fields in values. e.g.
|
35
|
+
# {'users' => [[:id, Integer, {:nullable => false,
|
36
|
+
# :serial => true,
|
37
|
+
# :key => true}],
|
38
|
+
# [:email, String, {:nullable => true,
|
39
|
+
# :default => 'nospam@nospam.tw'}],
|
40
|
+
# [:created_at, DateTime, {:nullable => true}],
|
41
|
+
# [:salt_first, String, {:nullable => true, :size => 50}],
|
42
|
+
# [:salt_second, String, {:nullable => true, :size => 50}]]}
|
43
|
+
# see Migration#storages and Migration#fields for detail
|
44
|
+
def storages_and_fields
|
45
|
+
storages.inject({}){ |result, storage|
|
46
|
+
result[storage] = fields(storage)
|
47
|
+
result
|
48
|
+
}
|
49
|
+
end
|
51
50
|
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
51
|
+
# automaticly generate model class(es) and mapping
|
52
|
+
# all fields with mapping /.*/ for you.
|
53
|
+
# e.g.
|
54
|
+
# dm.auto_genclass!
|
55
|
+
# # => [DataMapper::Mapping::User,
|
56
|
+
# # DataMapper::Mapping::SchemaInfo,
|
57
|
+
# # DataMapper::Mapping::Session]
|
58
|
+
#
|
59
|
+
# you can change the scope of generated models:
|
60
|
+
# e.g.
|
61
|
+
# dm.auto_genclass! :scope => Object
|
62
|
+
# # => [User, SchemaInfo, Session]
|
63
|
+
#
|
64
|
+
# you can generate classes for tables you specified only:
|
65
|
+
# e.g.
|
66
|
+
# dm.auto_genclass! :scope => Object, :storages => /^phpbb_/
|
67
|
+
# # => [PhpbbUser, PhpbbPost, PhpbbConfig]
|
68
|
+
#
|
69
|
+
# you can generate classes with String too:
|
70
|
+
# e.g.
|
71
|
+
# dm.auto_genclass! :storages => ['users', 'config'], :scope => Object
|
72
|
+
# # => [User, Config]
|
73
|
+
#
|
74
|
+
# you can generate a class only:
|
75
|
+
# e.g.
|
76
|
+
# dm.auto_genclass! :storages => 'users'
|
77
|
+
# # => [DataMapper::Mapping::User]
|
78
|
+
def auto_genclass! opts = {}
|
79
|
+
opts[:scope] ||= DataMapper::Mapping
|
80
|
+
opts[:storages] ||= /.*/
|
81
|
+
opts[:storages] = [opts[:storages]].flatten
|
83
82
|
|
84
|
-
|
83
|
+
storages.map{ |storage|
|
85
84
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
85
|
+
mapped = opts[:storages].each{ |target|
|
86
|
+
case target
|
87
|
+
when Regexp;
|
88
|
+
break storage if storage =~ target
|
90
89
|
|
91
|
-
|
92
|
-
|
90
|
+
when Symbol, String;
|
91
|
+
break storage if storage == target.to_s
|
93
92
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
|
93
|
+
else
|
94
|
+
raise ArgumentError.new("invalid argument: #{target.inspect}")
|
95
|
+
end
|
96
|
+
}
|
98
97
|
|
99
|
-
|
100
|
-
|
101
|
-
|
98
|
+
dmm_genclass mapped, opts[:scope] if mapped.kind_of?(String)
|
99
|
+
}.compact
|
100
|
+
end
|
102
101
|
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
102
|
+
private
|
103
|
+
def dmm_query_storage
|
104
|
+
raise NotImplementError.new("#{self.class}#fields is not implemented.")
|
105
|
+
end
|
107
106
|
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
107
|
+
def dmm_genclass storage, scope
|
108
|
+
model = Class.new
|
109
|
+
model.__send__ :include, DataMapper::Resource
|
110
|
+
model.storage_names[:default] = storage
|
111
|
+
model.__send__ :mapping, /.*/
|
112
|
+
scope.const_set(Extlib::Inflection.classify(storage), model)
|
113
|
+
end
|
115
114
|
|
116
|
-
|
117
|
-
|
118
|
-
end
|
115
|
+
def dmm_lookup_primitive primitive
|
116
|
+
raise TypeError.new("#{primitive} not found for #{self.class}")
|
119
117
|
end
|
120
118
|
end
|
121
119
|
end
|
122
120
|
end
|
121
|
+
|
122
|
+
module DataMapper
|
123
|
+
module Adapters
|
124
|
+
AbstractAdapter.send(:include, Mapping::AbstractAdapter)
|
125
|
+
end
|
126
|
+
end
|
@@ -2,59 +2,63 @@
|
|
2
2
|
require 'dm-mapping/adapters/abstract_adapter'
|
3
3
|
|
4
4
|
module DataMapper
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
super(primitive)
|
56
|
-
end
|
5
|
+
module Mapping
|
6
|
+
module MysqlAdapter
|
7
|
+
def storages
|
8
|
+
query 'SHOW TABLES'
|
9
|
+
end
|
10
|
+
|
11
|
+
private
|
12
|
+
# construct needed table metadata
|
13
|
+
def dmm_query_storage storage
|
14
|
+
sql = <<-SQL.compress_lines
|
15
|
+
SELECT column_name, column_default, is_nullable, data_type,
|
16
|
+
character_maximum_length, column_key, extra
|
17
|
+
FROM `information_schema`.`columns`
|
18
|
+
WHERE `table_schema` = ? AND `table_name` = ?
|
19
|
+
SQL
|
20
|
+
|
21
|
+
query(sql, db_name, storage)
|
22
|
+
end
|
23
|
+
|
24
|
+
def dmm_field_name field
|
25
|
+
field.column_name
|
26
|
+
end
|
27
|
+
|
28
|
+
def dmm_primitive field
|
29
|
+
field.data_type
|
30
|
+
end
|
31
|
+
|
32
|
+
def dmm_attributes field, attrs = {}
|
33
|
+
attrs[:serial] = true if field.extra == 'auto_increment'
|
34
|
+
attrs[:key] = true if field.column_key != ''
|
35
|
+
attrs[:nullable] = field.is_nullable == 'YES'
|
36
|
+
attrs[:default] = field.column_default if field.column_default
|
37
|
+
attrs[:size] = field.character_maximum_length if
|
38
|
+
field.character_maximum_length
|
39
|
+
|
40
|
+
attrs
|
41
|
+
end
|
42
|
+
|
43
|
+
def dmm_lookup_primitive primitive
|
44
|
+
p = primitive.upcase
|
45
|
+
|
46
|
+
return Integer if p == 'YEAR'
|
47
|
+
return Integer if p =~ /\w*INT(EGER)?( SIGNED| UNSIGNED)?( ZEROFILL)?/
|
48
|
+
return BigDecimal if p =~ /(DOUBLE|FLOAT|DECIMAL)( SIGNED| UNSIGNED)?( ZEROFILL)?/
|
49
|
+
return String if p =~ /\w*BLOB|\w*BINARY|ENUM|SET|CHAR/
|
50
|
+
return DM::Text if p =~ /\w*TEXT/
|
51
|
+
return TrueClass if %w[BOOL BOOLEAN].member?(p)
|
52
|
+
return Time if p == 'TIME'
|
53
|
+
|
54
|
+
super(primitive)
|
57
55
|
end
|
58
56
|
end
|
59
57
|
end
|
60
58
|
end
|
59
|
+
|
60
|
+
module DataMapper
|
61
|
+
module Adapters
|
62
|
+
MysqlAdapter.send(:include, Mapping::MysqlAdapter)
|
63
|
+
end
|
64
|
+
end
|
@@ -2,72 +2,76 @@
|
|
2
2
|
require 'dm-mapping/adapters/abstract_adapter'
|
3
3
|
|
4
4
|
module DataMapper
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
SQL
|
13
|
-
|
14
|
-
query(sql)
|
15
|
-
end
|
5
|
+
module Mapping
|
6
|
+
module PostgresAdapter
|
7
|
+
def storages
|
8
|
+
sql = <<-SQL.compress_lines
|
9
|
+
SELECT table_name FROM "information_schema"."tables"
|
10
|
+
WHERE table_schema = current_schema()
|
11
|
+
SQL
|
16
12
|
|
17
|
-
|
18
|
-
|
19
|
-
sql = <<-SQL.compress_lines
|
20
|
-
SELECT column_name FROM "information_schema"."key_column_usage"
|
21
|
-
WHERE table_schema = current_schema() AND table_name = ?
|
22
|
-
SQL
|
13
|
+
query(sql)
|
14
|
+
end
|
23
15
|
|
24
|
-
|
16
|
+
private
|
17
|
+
def dmm_query_storage storage
|
18
|
+
sql = <<-SQL.compress_lines
|
19
|
+
SELECT column_name FROM "information_schema"."key_column_usage"
|
20
|
+
WHERE table_schema = current_schema() AND table_name = ?
|
21
|
+
SQL
|
25
22
|
|
26
|
-
|
27
|
-
SELECT column_name, column_default, is_nullable,
|
28
|
-
character_maximum_length, udt_name
|
29
|
-
FROM "information_schema"."columns"
|
30
|
-
WHERE table_schema = current_schema() AND table_name = ?
|
31
|
-
SQL
|
23
|
+
keys = query(sql, storage).to_set
|
32
24
|
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
struct
|
40
|
-
}
|
41
|
-
end
|
25
|
+
sql = <<-SQL.compress_lines
|
26
|
+
SELECT column_name, column_default, is_nullable,
|
27
|
+
character_maximum_length, udt_name
|
28
|
+
FROM "information_schema"."columns"
|
29
|
+
WHERE table_schema = current_schema() AND table_name = ?
|
30
|
+
SQL
|
42
31
|
|
43
|
-
|
44
|
-
|
45
|
-
|
32
|
+
query(sql, storage).map{ |struct|
|
33
|
+
struct.instance_eval <<-END_EVAL
|
34
|
+
def key?
|
35
|
+
#{keys.member?(struct.column_name)}
|
36
|
+
end
|
37
|
+
END_EVAL
|
38
|
+
struct
|
39
|
+
}
|
40
|
+
end
|
46
41
|
|
47
|
-
|
48
|
-
|
49
|
-
|
42
|
+
def dmm_field_name field
|
43
|
+
field.column_name
|
44
|
+
end
|
50
45
|
|
51
|
-
|
52
|
-
|
53
|
-
|
46
|
+
def dmm_primitive field
|
47
|
+
field.udt_name
|
48
|
+
end
|
54
49
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
# strip string quotation
|
59
|
-
attrs[:default] = field.column_default.gsub(/^'(.*?)'$/, '\1') if
|
60
|
-
field.column_default && !attrs[:serial]
|
50
|
+
def dmm_attributes field, attrs = {}
|
51
|
+
# strip data type
|
52
|
+
field.column_default.gsub!(/(.*?)::[\w\s]*/, '\1') if field.column_default
|
61
53
|
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
54
|
+
attrs[:serial] = true if field.column_default =~ /nextval\('\w+_seq'\)/
|
55
|
+
attrs[:key] = true if field.key?
|
56
|
+
attrs[:nullable] = field.is_nullable == 'YES'
|
57
|
+
# strip string quotation
|
58
|
+
attrs[:default] = field.column_default.gsub(/^'(.*?)'$/, '\1') if
|
59
|
+
field.column_default && !attrs[:serial]
|
67
60
|
|
68
|
-
|
61
|
+
if field.character_maximum_length
|
62
|
+
attrs[:size] = field.character_maximum_length
|
63
|
+
elsif field.udt_name.upcase == 'TEXT'
|
64
|
+
attrs[:size] = DM::Text.size
|
69
65
|
end
|
66
|
+
|
67
|
+
attrs
|
70
68
|
end
|
71
69
|
end
|
72
70
|
end
|
73
71
|
end
|
72
|
+
|
73
|
+
module DataMapper
|
74
|
+
module Adapters
|
75
|
+
PostgresAdapter.send(:include, Mapping::PostgresAdapter)
|
76
|
+
end
|
77
|
+
end
|
@@ -2,50 +2,58 @@
|
|
2
2
|
require 'dm-mapping/adapters/abstract_adapter'
|
3
3
|
|
4
4
|
module DataMapper
|
5
|
-
module
|
6
|
-
|
7
|
-
|
8
|
-
def storages
|
5
|
+
module Mapping
|
6
|
+
module Sqlite3Adapter
|
7
|
+
def storages
|
9
8
|
# activerecord-2.1.0/lib/active_record/connection_adapters/sqlite_adapter.rb: 177
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
9
|
+
sql = <<-SQL.compress_lines
|
10
|
+
SELECT name
|
11
|
+
FROM sqlite_master
|
12
|
+
WHERE type = 'table' AND NOT name = 'sqlite_sequence'
|
13
|
+
SQL
|
15
14
|
# activerecord-2.1.0/lib/active_record/connection_adapters/sqlite_adapter.rb: 181
|
16
15
|
|
17
|
-
|
18
|
-
|
16
|
+
query sql
|
17
|
+
end
|
19
18
|
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
19
|
+
private
|
20
|
+
# alias_method :dmm_query_storages, :query_table
|
21
|
+
def dmm_query_storage *args, &block
|
22
|
+
query_table(*args, &block)
|
23
|
+
end
|
25
24
|
|
26
|
-
|
27
|
-
|
28
|
-
|
25
|
+
def dmm_field_name field
|
26
|
+
field.name
|
27
|
+
end
|
28
|
+
|
29
|
+
def dmm_primitive field
|
30
|
+
field.type.gsub(/\(\d+\)/, '')
|
31
|
+
end
|
29
32
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
end
|
45
|
-
|
46
|
-
attrs
|
33
|
+
def dmm_attributes field, attrs = {}
|
34
|
+
if field.pk != 0
|
35
|
+
attrs[:key] = true
|
36
|
+
attrs[:serial] = true if supports_serial?
|
37
|
+
end
|
38
|
+
attrs[:nullable] = field.notnull != 99
|
39
|
+
attrs[:default] = field.dflt_value[1..-2] if field.dflt_value
|
40
|
+
|
41
|
+
if field.type.upcase == 'TEXT'
|
42
|
+
attrs[:size] = DM::Text.size
|
43
|
+
else
|
44
|
+
ergo = field.type.match(/\((\d+)\)/)
|
45
|
+
size = ergo && ergo[1].to_i
|
46
|
+
attrs[:size] = size if size
|
47
47
|
end
|
48
|
+
|
49
|
+
attrs
|
48
50
|
end
|
49
51
|
end
|
50
52
|
end
|
51
53
|
end
|
54
|
+
|
55
|
+
module DataMapper
|
56
|
+
module Adapters
|
57
|
+
Sqlite3Adapter.send(:include, Mapping::Sqlite3Adapter)
|
58
|
+
end
|
59
|
+
end
|
data/lib/dm-mapping/version.rb
CHANGED
data/test/test_dm-mapping.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: godfat-dm-mapping
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.7.
|
4
|
+
version: 0.7.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- "Lin Jen-Shin (a.k.a. godfat \xE7\x9C\x9F\xE5\xB8\xB8)"
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-
|
12
|
+
date: 2008-12-17 00:00:00 -08:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -37,7 +37,16 @@ dependencies:
|
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 2.1.
|
40
|
+
version: 2.1.1
|
41
|
+
version:
|
42
|
+
- !ruby/object:Gem::Dependency
|
43
|
+
name: minitest
|
44
|
+
version_requirement:
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - ">="
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: 1.3.0
|
41
50
|
version:
|
42
51
|
description: DataMapper plugin that helps you manipulate an existing database. It creates mappings between existing columns and model's properties.
|
43
52
|
email: godfat (XD) godfat.org
|