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 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