mack-data_mapper 0.6.1.2 → 0.7.0

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