mack-data_mapper 0.6.1.2 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (53) hide show
  1. data/doc/classes/Mack.html +6 -6
  2. data/doc/classes/Mack/Database.html +119 -18
  3. data/doc/classes/Mack/Database/Generators.html +140 -0
  4. data/doc/classes/Mack/Database/Migrations.html +206 -0
  5. data/doc/classes/Mack/Testing/DataMapperHelpers.html +6 -6
  6. data/doc/classes/Mack/ViewHelpers/DataMapperHelpers.html +30 -124
  7. data/doc/created.rid +1 -1
  8. data/doc/files/lib/mack-data_mapper/database_migrations_rb.html +115 -0
  9. data/doc/files/lib/mack-data_mapper/database_rb.html +1 -1
  10. data/doc/files/lib/mack-data_mapper/dm_patches/dm-timestamps_rb.html +1 -1
  11. data/doc/files/lib/mack-data_mapper/dm_patches/migrations_rb.html +1 -1
  12. data/doc/files/lib/mack-data_mapper/{genosaurus_helpers_rb.html → dm_patches/model_rb.html} +5 -5
  13. data/doc/files/lib/mack-data_mapper/{scaffold_generator/scaffold_generator_rb.html → dm_patches/property_set_rb.html} +4 -17
  14. data/doc/{classes/DataMapper/Timestamp.html → files/lib/mack-data_mapper/dm_patches/validations_rb.html} +16 -20
  15. data/doc/files/lib/mack-data_mapper/{model_column_rb.html → generators_rb.html} +4 -4
  16. data/doc/files/lib/mack-data_mapper/helpers/orm_helpers_rb.html +1 -1
  17. data/doc/files/lib/mack-data_mapper/migration_generator/migration_generator_rb.html +1 -1
  18. data/doc/files/lib/mack-data_mapper/model_generator/model_generator_rb.html +1 -1
  19. data/doc/files/lib/mack-data_mapper_rb.html +2 -1
  20. data/doc/files/lib/mack-data_mapper_tasks_rb.html +8 -1
  21. data/doc/fr_class_index.html +2 -2
  22. data/doc/fr_file_index.html +5 -3
  23. data/doc/fr_method_index.html +10 -7
  24. data/lib/mack-data_mapper.rb +4 -5
  25. data/lib/mack-data_mapper/database.rb +79 -38
  26. data/lib/mack-data_mapper/database_migrations.rb +35 -0
  27. data/lib/mack-data_mapper/dm_patches/dm-timestamps.rb +4 -4
  28. data/lib/mack-data_mapper/dm_patches/migrations.rb +24 -2
  29. data/lib/mack-data_mapper/dm_patches/model.rb +48 -0
  30. data/lib/mack-data_mapper/dm_patches/property_set.rb +15 -0
  31. data/lib/mack-data_mapper/dm_patches/validations.rb +15 -0
  32. data/lib/mack-data_mapper/generators.rb +11 -0
  33. data/lib/mack-data_mapper/helpers/orm_helpers.rb +8 -32
  34. data/lib/mack-data_mapper/migration_generator/migration_generator.rb +1 -1
  35. data/lib/mack-data_mapper/model_generator/manifest.yml +2 -2
  36. data/lib/mack-data_mapper/model_generator/model_generator.rb +1 -1
  37. data/lib/mack-data_mapper_tasks.rb +1 -0
  38. metadata +42 -29
  39. data/doc/classes/ScaffoldGenerator.html +0 -123
  40. data/lib/mack-data_mapper/genosaurus_helpers.rb +0 -40
  41. data/lib/mack-data_mapper/model_column.rb +0 -42
  42. data/lib/mack-data_mapper/scaffold_generator/manifest.yml +0 -35
  43. data/lib/mack-data_mapper/scaffold_generator/scaffold_generator.rb +0 -41
  44. data/lib/mack-data_mapper/scaffold_generator/templates/app/helpers/controllers/helper.rb.template +0 -7
  45. data/lib/mack-data_mapper/scaffold_generator/templates/app/views/edit.html.erb.template +0 -19
  46. data/lib/mack-data_mapper/scaffold_generator/templates/app/views/index.html.erb.template +0 -41
  47. data/lib/mack-data_mapper/scaffold_generator/templates/app/views/new.html.erb.template +0 -19
  48. data/lib/mack-data_mapper/scaffold_generator/templates/app/views/show.html.erb.template +0 -12
  49. data/lib/mack-data_mapper/scaffold_generator/templates/test/functional/rspec.rb.template +0 -47
  50. data/lib/mack-data_mapper/scaffold_generator/templates/test/functional/test_case.rb.template +0 -9
  51. data/lib/mack-data_mapper/tasks/db_create_drop_tasks.rake +0 -57
  52. data/lib/mack-data_mapper/tasks/db_migration_tasks.rake +0 -46
  53. data/lib/mack-data_mapper/tasks/test_tasks.rake +0 -12
@@ -5,7 +5,7 @@
5
5
 
6
6
  <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
7
  <head>
8
- <title>File: model_column.rb</title>
8
+ <title>File: generators.rb</title>
9
9
  <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
10
  <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
11
  <link rel="stylesheet" href="../../.././rdoc-style.css" type="text/css" media="screen" />
@@ -47,16 +47,16 @@
47
47
 
48
48
 
49
49
  <div id="fileHeader">
50
- <h1>model_column.rb</h1>
50
+ <h1>generators.rb</h1>
51
51
  <table class="header-table">
52
52
  <tr class="top-aligned-row">
53
53
  <td><strong>Path:</strong></td>
54
- <td>lib/mack-data_mapper/model_column.rb
54
+ <td>lib/mack-data_mapper/generators.rb
55
55
  </td>
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Aug 29 11:14:25 -0400 2008</td>
59
+ <td>Mon Aug 25 10:11:28 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Aug 29 11:14:25 -0400 2008</td>
59
+ <td>Mon Aug 25 10:11:28 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Aug 29 11:14:25 -0400 2008</td>
59
+ <td>Mon Aug 25 10:11:28 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Aug 29 11:14:25 -0400 2008</td>
59
+ <td>Mon Aug 25 10:11:28 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Aug 29 11:14:25 -0400 2008</td>
59
+ <td>Mon Aug 25 10:11:28 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -75,6 +75,7 @@
75
75
  <div class="name-list">
76
76
  rubygems&nbsp;&nbsp;
77
77
  genosaurus&nbsp;&nbsp;
78
+ mack-orm&nbsp;&nbsp;
78
79
  </div>
79
80
  </div>
80
81
 
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Aug 29 11:14:25 -0400 2008</td>
59
+ <td>Mon Aug 25 10:11:28 -0400 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -69,6 +69,13 @@
69
69
  <div id="contextContent">
70
70
 
71
71
 
72
+ <div id="requires-list">
73
+ <h3 class="section-bar">Required files</h3>
74
+
75
+ <div class="name-list">
76
+ mack-orm_tasks&nbsp;&nbsp;
77
+ </div>
78
+ </div>
72
79
 
73
80
  </div>
74
81
 
@@ -21,15 +21,15 @@
21
21
  <h1 class="section-bar">Classes</h1>
22
22
  <div id="index-entries">
23
23
  <a href="classes/DataMapper/Resource.html">DataMapper::Resource</a><br />
24
- <a href="classes/DataMapper/Timestamp.html">DataMapper::Timestamp</a><br />
25
24
  <a href="classes/Mack.html">Mack</a><br />
26
25
  <a href="classes/Mack/Database.html">Mack::Database</a><br />
26
+ <a href="classes/Mack/Database/Generators.html">Mack::Database::Generators</a><br />
27
+ <a href="classes/Mack/Database/Migrations.html">Mack::Database::Migrations</a><br />
27
28
  <a href="classes/Mack/Testing/DataMapperHelpers.html">Mack::Testing::DataMapperHelpers</a><br />
28
29
  <a href="classes/Mack/Testing/Helpers.html">Mack::Testing::Helpers</a><br />
29
30
  <a href="classes/Mack/ViewHelpers/DataMapperHelpers.html">Mack::ViewHelpers::DataMapperHelpers</a><br />
30
31
  <a href="classes/MigrationGenerator.html">MigrationGenerator</a><br />
31
32
  <a href="classes/ModelGenerator.html">ModelGenerator</a><br />
32
- <a href="classes/ScaffoldGenerator.html">ScaffoldGenerator</a><br />
33
33
  </div>
34
34
  </div>
35
35
  </body>
@@ -23,16 +23,18 @@
23
23
  <a href="files/README.html">README</a><br />
24
24
  <a href="files/lib/mack-data_mapper_rb.html">lib/mack-data_mapper.rb</a><br />
25
25
  <a href="files/lib/mack-data_mapper/database_rb.html">lib/mack-data_mapper/database.rb</a><br />
26
+ <a href="files/lib/mack-data_mapper/database_migrations_rb.html">lib/mack-data_mapper/database_migrations.rb</a><br />
26
27
  <a href="files/lib/mack-data_mapper/dm_patches/dm-timestamps_rb.html">lib/mack-data_mapper/dm_patches/dm-timestamps.rb</a><br />
27
28
  <a href="files/lib/mack-data_mapper/dm_patches/migrations_rb.html">lib/mack-data_mapper/dm_patches/migrations.rb</a><br />
28
- <a href="files/lib/mack-data_mapper/genosaurus_helpers_rb.html">lib/mack-data_mapper/genosaurus_helpers.rb</a><br />
29
+ <a href="files/lib/mack-data_mapper/dm_patches/model_rb.html">lib/mack-data_mapper/dm_patches/model.rb</a><br />
30
+ <a href="files/lib/mack-data_mapper/dm_patches/property_set_rb.html">lib/mack-data_mapper/dm_patches/property_set.rb</a><br />
31
+ <a href="files/lib/mack-data_mapper/dm_patches/validations_rb.html">lib/mack-data_mapper/dm_patches/validations.rb</a><br />
32
+ <a href="files/lib/mack-data_mapper/generators_rb.html">lib/mack-data_mapper/generators.rb</a><br />
29
33
  <a href="files/lib/mack-data_mapper/helpers/orm_helpers_rb.html">lib/mack-data_mapper/helpers/orm_helpers.rb</a><br />
30
34
  <a href="files/lib/mack-data_mapper/migration_generator/migration_generator_rb.html">lib/mack-data_mapper/migration_generator/migration_generator.rb</a><br />
31
- <a href="files/lib/mack-data_mapper/model_column_rb.html">lib/mack-data_mapper/model_column.rb</a><br />
32
35
  <a href="files/lib/mack-data_mapper/model_generator/model_generator_rb.html">lib/mack-data_mapper/model_generator/model_generator.rb</a><br />
33
36
  <a href="files/lib/mack-data_mapper/resource_rb.html">lib/mack-data_mapper/resource.rb</a><br />
34
37
  <a href="files/lib/mack-data_mapper/runner_rb.html">lib/mack-data_mapper/runner.rb</a><br />
35
- <a href="files/lib/mack-data_mapper/scaffold_generator/scaffold_generator_rb.html">lib/mack-data_mapper/scaffold_generator/scaffold_generator.rb</a><br />
36
38
  <a href="files/lib/mack-data_mapper/test_extensions_rb.html">lib/mack-data_mapper/test_extensions.rb</a><br />
37
39
  <a href="files/lib/mack-data_mapper_tasks_rb.html">lib/mack-data_mapper_tasks.rb</a><br />
38
40
  </div>
@@ -20,14 +20,17 @@
20
20
  <div id="index">
21
21
  <h1 class="section-bar">Methods</h1>
22
22
  <div id="index-entries">
23
- <a href="classes/Mack/Database.html#M000007">create (Mack::Database)</a><br />
24
- <a href="classes/Mack/Database.html#M000008">drop (Mack::Database)</a><br />
23
+ <a href="classes/Mack/Database/Migrations.html#M000011">abort_if_pending_migrations (Mack::Database::Migrations)</a><br />
24
+ <a href="classes/Mack/Database/Generators.html#M000008">controller_template_location (Mack::Database::Generators)</a><br />
25
+ <a href="classes/Mack/Database.html#M000004">create (Mack::Database)</a><br />
26
+ <a href="classes/Mack/Database.html#M000005">drop (Mack::Database)</a><br />
27
+ <a href="classes/Mack/Database.html#M000007">dump_structure (Mack::Database)</a><br />
25
28
  <a href="classes/Mack/ViewHelpers/DataMapperHelpers.html#M000002">error_messages_for (Mack::ViewHelpers::DataMapperHelpers)</a><br />
26
- <a href="classes/Mack/Database.html#M000006">establish_connection (Mack::Database)</a><br />
27
- <a href="classes/Mack/ViewHelpers/DataMapperHelpers.html#M000004">model_password_field (Mack::ViewHelpers::DataMapperHelpers)</a><br />
28
- <a href="classes/Mack/ViewHelpers/DataMapperHelpers.html#M000003">model_text_field (Mack::ViewHelpers::DataMapperHelpers)</a><br />
29
- <a href="classes/Mack/ViewHelpers/DataMapperHelpers.html#M000005">model_textarea (Mack::ViewHelpers::DataMapperHelpers)</a><br />
30
- <a href="classes/Mack/Testing/DataMapperHelpers.html#M000009">rollback_transaction (Mack::Testing::DataMapperHelpers)</a><br />
29
+ <a href="classes/Mack/Database.html#M000003">establish_connection (Mack::Database)</a><br />
30
+ <a href="classes/Mack/Database.html#M000006">load_structure (Mack::Database)</a><br />
31
+ <a href="classes/Mack/Database/Migrations.html#M000009">migrate (Mack::Database::Migrations)</a><br />
32
+ <a href="classes/Mack/Database/Migrations.html#M000010">rollback (Mack::Database::Migrations)</a><br />
33
+ <a href="classes/Mack/Testing/DataMapperHelpers.html#M000012">rollback_transaction (Mack::Testing::DataMapperHelpers)</a><br />
31
34
  <a href="classes/DataMapper/Resource.html#M000001">to_param (DataMapper::Resource)</a><br />
32
35
  </div>
33
36
  </div>
@@ -1,25 +1,24 @@
1
1
  require 'rubygems'
2
2
  require 'genosaurus'
3
-
3
+ require 'mack-orm'
4
4
  fl = File.join(File.dirname(__FILE__), "mack-data_mapper")
5
5
 
6
6
  $: << File.expand_path(File.join(fl, "dm_patches"))
7
7
 
8
8
  [:core, :aggregates, :migrations, :serializer, :timestamps, :validations, :observer, :types].each do |g|
9
- gem "dm-#{g}", "0.9.3"
9
+ gem "dm-#{g}", "0.9.4"
10
10
  require "dm-#{g}"
11
11
  end
12
12
 
13
13
 
14
14
  require File.join(fl, "database")
15
+ require File.join(fl, "database_migrations")
16
+ require File.join(fl, "generators")
15
17
  require File.join(fl, "helpers", "orm_helpers")
16
18
  require File.join(fl, "resource")
17
19
  require File.join(fl, "runner")
18
20
  require File.join(fl, "test_extensions")
19
21
 
20
- require File.join(fl, "model_column")
21
- require File.join(fl, "genosaurus_helpers")
22
-
23
22
 
24
23
  [:helpers, :migration_generator, :model_generator, :scaffold_generator, :dm_patches].each do |folder|
25
24
  Dir.glob(File.join(fl, folder.to_s, "**/*.rb")).each {|f| require f}
@@ -28,6 +28,48 @@ module Mack
28
28
  drop_database(repis)
29
29
  end
30
30
 
31
+ # Loads the structure of the given file into the database
32
+ def self.load_structure(file, env = Mack.env, repis = :default)
33
+ Mack::Database.establish_connection(env)
34
+ adapter = repository(repis).adapter
35
+ sql = File.read(file)
36
+ case adapter.class.name
37
+ when /Mysql/
38
+ sql.split(";").each do |s|
39
+ s.strip!
40
+ adapter.execute(s) unless s.blank?
41
+ end
42
+ else
43
+ adapter.execute(sql) unless sql.blank?
44
+ end
45
+ end
46
+
47
+ # Dumps the structure of the database to a file.
48
+ def self.dump_structure(env = Mack.env, repis = :default)
49
+ Mack::Database.establish_connection(env)
50
+ adapter = repository(repis).adapter
51
+ uri = adapter.uri
52
+ structure = ""
53
+ output_file = File.join(Mack.root, "db", "#{env}_schema_structure.sql")
54
+ case adapter.class.name
55
+ when /Mysql/
56
+ sql = "SHOW TABLES"
57
+ adapter.query(sql).each do |res|
58
+ show = adapter.query("SHOW CREATE TABLE #{res}").first
59
+ structure += show.attributes["create table".to_sym]
60
+ structure += ";\n\n"
61
+ end
62
+ File.open(output_file, "w") {|f| f.puts structure}
63
+ when /Postgres/
64
+ `pg_dump -i -U "#{uri.user}" -s -x -O -n #{ENV["SCHEMA"] ||= "public"} -f #{output_file} #{uri.basename}`
65
+ when /Sqlite3/
66
+ db_dir = File.join(Mack.root, "db")
67
+ `sqlite3 #{File.join(db_dir, uri.basename)} .schema > #{output_file}`
68
+ else
69
+ raise "Task not supported for '#{repository(repis).adapter.class.name}'"
70
+ end
71
+ end
72
+
31
73
  private
32
74
  def self.setup_temp(uri, adapter)
33
75
  DataMapper.setup(:tmp, {
@@ -42,50 +84,49 @@ module Mack
42
84
  def self.create_database(repis = :default)
43
85
  uri = repository(repis).adapter.uri
44
86
  case repository(repis).adapter.class.name
45
- when /Mysql/
46
- setup_temp(uri, "mysql")
47
- repository(:tmp) do |repo|
48
- puts "Creating (MySQL): #{uri.basename}"
49
- repo.adapter.execute "CREATE DATABASE `#{uri.basename}` DEFAULT CHARACTER SET `utf8`"
50
- end
51
- when /Postgres/
52
- setup_temp(uri, "postgres")
53
- repository(:tmp) do |repo|
54
- puts "Creating (PostgreSQL): #{uri.basename}"
55
- repo.adapter.execute "CREATE DATABASE #{uri.basename} ENCODING = 'utf8'"
56
- end
57
- when /Sqlite3/
58
- db_dir = File.join(Mack.root, "db")
59
- puts "Creating (SQLite3): #{uri.basename}"
60
- FileUtils.mkdir_p(db_dir)
61
- FileUtils.touch(File.join(db_dir, uri.basename))
62
- else
63
- raise "Task not supported for '#{repository(repis).adapter.class.name}'"
87
+ when /Mysql/
88
+ setup_temp(uri, "mysql")
89
+ repository(:tmp) do |repo|
90
+ puts "Creating (MySQL): #{uri.basename}"
91
+ repo.adapter.execute "CREATE DATABASE `#{uri.basename}` DEFAULT CHARACTER SET `utf8`"
92
+ end
93
+ when /Postgres/
94
+ setup_temp(uri, "postgres")
95
+ repository(:tmp) do |repo|
96
+ puts "Creating (PostgreSQL): #{uri.basename}"
97
+ repo.adapter.execute "CREATE DATABASE #{uri.basename} ENCODING = 'utf8'"
98
+ end
99
+ when /Sqlite3/
100
+ db_dir = File.join(Mack.root, "db")
101
+ puts "Creating (SQLite3): #{uri.basename}"
102
+ FileUtils.mkdir_p(db_dir)
103
+ FileUtils.touch(File.join(db_dir, uri.basename))
104
+ else
105
+ raise "Task not supported for '#{repository(repis).adapter.class.name}'"
64
106
  end
65
107
  end
66
108
 
67
-
68
109
  def self.drop_database(repis = :default)
69
110
  uri = repository(repis).adapter.uri
70
111
  case repository(repis).adapter.class.name
71
- when /Mysql/
72
- setup_temp(uri, "mysql")
73
- repository(:tmp) do |repo|
74
- puts "Dropping (MySQL): #{uri.basename}"
75
- repo.adapter.execute "DROP DATABASE IF EXISTS `#{uri.basename}`"
76
- end
77
- when /Postgres/
78
- setup_temp(uri, "postgres")
79
- repository(:tmp) do |repo|
80
- puts "Dropping (PostgreSQL): #{uri.basename}"
81
- repo.adapter.execute "DROP DATABASE IF EXISTS #{uri.basename}"
82
- end
83
- when /Sqlite3/
84
- puts "Dropping (SQLite3): #{uri.basename}"
85
- db_dir = File.join(Mack.root, "db")
86
- FileUtils.rm_rf(File.join(db_dir.to_s, uri.basename))
87
- else
88
- raise "Task not supported for '#{repository(repis).adapter.class.name}'"
112
+ when /Mysql/
113
+ setup_temp(uri, "mysql")
114
+ repository(:tmp) do |repo|
115
+ puts "Dropping (MySQL): #{uri.basename}"
116
+ repo.adapter.execute "DROP DATABASE IF EXISTS `#{uri.basename}`"
117
+ end
118
+ when /Postgres/
119
+ setup_temp(uri, "postgres")
120
+ repository(:tmp) do |repo|
121
+ puts "Dropping (PostgreSQL): #{uri.basename}"
122
+ repo.adapter.execute "DROP DATABASE IF EXISTS #{uri.basename}"
123
+ end
124
+ when /Sqlite3/
125
+ puts "Dropping (SQLite3): #{uri.basename}"
126
+ db_dir = File.join(Mack.root, "db")
127
+ FileUtils.rm_rf(File.join(db_dir.to_s, uri.basename))
128
+ else
129
+ raise "Task not supported for '#{repository(repis).adapter.class.name}'"
89
130
  end
90
131
  end
91
132
 
@@ -0,0 +1,35 @@
1
+ require 'migration_runner'
2
+ include DataMapper::Types
3
+ module Mack
4
+ module Database
5
+ module Migrations
6
+
7
+ # Migrates the database to the latest version
8
+ def self.migrate
9
+ Mack::Database.establish_connection
10
+ DataMapper::MigrationRunner.reset!
11
+ migration_files.each { |mig| load mig }
12
+ DataMapper::MigrationRunner.migrate_up!
13
+ end
14
+
15
+ # Rolls back the database by the specified number of steps. Default is 1
16
+ def self.rollback(step = 1)
17
+ DataMapper::MigrationRunner.reset!
18
+ migration_files.each { |mig| load mig }
19
+ migrations = DataMapper::MigrationRunner.migrations.sort.reverse
20
+ step.times do |i|
21
+ migrations[migrations.size - (i + 1)].perform_down
22
+ end
23
+ end
24
+
25
+ def self.abort_if_pending_migrations
26
+ migration_files.each { |mig| load mig }
27
+ DataMapper::MigrationRunner.migrations.each do |mig|
28
+ raise Mack::Errors::UnrunMigrations.new(mig.name) if mig.send("needs_up?")
29
+ end
30
+ DataMapper::MigrationRunner.migrations.clear
31
+ end
32
+
33
+ end # Migrations
34
+ end # Database
35
+ end # Mack
@@ -1,6 +1,6 @@
1
- module DataMapper
2
- module Timestamp
3
- TIMESTAMP_PROPERTIES[:created_at] = lambda { |r| r.created_at = DateTime.now if r.new_record? && r.created_at.nil? }
4
- TIMESTAMP_PROPERTIES[:created_on] = lambda { |r| r.created_on = DateTime.now if r.new_record? && r.created_on.nil? }
1
+ module DataMapper # :nodoc:
2
+ module Timestamp # :nodoc:
3
+ TIMESTAMP_PROPERTIES[:created_at] = lambda { |r| r.created_at = DateTime.now if r.new_record? && r.created_at.nil? } # :nodoc:
4
+ TIMESTAMP_PROPERTIES[:created_on] = lambda { |r| r.created_on = DateTime.now if r.new_record? && r.created_on.nil? } # :nodoc:
5
5
  end
6
6
  end
@@ -17,5 +17,27 @@ module SQL # :nodoc:
17
17
  statement
18
18
  end
19
19
 
20
- end
21
- end
20
+ end # Sqlite3
21
+
22
+ class TableModifier # :nodoc:
23
+
24
+ def add_column(name, type, opts = {})
25
+ column = SQL::TableCreator::Column.new(@adapter, name, build_type(name, type), opts)
26
+ @statements << "ALTER TABLE #{quoted_table_name} ADD COLUMN #{column.to_sql}"
27
+ end
28
+
29
+ def change_column(name, type, opts = {})
30
+ # raise NotImplemented for SQLite3
31
+ @statements << "ALTER TABLE #{quoted_table_name} ALTER COLUMN #{quote_column_name(name)} TYPE #{build_type(name, type, opts).gsub(quote_column_name(name), '').gsub('NOT NULL', '')}"
32
+ end
33
+
34
+ def build_type(name, type_class, options = @opts)
35
+ schema = {:name => name.to_s, :quote_column_name => quote_column_name(name)}.merge(options)
36
+ schema[:serial?] ||= schema[:serial]
37
+ schema[:nullable?] ||= schema[:nullable]
38
+ schema = @adapter.class.type_map[type_class].merge(schema)
39
+ @adapter.property_schema_statement(schema)
40
+ end
41
+
42
+ end # TableModifier
43
+ end # SQL
@@ -0,0 +1,48 @@
1
+ module DataMapper # :nodoc:
2
+ module Model # :nodoc:
3
+
4
+ def property(name, type, options = {})
5
+ property = Property.new(self, name, type, options)
6
+
7
+ create_property_getter(property)
8
+ create_property_setter(property)
9
+
10
+ @properties[repository_name][property.name] = property
11
+
12
+ # Add property to the other mappings as well if this is for the default
13
+ # repository.
14
+ if repository_name == default_repository_name
15
+ @properties.each_pair do |repository_name, properties|
16
+ next if repository_name == default_repository_name
17
+ properties << property
18
+ end
19
+ end
20
+
21
+ # Add the property to the lazy_loads set for this resources repository
22
+ # only.
23
+ # TODO Is this right or should we add the lazy contexts to all
24
+ # repositories?
25
+ if property.lazy?
26
+ context = options.fetch(:lazy, :default)
27
+ context = :default if context == true
28
+
29
+ Array(context).each do |item|
30
+ @properties[repository_name].lazy_context(item) << name
31
+ end
32
+ end
33
+
34
+ # add the property to the child classes only if the property was
35
+ # added after the child classes' properties have been copied from
36
+ # the parent
37
+ if respond_to?(:descendants)
38
+ descendants.each do |model|
39
+ next if model.properties(repository_name).has_property?(name)
40
+ model.property(name, type, options)
41
+ end
42
+ end
43
+
44
+ property
45
+ end
46
+
47
+ end # module Model
48
+ end # module DataMapper