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.
- data/doc/classes/Mack.html +6 -6
- data/doc/classes/Mack/Database.html +119 -18
- data/doc/classes/Mack/Database/Generators.html +140 -0
- data/doc/classes/Mack/Database/Migrations.html +206 -0
- data/doc/classes/Mack/Testing/DataMapperHelpers.html +6 -6
- data/doc/classes/Mack/ViewHelpers/DataMapperHelpers.html +30 -124
- data/doc/created.rid +1 -1
- data/doc/files/lib/mack-data_mapper/database_migrations_rb.html +115 -0
- data/doc/files/lib/mack-data_mapper/database_rb.html +1 -1
- data/doc/files/lib/mack-data_mapper/dm_patches/dm-timestamps_rb.html +1 -1
- data/doc/files/lib/mack-data_mapper/dm_patches/migrations_rb.html +1 -1
- data/doc/files/lib/mack-data_mapper/{genosaurus_helpers_rb.html → dm_patches/model_rb.html} +5 -5
- data/doc/files/lib/mack-data_mapper/{scaffold_generator/scaffold_generator_rb.html → dm_patches/property_set_rb.html} +4 -17
- data/doc/{classes/DataMapper/Timestamp.html → files/lib/mack-data_mapper/dm_patches/validations_rb.html} +16 -20
- data/doc/files/lib/mack-data_mapper/{model_column_rb.html → generators_rb.html} +4 -4
- data/doc/files/lib/mack-data_mapper/helpers/orm_helpers_rb.html +1 -1
- data/doc/files/lib/mack-data_mapper/migration_generator/migration_generator_rb.html +1 -1
- data/doc/files/lib/mack-data_mapper/model_generator/model_generator_rb.html +1 -1
- data/doc/files/lib/mack-data_mapper_rb.html +2 -1
- data/doc/files/lib/mack-data_mapper_tasks_rb.html +8 -1
- data/doc/fr_class_index.html +2 -2
- data/doc/fr_file_index.html +5 -3
- data/doc/fr_method_index.html +10 -7
- data/lib/mack-data_mapper.rb +4 -5
- data/lib/mack-data_mapper/database.rb +79 -38
- data/lib/mack-data_mapper/database_migrations.rb +35 -0
- data/lib/mack-data_mapper/dm_patches/dm-timestamps.rb +4 -4
- data/lib/mack-data_mapper/dm_patches/migrations.rb +24 -2
- data/lib/mack-data_mapper/dm_patches/model.rb +48 -0
- data/lib/mack-data_mapper/dm_patches/property_set.rb +15 -0
- data/lib/mack-data_mapper/dm_patches/validations.rb +15 -0
- data/lib/mack-data_mapper/generators.rb +11 -0
- data/lib/mack-data_mapper/helpers/orm_helpers.rb +8 -32
- data/lib/mack-data_mapper/migration_generator/migration_generator.rb +1 -1
- data/lib/mack-data_mapper/model_generator/manifest.yml +2 -2
- data/lib/mack-data_mapper/model_generator/model_generator.rb +1 -1
- data/lib/mack-data_mapper_tasks.rb +1 -0
- metadata +42 -29
- data/doc/classes/ScaffoldGenerator.html +0 -123
- data/lib/mack-data_mapper/genosaurus_helpers.rb +0 -40
- data/lib/mack-data_mapper/model_column.rb +0 -42
- data/lib/mack-data_mapper/scaffold_generator/manifest.yml +0 -35
- data/lib/mack-data_mapper/scaffold_generator/scaffold_generator.rb +0 -41
- data/lib/mack-data_mapper/scaffold_generator/templates/app/helpers/controllers/helper.rb.template +0 -7
- data/lib/mack-data_mapper/scaffold_generator/templates/app/views/edit.html.erb.template +0 -19
- data/lib/mack-data_mapper/scaffold_generator/templates/app/views/index.html.erb.template +0 -41
- data/lib/mack-data_mapper/scaffold_generator/templates/app/views/new.html.erb.template +0 -19
- data/lib/mack-data_mapper/scaffold_generator/templates/app/views/show.html.erb.template +0 -12
- data/lib/mack-data_mapper/scaffold_generator/templates/test/functional/rspec.rb.template +0 -47
- data/lib/mack-data_mapper/scaffold_generator/templates/test/functional/test_case.rb.template +0 -9
- data/lib/mack-data_mapper/tasks/db_create_drop_tasks.rake +0 -57
- data/lib/mack-data_mapper/tasks/db_migration_tasks.rake +0 -46
- 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:
|
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>
|
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/
|
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>
|
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>
|
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
|
77
77
|
genosaurus
|
78
|
+
mack-orm
|
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>
|
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
|
77
|
+
</div>
|
78
|
+
</div>
|
72
79
|
|
73
80
|
</div>
|
74
81
|
|
data/doc/fr_class_index.html
CHANGED
@@ -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>
|
data/doc/fr_file_index.html
CHANGED
@@ -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/
|
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>
|
data/doc/fr_method_index.html
CHANGED
@@ -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#
|
24
|
-
<a href="classes/Mack/Database.html#M000008">
|
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#
|
27
|
-
<a href="classes/Mack/
|
28
|
-
<a href="classes/Mack/
|
29
|
-
<a href="classes/Mack/
|
30
|
-
<a href="classes/Mack/Testing/DataMapperHelpers.html#
|
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>
|
data/lib/mack-data_mapper.rb
CHANGED
@@ -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.
|
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
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
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
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
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
|
-
|
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
|