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