godfat-dm-mapping 0.7.0 → 0.7.1

Sign up to get free protection for your applications and to get access to all the features.
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
@@ -1,4 +1,4 @@
1
- = dm-mapping 0.7.0
1
+ = dm-mapping 0.7.1
2
2
  by Lin Jen-Shin (a.k.a. godfat-真常[http://godfat.org])
3
3
  godfat (XD) godfat.org
4
4
 
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.0"
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-22}
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.0}
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.0"])
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.0"])
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.0"])
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 Adapters
6
- class AbstractAdapter
7
- module Migration
8
- # returns all tables' name in the repository.
9
- # e.g.
10
- # ['comments', 'users']
11
- def storages
12
- raise NotImplementedError
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
- # returns all fields, with format [[name, type, attrs]]
16
- # e.g.
17
- # [[:created_at, DateTime, {:nullable => true}],
18
- # [:email, String, {:nullable => true, :size => 255,
19
- # :default => 'nospam@nospam.tw'}],
20
- # [:id, Integer, {:nullable => false, :serial => true,
21
- # :key => true}],
22
- # [:salt_first, String, {:nullable => true, :size => 50}],
23
- # [:salt_second, String, {:nullable => true, :size => 50}]]
24
- def fields storage
25
- dmm_query_storage(storage).map{ |field|
26
- primitive = dmm_primitive(field)
27
- type, chain = self.class.type_map.lookup_primitive(primitive) ||
28
- dmm_lookup_primitive(primitive)
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
- [dmm_field_name(field).to_sym, type, dmm_attributes(field)]
31
- }
32
- end
29
+ [dmm_field_name(field).to_sym, type, dmm_attributes(field)]
30
+ }
31
+ end
33
32
 
34
- # returns a hash with storage names in keys and
35
- # corresponded fields in values. e.g.
36
- # {'users' => [[:id, Integer, {:nullable => false,
37
- # :serial => true,
38
- # :key => true}],
39
- # [:email, String, {:nullable => true,
40
- # :default => 'nospam@nospam.tw'}],
41
- # [:created_at, DateTime, {:nullable => true}],
42
- # [:salt_first, String, {:nullable => true, :size => 50}],
43
- # [:salt_second, String, {:nullable => true, :size => 50}]]}
44
- # see Migration#storages and Migration#fields for detail
45
- def storages_and_fields
46
- storages.inject({}){ |result, storage|
47
- result[storage] = fields(storage)
48
- result
49
- }
50
- end
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
- # automaticly generate model class(es) and mapping
53
- # all fields with mapping /.*/ for you.
54
- # e.g.
55
- # dm.auto_genclass!
56
- # # => [DataMapper::Mapping::User,
57
- # # DataMapper::Mapping::SchemaInfo,
58
- # # DataMapper::Mapping::Session]
59
- #
60
- # you can change the scope of generated models:
61
- # e.g.
62
- # dm.auto_genclass! :scope => Object
63
- # # => [User, SchemaInfo, Session]
64
- #
65
- # you can generate classes for tables you specified only:
66
- # e.g.
67
- # dm.auto_genclass! :scope => Object, :storages => /^phpbb_/
68
- # # => [PhpbbUser, PhpbbPost, PhpbbConfig]
69
- #
70
- # you can generate classes with String too:
71
- # e.g.
72
- # dm.auto_genclass! :storages => ['users', 'config'], :scope => Object
73
- # # => [User, Config]
74
- #
75
- # you can generate a class only:
76
- # e.g.
77
- # dm.auto_genclass! :storages => 'users'
78
- # # => [DataMapper::Mapping::User]
79
- def auto_genclass! opts = {}
80
- opts[:scope] ||= DataMapper::Mapping
81
- opts[:storages] ||= /.*/
82
- opts[:storages] = [opts[:storages]].flatten
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
- storages.map{ |storage|
83
+ storages.map{ |storage|
85
84
 
86
- mapped = opts[:storages].each{ |target|
87
- case target
88
- when Regexp;
89
- break storage if storage =~ target
85
+ mapped = opts[:storages].each{ |target|
86
+ case target
87
+ when Regexp;
88
+ break storage if storage =~ target
90
89
 
91
- when Symbol, String;
92
- break storage if storage == target.to_s
90
+ when Symbol, String;
91
+ break storage if storage == target.to_s
93
92
 
94
- else
95
- raise ArgumentError.new("invalid argument: #{target.inspect}")
96
- end
97
- }
93
+ else
94
+ raise ArgumentError.new("invalid argument: #{target.inspect}")
95
+ end
96
+ }
98
97
 
99
- dmm_genclass mapped, opts[:scope] if mapped.kind_of?(String)
100
- }.compact
101
- end
98
+ dmm_genclass mapped, opts[:scope] if mapped.kind_of?(String)
99
+ }.compact
100
+ end
102
101
 
103
- private
104
- def dmm_query_storage
105
- raise NotImplementError.new("#{self.class}#fields is not implemented.")
106
- end
102
+ private
103
+ def dmm_query_storage
104
+ raise NotImplementError.new("#{self.class}#fields is not implemented.")
105
+ end
107
106
 
108
- def dmm_genclass storage, scope
109
- model = Class.new
110
- model.__send__ :include, DataMapper::Resource
111
- model.storage_names[:default] = storage
112
- model.__send__ :mapping, /.*/
113
- scope.const_set(Extlib::Inflection.classify(storage), model)
114
- end
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
- def dmm_lookup_primitive primitive
117
- raise TypeError.new("#{primitive} not found for #{self.class}")
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 Adapters
6
- class MysqlAdapter < DataObjectsAdapter #:nodoc: all
7
- module Migration
8
- def storages
9
- query 'SHOW TABLES'
10
- end
11
-
12
- private
13
- # construct needed table metadata
14
- def dmm_query_storage storage
15
- sql = <<-SQL.compress_lines
16
- SELECT column_name, column_default, is_nullable, data_type,
17
- character_maximum_length, column_key, extra
18
- FROM `information_schema`.`columns`
19
- WHERE `table_schema` = ? AND `table_name` = ?
20
- SQL
21
-
22
- query(sql, db_name, storage)
23
- end
24
-
25
- def dmm_field_name field
26
- field.column_name
27
- end
28
-
29
- def dmm_primitive field
30
- field.data_type
31
- end
32
-
33
- def dmm_attributes field, attrs = {}
34
- attrs[:serial] = true if field.extra == 'auto_increment'
35
- attrs[:key] = true if field.column_key != ''
36
- attrs[:nullable] = field.is_nullable == 'YES'
37
- attrs[:default] = field.column_default if field.column_default
38
- attrs[:size] = field.character_maximum_length if
39
- field.character_maximum_length
40
-
41
- attrs
42
- end
43
-
44
- def dmm_lookup_primitive primitive
45
- p = primitive.upcase
46
-
47
- return Integer if p == 'YEAR'
48
- return Integer if p =~ /\w*INT(EGER)?( SIGNED| UNSIGNED)?( ZEROFILL)?/
49
- return BigDecimal if p =~ /(DOUBLE|FLOAT|DECIMAL)( SIGNED| UNSIGNED)?( ZEROFILL)?/
50
- return String if p =~ /\w*BLOB|\w*BINARY|ENUM|SET|CHAR/
51
- return DM::Text if p =~ /\w*TEXT/
52
- return TrueClass if %w[BOOL BOOLEAN].member?(p)
53
- return Time if p == 'TIME'
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 Adapters
6
- class PostgresAdapter < DataObjectsAdapter #:nodoc: all
7
- module Migration
8
- def storages
9
- sql = <<-SQL.compress_lines
10
- SELECT table_name FROM "information_schema"."tables"
11
- WHERE table_schema = current_schema()
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
- private
18
- def dmm_query_storage storage
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
- keys = query(sql, storage).to_set
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
- sql = <<-SQL.compress_lines
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
- query(sql, storage).map{ |struct|
34
- struct.instance_eval <<-END_EVAL
35
- def key?
36
- #{keys.member?(struct.column_name)}
37
- end
38
- END_EVAL
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
- def dmm_field_name field
44
- field.column_name
45
- end
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
- def dmm_primitive field
48
- field.udt_name
49
- end
42
+ def dmm_field_name field
43
+ field.column_name
44
+ end
50
45
 
51
- def dmm_attributes field, attrs = {}
52
- # strip data type
53
- field.column_default.gsub!(/(.*?)::[\w\s]*/, '\1') if field.column_default
46
+ def dmm_primitive field
47
+ field.udt_name
48
+ end
54
49
 
55
- attrs[:serial] = true if field.column_default =~ /nextval\('\w+_seq'\)/
56
- attrs[:key] = true if field.key?
57
- attrs[:nullable] = field.is_nullable == 'YES'
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
- if field.character_maximum_length
63
- attrs[:size] = field.character_maximum_length
64
- elsif field.udt_name.upcase == 'TEXT'
65
- attrs[:size] = DM::Text.size
66
- end
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
- attrs
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 Adapters
6
- class Sqlite3Adapter < DataObjectsAdapter #:nodoc: all
7
- module Migration
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
- sql = <<-SQL.compress_lines
11
- SELECT name
12
- FROM sqlite_master
13
- WHERE type = 'table' AND NOT name = 'sqlite_sequence'
14
- SQL
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
- query sql
18
- end
16
+ query sql
17
+ end
19
18
 
20
- private
21
- alias_method :dmm_query_storage, :query_table
22
- def dmm_field_name field
23
- field.name
24
- end
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
- def dmm_primitive field
27
- field.type.gsub(/\(\d+\)/, '')
28
- end
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
- def dmm_attributes field, attrs = {}
31
- if field.pk != 0
32
- attrs[:key] = true
33
- attrs[:serial] = true if supports_serial?
34
- end
35
- attrs[:nullable] = field.notnull != 99
36
- attrs[:default] = field.dflt_value[1..-2] if field.dflt_value
37
-
38
- if field.type.upcase == 'TEXT'
39
- attrs[:size] = DM::Text.size
40
- else
41
- ergo = field.type.match(/\((\d+)\)/)
42
- size = ergo && ergo[1].to_i
43
- attrs[:size] = size if size
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
@@ -1,5 +1,5 @@
1
1
  module DataMapper
2
2
  module Mapping
3
- VERSION = '0.7.0' unless defined?(DataMapper::Mapping::VERSION)
3
+ VERSION = '0.7.1' unless defined?(DataMapper::Mapping::VERSION)
4
4
  end
5
5
  end
@@ -1,7 +1,6 @@
1
1
 
2
2
  require 'test/abstract'
3
3
  require 'minitest/unit'
4
-
5
4
  MiniTest::Unit.autorun
6
5
 
7
6
  %w[sqlite3 mysql postgres].each{ |adapter|
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.0
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-10-22 00:00:00 -07:00
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.0
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