bborn-desert 0.5.3
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/CHANGES +50 -0
- data/MIT-LICENSE +20 -0
- data/README.rdoc +316 -0
- data/Rakefile +77 -0
- data/VERSION.yml +2 -0
- data/generators/desert_plugin/USAGE +14 -0
- data/generators/desert_plugin/desert_plugin_generator.rb +73 -0
- data/generators/desert_plugin/templates/desert_routes.rb +4 -0
- data/generators/desert_plugin/templates/empty_file +0 -0
- data/generators/desert_plugin/templates/plugin_migration.rb +11 -0
- data/generators/desert_plugin/templates/spec_helper.rb +8 -0
- data/init.rb +0 -0
- data/lib/desert.rb +14 -0
- data/lib/desert/manager.rb +131 -0
- data/lib/desert/plugin.rb +74 -0
- data/lib/desert/plugin_migrations.rb +11 -0
- data/lib/desert/plugin_migrations/1.2/extensions/schema_statements.rb +34 -0
- data/lib/desert/plugin_migrations/1.2/migrator.rb +33 -0
- data/lib/desert/plugin_migrations/2.1/extensions/schema_statements.rb +39 -0
- data/lib/desert/plugin_migrations/2.1/migrator.rb +35 -0
- data/lib/desert/plugin_migrations/migrator.rb +29 -0
- data/lib/desert/plugin_templates.rb +13 -0
- data/lib/desert/plugin_templates/1.2.0/action_mailer.rb +21 -0
- data/lib/desert/plugin_templates/1.2.0/action_view.rb +53 -0
- data/lib/desert/plugin_templates/1.99.0/action_mailer.rb +25 -0
- data/lib/desert/plugin_templates/1.99.0/action_view.rb +38 -0
- data/lib/desert/plugin_templates/2.0.0/action_mailer.rb +23 -0
- data/lib/desert/plugin_templates/2.0.2/action_view.rb +26 -0
- data/lib/desert/plugin_templates/2.1.0/action_view.rb +15 -0
- data/lib/desert/plugin_templates/2.2.0/action_mailer.rb +23 -0
- data/lib/desert/plugin_templates/2.2.0/action_view.rb +10 -0
- data/lib/desert/plugin_templates/action_controller.rb +12 -0
- data/lib/desert/plugin_templates/action_view.rb +17 -0
- data/lib/desert/rails.rb +10 -0
- data/lib/desert/rails/1.2.0/initializer.rb +20 -0
- data/lib/desert/rails/2.0.0/plugin.rb +22 -0
- data/lib/desert/rails/dependencies.rb +87 -0
- data/lib/desert/rails/migration.rb +36 -0
- data/lib/desert/rails/route_set.rb +23 -0
- data/lib/desert/ruby.rb +2 -0
- data/lib/desert/ruby/object.rb +34 -0
- data/lib/desert/supported_rails_versions.rb +12 -0
- data/lib/desert/tasks.rb +4 -0
- data/lib/desert/version_checker.rb +34 -0
- metadata +105 -0
data/VERSION.yml
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
NAME
|
2
|
+
desert_plugin - creates a directory structure and starter files for a new desert plugin
|
3
|
+
|
4
|
+
SYNOPSIS
|
5
|
+
desert_plugin [plugin name]
|
6
|
+
|
7
|
+
DESCRIPTION
|
8
|
+
|-- vendor
|
9
|
+
`-- plugins
|
10
|
+
`-- [plugin name]
|
11
|
+
|
12
|
+
EXAMPLE
|
13
|
+
./script/generate desert_plugin spiffy
|
14
|
+
|
@@ -0,0 +1,73 @@
|
|
1
|
+
require 'rails_generator'
|
2
|
+
require 'rails_generator/commands'
|
3
|
+
|
4
|
+
class DesertPluginGenerator < Rails::Generator::NamedBase
|
5
|
+
def manifest
|
6
|
+
record do |m|
|
7
|
+
m.directory "vendor/plugins/#{file_name}"
|
8
|
+
|
9
|
+
m.directory "vendor/plugins/#{file_name}/app"
|
10
|
+
m.directory "vendor/plugins/#{file_name}/app/controllers"
|
11
|
+
m.directory "vendor/plugins/#{file_name}/app/helpers"
|
12
|
+
m.directory "vendor/plugins/#{file_name}/app/models"
|
13
|
+
m.directory "vendor/plugins/#{file_name}/app/views"
|
14
|
+
|
15
|
+
m.directory "vendor/plugins/#{file_name}/config"
|
16
|
+
m.template "routes.rb", "vendor/plugins/#{file_name}/config/routes.rb"
|
17
|
+
m.map_route_from_plugin
|
18
|
+
|
19
|
+
m.directory "vendor/plugins/#{file_name}/db"
|
20
|
+
m.directory "vendor/plugins/#{file_name}/db/migrate"
|
21
|
+
# m.template "plugin_migration.rb", "vendor/plugins/#{file_name}/db/migrate/001_init_#{file_name}_plugin.rb"
|
22
|
+
|
23
|
+
m.directory "vendor/plugins/#{file_name}/lib"
|
24
|
+
|
25
|
+
m.directory "vendor/plugins/#{file_name}/spec"
|
26
|
+
m.directory "vendor/plugins/#{file_name}/spec/controllers"
|
27
|
+
m.directory "vendor/plugins/#{file_name}/spec/fixtures"
|
28
|
+
m.directory "vendor/plugins/#{file_name}/spec/models"
|
29
|
+
m.directory "vendor/plugins/#{file_name}/spec/views"
|
30
|
+
m.file "spec_helper.rb", "vendor/plugins/#{file_name}/spec/spec_helper.rb"
|
31
|
+
|
32
|
+
m.directory "vendor/plugins/#{file_name}/tasks"
|
33
|
+
|
34
|
+
m.file "empty_file", "vendor/plugins/#{file_name}/init.rb"
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
module Desert #:nodoc:
|
41
|
+
module Generator #:nodoc:
|
42
|
+
module Commands #:nodoc:
|
43
|
+
|
44
|
+
module Create
|
45
|
+
def map_route_from_plugin
|
46
|
+
logger.route "adding map.routes_from_plugin(:#{file_name}) to top of routes.rb"
|
47
|
+
sentinel = 'ActionController::Routing::Routes.draw do |map|'
|
48
|
+
gsub_file('config/routes.rb', /(#{Regexp.escape(sentinel)})/mi) do |match|
|
49
|
+
"#{match}\n map.routes_from_plugin(:#{file_name})\n"
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
module Destroy
|
55
|
+
def map_route_from_plugin
|
56
|
+
look_for = "\n map.routes_from_plugin(:#{file_name})\n"
|
57
|
+
logger.route "removing map.routes_from_plugin(:#{file_name}) from routes.rb"
|
58
|
+
gsub_file 'config/routes.rb', /(#{Regexp.escape(look_for)})/mi, ''
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
module List
|
63
|
+
def map_route_from_plugin
|
64
|
+
logger.route "adding map.routes_from_plugin(:#{file_name}) to top of routes.rb"
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
Rails::Generator::Commands::Create.send :include, Desert::Generator::Commands::Create
|
72
|
+
Rails::Generator::Commands::Destroy.send :include, Desert::Generator::Commands::Destroy
|
73
|
+
Rails::Generator::Commands::List.send :include, Desert::Generator::Commands::List
|
File without changes
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class Init<%= class_name %>Plugin < ActiveRecord::Migration
|
2
|
+
def self.up
|
3
|
+
create_table "<%= plural_name %>", :force => true do |t|
|
4
|
+
t.column "some_<%= file_name %>_column", :string
|
5
|
+
end
|
6
|
+
end
|
7
|
+
|
8
|
+
def self.down
|
9
|
+
drop_table :<%= plural_name %>
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,8 @@
|
|
1
|
+
ENV["RAILS_ENV"] = "test"
|
2
|
+
require File.expand_path(File.dirname(__FILE__) + "/../../../../config/environment")
|
3
|
+
require 'spec'
|
4
|
+
require 'spec/rails'
|
5
|
+
|
6
|
+
Spec::Runner.configure do |config|
|
7
|
+
config.fixture_path = "#{File.dirname(__FILE__)}/../spec/fixtures"
|
8
|
+
end
|
data/init.rb
ADDED
File without changes
|
data/lib/desert.rb
ADDED
@@ -0,0 +1,14 @@
|
|
1
|
+
require "active_support"
|
2
|
+
require "active_record"
|
3
|
+
require "action_controller"
|
4
|
+
require "action_mailer"
|
5
|
+
|
6
|
+
dir = File.dirname(__FILE__)
|
7
|
+
require "#{dir}/desert/supported_rails_versions"
|
8
|
+
require "#{dir}/desert/plugin"
|
9
|
+
require "#{dir}/desert/manager"
|
10
|
+
require "#{dir}/desert/version_checker"
|
11
|
+
require "#{dir}/desert/rails"
|
12
|
+
require "#{dir}/desert/ruby"
|
13
|
+
require "#{dir}/desert/plugin_migrations"
|
14
|
+
require "#{dir}/desert/plugin_templates"
|
@@ -0,0 +1,131 @@
|
|
1
|
+
module Desert
|
2
|
+
class Manager # nodoc
|
3
|
+
class << self
|
4
|
+
def instance
|
5
|
+
@instance ||= new
|
6
|
+
end
|
7
|
+
attr_writer :instance
|
8
|
+
|
9
|
+
protected
|
10
|
+
def method_missing(method_name, *args, &block)
|
11
|
+
instance.__send__(method_name, *args, &block)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
attr_reader :loading_plugin, :plugins_in_registration
|
16
|
+
|
17
|
+
def initialize
|
18
|
+
@plugins = []
|
19
|
+
@plugins_in_registration = []
|
20
|
+
end
|
21
|
+
|
22
|
+
def plugins
|
23
|
+
@plugins.dup
|
24
|
+
end
|
25
|
+
|
26
|
+
def load_paths
|
27
|
+
paths = []
|
28
|
+
plugin_paths.each do |component_root|
|
29
|
+
paths << File.join(component_root, 'app')
|
30
|
+
paths << File.join(component_root, 'app','models')
|
31
|
+
paths << File.join(component_root, 'app','controllers')
|
32
|
+
paths << File.join(component_root, 'app','helpers')
|
33
|
+
paths << File.join(component_root, 'app','sweepers')
|
34
|
+
paths << File.join(component_root, 'lib')
|
35
|
+
end
|
36
|
+
dependencies.load_paths.reverse_each do |path|
|
37
|
+
paths << File.expand_path(path)
|
38
|
+
end
|
39
|
+
paths.uniq!
|
40
|
+
paths
|
41
|
+
end
|
42
|
+
|
43
|
+
def register_plugin(plugin_path)
|
44
|
+
plugin = Plugin.new(plugin_path)
|
45
|
+
@plugins_in_registration << plugin
|
46
|
+
|
47
|
+
yield if block_given?
|
48
|
+
|
49
|
+
dependencies.load_paths << plugin.models_path
|
50
|
+
dependencies.load_paths << plugin.controllers_path
|
51
|
+
dependencies.load_paths << plugin.helpers_path
|
52
|
+
|
53
|
+
@plugins_in_registration.pop
|
54
|
+
|
55
|
+
if existing_plugin = find_plugin(plugin.name)
|
56
|
+
return existing_plugin
|
57
|
+
end
|
58
|
+
|
59
|
+
@plugins << plugin
|
60
|
+
plugin
|
61
|
+
end
|
62
|
+
|
63
|
+
def find_plugin(name_or_directory)
|
64
|
+
name = File.basename(File.expand_path(name_or_directory))
|
65
|
+
plugins.find do |plugin|
|
66
|
+
plugin.name == name
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def plugin_exists?(name_or_directory)
|
71
|
+
!find_plugin(name_or_directory).nil?
|
72
|
+
end
|
73
|
+
|
74
|
+
def plugin_path(name)
|
75
|
+
plugin = find_plugin(name)
|
76
|
+
return nil unless plugin
|
77
|
+
plugin.path
|
78
|
+
end
|
79
|
+
|
80
|
+
def files_on_load_path(file)
|
81
|
+
desert_file_exists = false
|
82
|
+
files = []
|
83
|
+
load_paths.each do |path|
|
84
|
+
full_path = File.join(path, file)
|
85
|
+
full_path << '.rb' unless File.extname(full_path) == '.rb'
|
86
|
+
files << full_path if File.exists?(full_path)
|
87
|
+
end
|
88
|
+
files
|
89
|
+
end
|
90
|
+
|
91
|
+
def directory_on_load_path?(dir_suffix)
|
92
|
+
Desert::Manager.load_paths.each do |path|
|
93
|
+
return true if File.directory?(File.join(path, dir_suffix))
|
94
|
+
end
|
95
|
+
return false
|
96
|
+
end
|
97
|
+
|
98
|
+
def layout_paths
|
99
|
+
layout_paths = plugins.reverse.collect do |plugin|
|
100
|
+
plugin.layouts_path
|
101
|
+
end
|
102
|
+
layout_paths
|
103
|
+
end
|
104
|
+
|
105
|
+
def require_all_files
|
106
|
+
all_files.each do |file|
|
107
|
+
require file
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def all_files
|
112
|
+
Desert::Manager.load_paths.inject([]) do |all, load_path|
|
113
|
+
all |= Dir["#{load_path}/**/*.rb"]
|
114
|
+
all
|
115
|
+
end
|
116
|
+
end
|
117
|
+
|
118
|
+
protected
|
119
|
+
def dependencies
|
120
|
+
@dependencies ||= ActiveSupport.const_defined?(:Dependencies) ? ActiveSupport::Dependencies : Dependencies
|
121
|
+
end
|
122
|
+
|
123
|
+
def plugin_paths
|
124
|
+
plugins_and_app.collect { |plugin| plugin.path }
|
125
|
+
end
|
126
|
+
|
127
|
+
def plugins_and_app
|
128
|
+
plugins + @plugins_in_registration + [Plugin.new(RAILS_ROOT)]
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,74 @@
|
|
1
|
+
module Desert
|
2
|
+
class Plugin # nodoc
|
3
|
+
attr_reader :name, :path
|
4
|
+
def initialize(path)
|
5
|
+
@path = File.expand_path(path)
|
6
|
+
@name = File.basename(@path)
|
7
|
+
end
|
8
|
+
|
9
|
+
def migration_path
|
10
|
+
"#{@path}/db/migrate"
|
11
|
+
end
|
12
|
+
|
13
|
+
# The path to the views for this plugin
|
14
|
+
def templates_path
|
15
|
+
"#{@path}/app/views"
|
16
|
+
end
|
17
|
+
|
18
|
+
def controllers_path
|
19
|
+
"#{@path}/app/controllers"
|
20
|
+
end
|
21
|
+
|
22
|
+
# TODO: Test me
|
23
|
+
def models_path
|
24
|
+
"#{@path}/app/models"
|
25
|
+
end
|
26
|
+
|
27
|
+
# TODO: Test me
|
28
|
+
def helpers_path
|
29
|
+
"#{@path}/app/helpers"
|
30
|
+
end
|
31
|
+
|
32
|
+
# The path to the layout for this plugin
|
33
|
+
def layouts_path
|
34
|
+
"#{templates_path}/layouts"
|
35
|
+
end
|
36
|
+
|
37
|
+
# Finds a template with the specified path
|
38
|
+
def find_template(template)
|
39
|
+
template_path = "#{templates_path}/#{template}"
|
40
|
+
File.exists?(template_path) ? template_path : nil
|
41
|
+
end
|
42
|
+
|
43
|
+
def framework_paths
|
44
|
+
# TODO: Don't include dirs for frameworks that are not used
|
45
|
+
%w(
|
46
|
+
railties
|
47
|
+
railties/lib
|
48
|
+
actionpack/lib
|
49
|
+
activesupport/lib
|
50
|
+
activerecord/lib
|
51
|
+
actionmailer/lib
|
52
|
+
actionwebservice/lib
|
53
|
+
).map { |dir| "#{framework_root_path}/#{dir}" }.select { |dir| File.directory?(dir) }
|
54
|
+
end
|
55
|
+
|
56
|
+
def ==(other)
|
57
|
+
self.path == other.path
|
58
|
+
end
|
59
|
+
|
60
|
+
def migration
|
61
|
+
@migration ||= PluginMigrations::Migrator.new(:up, migration_path)
|
62
|
+
end
|
63
|
+
|
64
|
+
def with_current_plugin
|
65
|
+
old_plugin = PluginMigrations::Migrator.current_plugin
|
66
|
+
begin
|
67
|
+
PluginMigrations::Migrator.current_plugin = self
|
68
|
+
yield
|
69
|
+
ensure
|
70
|
+
PluginMigrations::Migrator.current_plugin = old_plugin
|
71
|
+
end
|
72
|
+
end
|
73
|
+
end
|
74
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
dir = File.dirname(__FILE__)
|
2
|
+
|
3
|
+
dir = File.dirname(__FILE__)
|
4
|
+
require "#{dir}/plugin_migrations/migrator"
|
5
|
+
if ActiveRecord::ConnectionAdapters::SchemaStatements.instance_methods.include?('initialize_schema_information')
|
6
|
+
require "#{dir}/plugin_migrations/1.2/migrator"
|
7
|
+
require "#{dir}/plugin_migrations/1.2/extensions/schema_statements"
|
8
|
+
else
|
9
|
+
require "#{dir}/plugin_migrations/2.1/migrator"
|
10
|
+
require "#{dir}/plugin_migrations/2.1/extensions/schema_statements"
|
11
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
ActiveRecord::ConnectionAdapters::SchemaStatements.module_eval do
|
2
|
+
def initialize_schema_information_with_plugins
|
3
|
+
initialize_schema_information_without_plugins
|
4
|
+
|
5
|
+
begin
|
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
|
+
end
|
10
|
+
end
|
11
|
+
alias_method_chain :initialize_schema_information, :plugins
|
12
|
+
|
13
|
+
def dump_schema_information_with_plugins
|
14
|
+
schema_information = []
|
15
|
+
|
16
|
+
dump = dump_schema_information_without_plugins
|
17
|
+
schema_information << dump if dump
|
18
|
+
|
19
|
+
begin
|
20
|
+
plugins = ActiveRecord::Base.connection.select_all("SELECT * FROM #{Desert::PluginMigrations::Migrator.schema_info_table_name}")
|
21
|
+
plugins.each do |plugin|
|
22
|
+
if (version = plugin['version'].to_i) > 0
|
23
|
+
plugin_name = ActiveRecord::Base.quote_value(plugin['plugin_name'])
|
24
|
+
schema_information << "INSERT INTO #{Desert::PluginMigrations::Migrator.schema_info_table_name} (plugin_name, version) VALUES (#{plugin_name}, #{version})"
|
25
|
+
end
|
26
|
+
end
|
27
|
+
rescue ActiveRecord::StatementInvalid
|
28
|
+
# No Schema Info
|
29
|
+
end
|
30
|
+
|
31
|
+
schema_information.join(";\n")
|
32
|
+
end
|
33
|
+
alias_method_chain :dump_schema_information, :plugins
|
34
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module Desert #:nodoc:
|
2
|
+
module PluginMigrations
|
3
|
+
class Migrator < ActiveRecord::Migrator
|
4
|
+
class << self
|
5
|
+
def current_version #:nodoc:
|
6
|
+
result = ActiveRecord::Base.connection.select_one("SELECT version FROM #{schema_info_table_name} WHERE plugin_name = '#{current_plugin.name}'")
|
7
|
+
if result
|
8
|
+
result['version'].to_i
|
9
|
+
else
|
10
|
+
# There probably isn't an entry for this plugin in the migration info table.
|
11
|
+
0
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def set_schema_version(version)
|
17
|
+
version = down? ? version.to_i - 1 : version.to_i
|
18
|
+
|
19
|
+
if ActiveRecord::Base.connection.select_one("SELECT version FROM #{self.class.schema_info_table_name} WHERE plugin_name = '#{current_plugin.name}'").nil?
|
20
|
+
# We need to create the entry since it doesn't exist
|
21
|
+
ActiveRecord::Base.connection.execute("INSERT INTO #{self.class.schema_info_table_name} (version, plugin_name) VALUES (#{version},'#{current_plugin.name}')")
|
22
|
+
else
|
23
|
+
ActiveRecord::Base.connection.update("UPDATE #{self.class.schema_info_table_name} SET version = #{version} WHERE plugin_name = '#{current_plugin.name}'")
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
def migrated
|
28
|
+
current_plugin_version = self.class.current_version
|
29
|
+
(1..current_plugin_version).to_a
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
ActiveRecord::ConnectionAdapters::SchemaStatements.module_eval do
|
2
|
+
def initialize_schema_migrations_table_with_plugins
|
3
|
+
initialize_schema_migrations_table_without_plugins
|
4
|
+
|
5
|
+
begin
|
6
|
+
smt = Desert::PluginMigrations::Migrator.schema_migrations_table_name
|
7
|
+
unless ActiveRecord::Base.connection.tables.include?(smt)
|
8
|
+
execute "CREATE TABLE #{smt} (plugin_name #{type_to_sql(:string)}, version #{type_to_sql(:string)})"
|
9
|
+
end
|
10
|
+
old_smt = Desert::PluginMigrations::Migrator.schema_info_table_name
|
11
|
+
if ActiveRecord::Base.connection.tables.include?(old_smt)
|
12
|
+
plugins_and_versions = select_all("SELECT plugin_name, version from #{old_smt}")
|
13
|
+
plugins_and_versions.each do |plugin_data|
|
14
|
+
plugin_name, version = plugin_data["plugin_name"], plugin_data["version"]
|
15
|
+
plugin = Desert::Manager.find_plugin(plugin_name)
|
16
|
+
migration_versions = Dir["#{plugin.migration_path}/*.rb"].map do |path|
|
17
|
+
File.basename(path, ".rb")
|
18
|
+
end.select do |migration|
|
19
|
+
# Make sure versions don't start with zero, or Integer will interpret them as octal
|
20
|
+
version_from_table_stripped = version.sub(/^0*/, '')
|
21
|
+
migration_version_stripped = migration.split("_").first.sub(/^0*/, '')
|
22
|
+
Integer(migration_version_stripped) <= Integer(version_from_table_stripped)
|
23
|
+
end
|
24
|
+
migration_versions.each do |migration_version|
|
25
|
+
insert_sql = ActiveRecord::Base.send(:sanitize_sql, [
|
26
|
+
"INSERT INTO #{Desert::PluginMigrations::Migrator.schema_migrations_table_name}(plugin_name, version) VALUES(?, ?)",
|
27
|
+
plugin_name,
|
28
|
+
Integer(migration_version.split("_").first.sub(/^0*/, ''))
|
29
|
+
])
|
30
|
+
execute insert_sql
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
rescue ActiveRecord::StatementInvalid
|
35
|
+
# Schema has been initialized
|
36
|
+
end
|
37
|
+
end
|
38
|
+
alias_method_chain :initialize_schema_migrations_table, :plugins
|
39
|
+
end
|