desert 0.5.3 → 0.5.4
Sign up to get free protection for your applications and to get access to all the features.
- data/CHANGES +3 -1
- data/VERSION.yml +1 -1
- data/lib/desert/plugin_migrations/1.2/extensions/schema_statements.rb +3 -7
- data/lib/desert/plugin_migrations/1.2/migrator.rb +12 -6
- data/lib/desert/plugin_migrations/2.1/extensions/schema_statements.rb +21 -21
- data/lib/desert/plugin_migrations/migrator.rb +5 -1
- data/lib/desert/rails/migration.rb +3 -12
- metadata +12 -7
data/CHANGES
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
0.5.4
|
2
|
+
- Fixed migration problems when using postgres
|
3
|
+
|
1
4
|
0.5.3
|
2
5
|
- optimize load_paths, use uniq!
|
3
6
|
- correct bad SQL for recording migrations in plugin_schema_migrations
|
@@ -47,4 +50,3 @@
|
|
47
50
|
0.1.0
|
48
51
|
- Fixed [#13346] ActionController::Base.helper raises error when helper is only in plugin
|
49
52
|
- Desert does not require files that have been required before Desert was loaded
|
50
|
-
|
data/VERSION.yml
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
---
|
2
|
-
:version: 0.5.
|
2
|
+
:version: 0.5.4
|
@@ -2,10 +2,8 @@ ActiveRecord::ConnectionAdapters::SchemaStatements.module_eval do
|
|
2
2
|
def initialize_schema_information_with_plugins
|
3
3
|
initialize_schema_information_without_plugins
|
4
4
|
|
5
|
-
|
5
|
+
unless Desert::PluginMigrations::Migrator.legacy_schema_table_exists?
|
6
6
|
execute "CREATE TABLE #{Desert::PluginMigrations::Migrator.schema_info_table_name} (plugin_name #{type_to_sql(:string)}, version #{type_to_sql(:integer)})"
|
7
|
-
rescue ActiveRecord::StatementInvalid
|
8
|
-
# Schema has been initialized
|
9
7
|
end
|
10
8
|
end
|
11
9
|
alias_method_chain :initialize_schema_information, :plugins
|
@@ -16,7 +14,7 @@ ActiveRecord::ConnectionAdapters::SchemaStatements.module_eval do
|
|
16
14
|
dump = dump_schema_information_without_plugins
|
17
15
|
schema_information << dump if dump
|
18
16
|
|
19
|
-
|
17
|
+
if Desert::PluginMigrations::Migrator.legacy_schema_table_exists?
|
20
18
|
plugins = ActiveRecord::Base.connection.select_all("SELECT * FROM #{Desert::PluginMigrations::Migrator.schema_info_table_name}")
|
21
19
|
plugins.each do |plugin|
|
22
20
|
if (version = plugin['version'].to_i) > 0
|
@@ -24,11 +22,9 @@ ActiveRecord::ConnectionAdapters::SchemaStatements.module_eval do
|
|
24
22
|
schema_information << "INSERT INTO #{Desert::PluginMigrations::Migrator.schema_info_table_name} (plugin_name, version) VALUES (#{plugin_name}, #{version})"
|
25
23
|
end
|
26
24
|
end
|
27
|
-
rescue ActiveRecord::StatementInvalid
|
28
|
-
# No Schema Info
|
29
25
|
end
|
30
26
|
|
31
27
|
schema_information.join(";\n")
|
32
28
|
end
|
33
29
|
alias_method_chain :dump_schema_information, :plugins
|
34
|
-
end
|
30
|
+
end
|
@@ -3,7 +3,11 @@ module Desert #:nodoc:
|
|
3
3
|
class Migrator < ActiveRecord::Migrator
|
4
4
|
class << self
|
5
5
|
def current_version #:nodoc:
|
6
|
-
|
6
|
+
if legacy_schema_table_exists?
|
7
|
+
result = ActiveRecord::Base.connection.select_one("SELECT version FROM #{schema_info_table_name} WHERE plugin_name = '#{current_plugin.name}'")
|
8
|
+
else
|
9
|
+
result = nil
|
10
|
+
end
|
7
11
|
if result
|
8
12
|
result['version'].to_i
|
9
13
|
else
|
@@ -16,11 +20,13 @@ module Desert #:nodoc:
|
|
16
20
|
def set_schema_version(version)
|
17
21
|
version = down? ? version.to_i - 1 : version.to_i
|
18
22
|
|
19
|
-
if
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
23
|
+
if self.class.legacy_schema_table_exists?
|
24
|
+
if ActiveRecord::Base.connection.select_one("SELECT version FROM #{self.class.schema_info_table_name} WHERE plugin_name = '#{current_plugin.name}'").nil?
|
25
|
+
# We need to create the entry since it doesn't exist
|
26
|
+
ActiveRecord::Base.connection.execute("INSERT INTO #{self.class.schema_info_table_name} (version, plugin_name) VALUES (#{version},'#{current_plugin.name}')")
|
27
|
+
else
|
28
|
+
ActiveRecord::Base.connection.update("UPDATE #{self.class.schema_info_table_name} SET version = #{version} WHERE plugin_name = '#{current_plugin.name}'")
|
29
|
+
end
|
24
30
|
end
|
25
31
|
end
|
26
32
|
|
@@ -7,29 +7,29 @@ ActiveRecord::ConnectionAdapters::SchemaStatements.module_eval do
|
|
7
7
|
unless ActiveRecord::Base.connection.tables.include?(smt)
|
8
8
|
execute "CREATE TABLE #{smt} (plugin_name #{type_to_sql(:string)}, version #{type_to_sql(:string)})"
|
9
9
|
end
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
10
|
+
if Desert::PluginMigrations::Migrator.legacy_schema_table_exists?
|
11
|
+
plugins_and_versions = select_all("SELECT plugin_name, version from #{Desert::PluginMigrations::Migrator.schema_info_table_name}")
|
12
|
+
plugins_and_versions.each do |plugin_data|
|
13
|
+
plugin_name, version = plugin_data["plugin_name"], plugin_data["version"]
|
14
|
+
plugin = Desert::Manager.find_plugin(plugin_name)
|
15
|
+
migration_versions = Dir["#{plugin.migration_path}/*.rb"].map do |path|
|
16
|
+
File.basename(path, ".rb")
|
17
|
+
end.select do |migration|
|
18
|
+
# Make sure versions don't start with zero, or Integer will interpret them as octal
|
19
|
+
version_from_table_stripped = version.to_s.sub(/^0*/, '')
|
20
|
+
migration_version_stripped = migration.split("_").first.sub(/^0*/, '')
|
21
|
+
Integer(migration_version_stripped) <= Integer(version_from_table_stripped)
|
22
|
+
end
|
23
|
+
migration_versions.each do |migration_version|
|
24
|
+
insert_sql = ActiveRecord::Base.send(:sanitize_sql, [
|
25
|
+
"INSERT INTO #{Desert::PluginMigrations::Migrator.schema_migrations_table_name}(plugin_name, version) VALUES(?, ?)",
|
26
|
+
plugin_name,
|
27
|
+
Integer(migration_version.split("_").first.sub(/^0*/, ''))
|
28
|
+
])
|
29
|
+
execute insert_sql
|
30
|
+
end
|
29
31
|
end
|
30
32
|
end
|
31
|
-
rescue ActiveRecord::StatementInvalid
|
32
|
-
# Schema has been initialized
|
33
33
|
end
|
34
34
|
end
|
35
35
|
alias_method_chain :initialize_schema_migrations_table, :plugins
|
@@ -23,7 +23,11 @@ module Desert #:nodoc:
|
|
23
23
|
def schema_migrations_table_name
|
24
24
|
ActiveRecord::Base.table_name_prefix + 'plugin_schema_migrations' + ActiveRecord::Base.table_name_suffix
|
25
25
|
end
|
26
|
+
|
27
|
+
def legacy_schema_table_exists?
|
28
|
+
ActiveRecord::Base.connection.tables.include? schema_info_table_name
|
29
|
+
end
|
26
30
|
end
|
27
31
|
end
|
28
32
|
end
|
29
|
-
end
|
33
|
+
end
|
@@ -15,22 +15,13 @@ class ActiveRecord::Migration
|
|
15
15
|
raise ArgumentError, "No plugin found named #{plugin_name}"
|
16
16
|
end
|
17
17
|
|
18
|
-
def table_exists?(table_name)
|
19
|
-
vals = select_all("DESC #{table_name}")
|
20
|
-
return true
|
21
|
-
rescue ActiveRecord::StatementInvalid
|
22
|
-
return false
|
23
|
-
end
|
24
|
-
|
25
18
|
def column_exists?(table_name, column_name)
|
26
|
-
|
27
|
-
return true
|
28
|
-
rescue ActiveRecord::StatementInvalid
|
29
|
-
return false
|
19
|
+
!ActiveRecord::Base.connection.columns(table_name).detect {|c| c.name == column_name }.nil?
|
30
20
|
end
|
21
|
+
|
31
22
|
def table_exists?(table_name)
|
32
23
|
ActiveRecord::Base.connection.tables.include? table_name
|
33
24
|
end
|
34
25
|
end
|
35
26
|
extend DesertMigration
|
36
|
-
end
|
27
|
+
end
|
metadata
CHANGED
@@ -1,15 +1,18 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: desert
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 5
|
8
|
+
- 4
|
9
|
+
version: 0.5.4
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Pivotal Labs
|
8
13
|
- Brian Takita
|
9
14
|
- Parker Thompson
|
10
|
-
- Adam Milligan
|
11
|
-
- Joe Moore
|
12
|
-
- Josh Susser
|
15
|
+
- Adam Milligan, Joe Moore
|
13
16
|
autorequire:
|
14
17
|
bindir: bin
|
15
18
|
cert_chain: []
|
@@ -88,18 +91,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
88
91
|
requirements:
|
89
92
|
- - ">="
|
90
93
|
- !ruby/object:Gem::Version
|
94
|
+
segments:
|
95
|
+
- 0
|
91
96
|
version: "0"
|
92
|
-
version:
|
93
97
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
94
98
|
requirements:
|
95
99
|
- - ">="
|
96
100
|
- !ruby/object:Gem::Version
|
101
|
+
segments:
|
102
|
+
- 0
|
97
103
|
version: "0"
|
98
|
-
version:
|
99
104
|
requirements: []
|
100
105
|
|
101
106
|
rubyforge_project: desert
|
102
|
-
rubygems_version: 1.3.
|
107
|
+
rubygems_version: 1.3.6
|
103
108
|
signing_key:
|
104
109
|
specification_version: 3
|
105
110
|
summary: Desert is a component framework for Rails that allows your plugins to be packaged as mini Rails apps.
|