combustion 0.5.4 → 0.5.5
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +9 -7
- data/combustion.gemspec +1 -1
- data/lib/combustion/database.rb +20 -181
- data/lib/combustion/database/load_schema.rb +26 -0
- data/lib/combustion/database/migrate.rb +40 -0
- data/lib/combustion/database/reset.rb +53 -0
- data/lib/combustion/databases/base.rb +22 -0
- data/lib/combustion/databases/firebird.rb +6 -0
- data/lib/combustion/databases/mysql.rb +71 -0
- data/lib/combustion/databases/oracle.rb +8 -0
- data/lib/combustion/databases/postgresql.rb +39 -0
- data/lib/combustion/databases/sql_server.rb +6 -0
- data/lib/combustion/databases/sqlite.rb +35 -0
- metadata +12 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3267619b0496c3956bfa0bd994939298763e4aed
|
4
|
+
data.tar.gz: ef5c03a4638db69326a76bd2aa949a20f321ab84
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 14fa5db249addbd51fee818b3bc8954ba455313e93388e8e9b044a931d9d9c1276605dfb50b59fe4f603e3a180a8b6533fdbface66ff247d94a64d886ca63cb3
|
7
|
+
data.tar.gz: 43b4c7cc7b9e35c5a2e1d8d772c5924b54e732580ab6b7cba5cddc1771d0124ce6f668bf9cca68f744c7d6b30f8d7edcbf512239d6e3698d0079163b73e719dc
|
data/README.md
CHANGED
@@ -10,25 +10,27 @@ Get the gem into either your gemspec or your Gemfile, depending on how you manag
|
|
10
10
|
|
11
11
|
```ruby
|
12
12
|
# gemspec
|
13
|
-
gem.add_development_dependency 'combustion', '~> 0.5.
|
13
|
+
gem.add_development_dependency 'combustion', '~> 0.5.5'
|
14
14
|
|
15
15
|
# Gemfile
|
16
|
-
gem 'combustion', '~> 0.5.
|
16
|
+
gem 'combustion', '~> 0.5.5', :group => :test
|
17
17
|
```
|
18
18
|
|
19
19
|
In your `spec_helper.rb`, get Combustion to set itself up - which has to happen before you introduce `rspec/rails` and - if being used - `capybara/rails`. Here's an example within context:
|
20
20
|
|
21
21
|
```ruby
|
22
|
-
require '
|
23
|
-
require 'bundler/setup'
|
22
|
+
require 'bundler'
|
24
23
|
|
25
|
-
require
|
26
|
-
require 'capybara/rspec'
|
24
|
+
Bundler.require :default, :development
|
27
25
|
|
26
|
+
# If you're using all parts of Rails:
|
28
27
|
Combustion.initialize! :all
|
28
|
+
# Or, load just what you need:
|
29
|
+
# Combustion.initialize! :active_record, :action_controller
|
29
30
|
|
30
31
|
require 'rspec/rails'
|
31
|
-
|
32
|
+
# If you're using Capybara:
|
33
|
+
# require 'capybara/rails'
|
32
34
|
|
33
35
|
RSpec.configure do |config|
|
34
36
|
config.use_transactional_fixtures = true
|
data/combustion.gemspec
CHANGED
data/lib/combustion/database.rb
CHANGED
@@ -1,186 +1,25 @@
|
|
1
1
|
module Combustion
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
load_schema
|
6
|
-
migrate
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.reset_database
|
10
|
-
ActiveRecord::Base.configurations = YAML.load(ERB.new(File.read("#{Rails.root}/config/database.yml")).result)
|
11
|
-
abcs = ActiveRecord::Base.configurations
|
12
|
-
case abcs['test']['adapter']
|
13
|
-
when /mysql/
|
14
|
-
drop_database(abcs['test']['database'])
|
15
|
-
create_database(abcs['test'])
|
16
|
-
ActiveRecord::Base.establish_connection(:test)
|
17
|
-
when /postgresql/
|
18
|
-
ActiveRecord::Base.clear_active_connections!
|
19
|
-
drop_database(abcs['test'])
|
20
|
-
create_database(abcs['test'])
|
21
|
-
when /sqlite/
|
22
|
-
drop_database(abcs['test'])
|
23
|
-
create_database(abcs['test'])
|
24
|
-
when 'sqlserver'
|
25
|
-
test = abcs.deep_dup['test']
|
26
|
-
test_database = test['database']
|
27
|
-
test['database'] = 'master'
|
28
|
-
ActiveRecord::Base.establish_connection(test)
|
29
|
-
ActiveRecord::Base.connection.recreate_database!(test_database)
|
30
|
-
when "oci", "oracle"
|
31
|
-
ActiveRecord::Base.establish_connection(:test)
|
32
|
-
ActiveRecord::Base.connection.structure_drop.split(";\n\n").each do |ddl|
|
33
|
-
ActiveRecord::Base.connection.execute(ddl)
|
34
|
-
end
|
35
|
-
when 'firebird'
|
36
|
-
ActiveRecord::Base.establish_connection(:test)
|
37
|
-
ActiveRecord::Base.connection.recreate_database!
|
38
|
-
else
|
39
|
-
raise "Cannot reset databases for '#{abcs['test']['adapter']}'"
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
def self.load_schema
|
44
|
-
case Combustion.schema_format
|
45
|
-
when :ruby
|
46
|
-
load Rails.root.join('db', 'schema.rb')
|
47
|
-
when :sql
|
48
|
-
ActiveRecord::Base.connection.execute(
|
49
|
-
File.read(Rails.root.join('db', 'structure.sql'))
|
50
|
-
)
|
51
|
-
else
|
52
|
-
raise "Unknown schema format: #{Combustion.schema_format}"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
|
56
|
-
def self.migrate
|
57
|
-
migrator = ActiveRecord::Migrator
|
58
|
-
engine_path = Rails.application.root.sub(::Combustion.path, '')
|
59
|
-
engine_migration_paths = Rails.application.paths['db/migrate'].to_a
|
60
|
-
|
61
|
-
if engine_migration_paths.include?(engine_path.join('db/migrate').to_s)
|
62
|
-
paths = []
|
63
|
-
else
|
64
|
-
paths = base_migration_paths
|
65
|
-
end
|
66
|
-
|
67
|
-
paths += engine_migration_paths
|
68
|
-
paths.uniq!
|
69
|
-
|
70
|
-
# Append the migrations inside the internal app's db/migrate directory
|
71
|
-
paths << File.join(Rails.root, 'db/migrate')
|
72
|
-
|
73
|
-
if ActiveRecord::VERSION::STRING >= '3.1.0'
|
74
|
-
migrator.migrate paths, nil
|
75
|
-
else
|
76
|
-
paths.each { |path| migrator.migrate path, nil }
|
77
|
-
end
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
def self.base_migration_paths
|
83
|
-
if ActiveRecord::Migrator.respond_to?(:migrations_paths)
|
84
|
-
ActiveRecord::Migrator.migrations_paths
|
85
|
-
else
|
86
|
-
Array('db/migrate/')
|
87
|
-
end
|
88
|
-
end
|
89
|
-
|
90
|
-
def self.create_database(config)
|
91
|
-
begin
|
92
|
-
if config['adapter'] =~ /sqlite/
|
93
|
-
if File.exist?(config['database'])
|
94
|
-
$stderr.puts "#{config['database']} already exists"
|
95
|
-
else
|
96
|
-
begin
|
97
|
-
# Create the SQLite database
|
98
|
-
ActiveRecord::Base.establish_connection(config)
|
99
|
-
ActiveRecord::Base.connection
|
100
|
-
rescue Exception => e
|
101
|
-
$stderr.puts e, *(e.backtrace)
|
102
|
-
$stderr.puts "Couldn't create database for #{config.inspect}"
|
103
|
-
end
|
104
|
-
end
|
105
|
-
return # Skip the else clause of begin/rescue
|
106
|
-
else
|
107
|
-
ActiveRecord::Base.establish_connection(config)
|
108
|
-
ActiveRecord::Base.connection
|
109
|
-
end
|
110
|
-
rescue
|
111
|
-
case config['adapter']
|
112
|
-
when /^(jdbc)?mysql/
|
113
|
-
if config['adapter'] =~ /jdbc/
|
114
|
-
#FIXME After Jdbcmysql gives this class
|
115
|
-
require 'active_record/railties/jdbcmysql_error'
|
116
|
-
error_class = ArJdbcMySQL::Error
|
117
|
-
else
|
118
|
-
error_class = config['adapter'] =~ /mysql2/ && defined?(Mysql2) ? Mysql2::Error : Mysql::Error
|
119
|
-
end
|
120
|
-
access_denied_error = 1045
|
121
|
-
begin
|
122
|
-
ActiveRecord::Base.establish_connection(config.merge('database' => nil))
|
123
|
-
ActiveRecord::Base.connection.create_database(config['database'], mysql_creation_options(config))
|
124
|
-
ActiveRecord::Base.establish_connection(config)
|
125
|
-
rescue error_class => sqlerr
|
126
|
-
if sqlerr.errno == access_denied_error
|
127
|
-
print "#{sqlerr.error}. \nPlease provide the root password for your mysql installation\n>"
|
128
|
-
root_password = $stdin.gets.strip
|
129
|
-
grant_statement = "GRANT ALL PRIVILEGES ON #{config['database']}.* " \
|
130
|
-
"TO '#{config['username']}'@'localhost' " \
|
131
|
-
"IDENTIFIED BY '#{config['password']}' WITH GRANT OPTION;"
|
132
|
-
ActiveRecord::Base.establish_connection(config.merge(
|
133
|
-
'database' => nil, 'username' => 'root', 'password' => root_password))
|
134
|
-
ActiveRecord::Base.connection.create_database(config['database'], mysql_creation_options(config))
|
135
|
-
ActiveRecord::Base.connection.execute grant_statement
|
136
|
-
ActiveRecord::Base.establish_connection(config)
|
137
|
-
else
|
138
|
-
$stderr.puts sqlerr.error
|
139
|
-
$stderr.puts "Couldn't create database for #{config.inspect}, charset: #{config['charset'] || @charset}, collation: #{config['collation'] || @collation}"
|
140
|
-
$stderr.puts "(if you set the charset manually, make sure you have a matching collation)" if config['charset']
|
141
|
-
end
|
142
|
-
end
|
143
|
-
when /^(jdbc)?postgresql$/
|
144
|
-
@encoding = config['encoding'] || ENV['CHARSET'] || 'utf8'
|
145
|
-
begin
|
146
|
-
ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
|
147
|
-
ActiveRecord::Base.connection.create_database(config['database'], config.merge('encoding' => @encoding))
|
148
|
-
ActiveRecord::Base.establish_connection(config)
|
149
|
-
rescue Exception => e
|
150
|
-
$stderr.puts e, *(e.backtrace)
|
151
|
-
$stderr.puts "Couldn't create database for #{config.inspect}"
|
152
|
-
end
|
153
|
-
end
|
154
|
-
else
|
155
|
-
$stderr.puts "#{config['database']} already exists"
|
156
|
-
end
|
157
|
-
end
|
158
|
-
|
159
|
-
def self.drop_database(config)
|
160
|
-
case config['adapter']
|
161
|
-
when /^(jdbc)?mysql/
|
162
|
-
ActiveRecord::Base.establish_connection(config)
|
163
|
-
ActiveRecord::Base.connection.drop_database config['database']
|
164
|
-
when /^(jdbc)?sqlite/
|
165
|
-
require 'pathname'
|
166
|
-
path = Pathname.new(config['database'])
|
167
|
-
file = path.absolute? ? path.to_s : File.join(Rails.root, path)
|
168
|
-
|
169
|
-
FileUtils.rm_f(file) if File.exist?(file)
|
170
|
-
when /^(jdbc)?postgresql$/
|
171
|
-
ActiveRecord::Base.establish_connection(config.merge('database' => 'postgres', 'schema_search_path' => 'public'))
|
172
|
-
ActiveRecord::Base.connection.drop_database config['database']
|
173
|
-
end
|
174
|
-
end
|
175
|
-
|
176
|
-
def self.mysql_creation_options(config)
|
177
|
-
@charset = ENV['CHARSET'] || 'utf8'
|
178
|
-
@collation = ENV['COLLATION'] || 'utf8_unicode_ci'
|
2
|
+
module Databases
|
3
|
+
#
|
4
|
+
end
|
179
5
|
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
6
|
+
class Database
|
7
|
+
def self.setup(adapter = nil)
|
8
|
+
Combustion::Database::Reset.call adapter
|
9
|
+
Combustion::Database::LoadSchema.call
|
10
|
+
Combustion::Database::Migrate.call
|
184
11
|
end
|
185
12
|
end
|
186
13
|
end
|
14
|
+
|
15
|
+
require 'combustion/database/load_schema'
|
16
|
+
require 'combustion/database/migrate'
|
17
|
+
require 'combustion/database/reset'
|
18
|
+
|
19
|
+
require 'combustion/databases/base'
|
20
|
+
require 'combustion/databases/firebird'
|
21
|
+
require 'combustion/databases/mysql'
|
22
|
+
require 'combustion/databases/oracle'
|
23
|
+
require 'combustion/databases/postgresql'
|
24
|
+
require 'combustion/databases/sql_server'
|
25
|
+
require 'combustion/databases/sqlite'
|
@@ -0,0 +1,26 @@
|
|
1
|
+
class Combustion::Database::LoadSchema
|
2
|
+
UnknownSchemaFormat = Class.new StandardError
|
3
|
+
|
4
|
+
def self.call
|
5
|
+
new.call
|
6
|
+
end
|
7
|
+
|
8
|
+
def call
|
9
|
+
case schema_format
|
10
|
+
when :ruby
|
11
|
+
load Rails.root.join('db', 'schema.rb')
|
12
|
+
when :sql
|
13
|
+
ActiveRecord::Base.connection.execute(
|
14
|
+
File.read(Rails.root.join('db', 'structure.sql'))
|
15
|
+
)
|
16
|
+
else
|
17
|
+
raise UnknownSchemaFormat, "Unknown schema format: #{schema_format}"
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def schema_format
|
24
|
+
Combustion.schema_format
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class Combustion::Database::Migrate
|
2
|
+
def self.call
|
3
|
+
new.call
|
4
|
+
end
|
5
|
+
|
6
|
+
def call
|
7
|
+
if ActiveRecord::VERSION::STRING >= '3.1.0'
|
8
|
+
migrator.migrate paths, nil
|
9
|
+
else
|
10
|
+
paths.each { |path| migrator.migrate path, nil }
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
|
16
|
+
def base_migration_paths
|
17
|
+
if migrator.respond_to?(:migrations_paths)
|
18
|
+
migrator.migrations_paths
|
19
|
+
else
|
20
|
+
Array('db/migrate/')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def migrator
|
25
|
+
@migrator ||= ActiveRecord::Migrator
|
26
|
+
end
|
27
|
+
|
28
|
+
def paths
|
29
|
+
engine_path = Rails.application.root.sub(::Combustion.path, '')
|
30
|
+
migration_paths = Rails.application.paths['db/migrate'].to_a
|
31
|
+
|
32
|
+
if migration_paths.include?(engine_path.join('db/migrate').to_s)
|
33
|
+
paths = []
|
34
|
+
else
|
35
|
+
paths = base_migration_paths
|
36
|
+
end
|
37
|
+
|
38
|
+
(paths + migration_paths + [File.join(Rails.root, 'db/migrate')]).uniq
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
class Combustion::Database::Reset
|
2
|
+
UnsupportedDatabase = Class.new StandardError
|
3
|
+
|
4
|
+
def self.call(adapter = nil)
|
5
|
+
new(adapter).call
|
6
|
+
end
|
7
|
+
|
8
|
+
def initialize(adapter = nil)
|
9
|
+
@adapter = adapter
|
10
|
+
|
11
|
+
set_configurations
|
12
|
+
end
|
13
|
+
|
14
|
+
def call
|
15
|
+
operator.reset
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def configuration
|
21
|
+
@configuration ||= ActiveRecord::Base.configurations['test']
|
22
|
+
end
|
23
|
+
|
24
|
+
def operator
|
25
|
+
operator_class.new configuration
|
26
|
+
end
|
27
|
+
|
28
|
+
def operator_class
|
29
|
+
@operator ||= case configuration['adapter']
|
30
|
+
when /mysql/
|
31
|
+
Combustion::Databases::MySQL
|
32
|
+
when /postgresql/, /postgis/
|
33
|
+
Combustion::Databases::PostgreSQL
|
34
|
+
when /sqlite/
|
35
|
+
Combustion::Databases::SQLite
|
36
|
+
when /sqlserver/
|
37
|
+
Combustion::Databases::SQLServer
|
38
|
+
when 'oci', 'oracle'
|
39
|
+
Combustion::Databases::Oracle
|
40
|
+
when 'firebird'
|
41
|
+
Combustion::Databases::Firebird
|
42
|
+
else
|
43
|
+
raise UnsupportedDatabase,
|
44
|
+
"Unsupported database type: #{configuration['adapter']}"
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def set_configurations
|
49
|
+
ActiveRecord::Base.configurations = YAML.load(
|
50
|
+
ERB.new(File.read("#{Rails.root}/config/database.yml")).result
|
51
|
+
)
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require 'active_support/core_ext/module/delegation'
|
2
|
+
|
3
|
+
class Combustion::Databases::Base
|
4
|
+
def initialize(configuration)
|
5
|
+
@configuration = configuration
|
6
|
+
end
|
7
|
+
|
8
|
+
def reset
|
9
|
+
drop
|
10
|
+
create
|
11
|
+
end
|
12
|
+
|
13
|
+
private
|
14
|
+
|
15
|
+
attr_reader :configuration
|
16
|
+
|
17
|
+
delegate :establish_connection, :connection, :to => :base
|
18
|
+
|
19
|
+
def base
|
20
|
+
ActiveRecord::Base
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
class Combustion::Databases::MySQL < Combustion::Databases::Base
|
2
|
+
ACCESS_DENIED_ERROR = 10145
|
3
|
+
|
4
|
+
def reset
|
5
|
+
super
|
6
|
+
|
7
|
+
establish_connection :test
|
8
|
+
end
|
9
|
+
|
10
|
+
private
|
11
|
+
|
12
|
+
def charset
|
13
|
+
configuration['charset'] || ENV['CHARSET'] || 'utf8'
|
14
|
+
end
|
15
|
+
|
16
|
+
def collation
|
17
|
+
configuration['collation'] || ENV['COLLATION'] || 'utf8_unicode_ci'
|
18
|
+
end
|
19
|
+
|
20
|
+
def create
|
21
|
+
establish_connection configuration.merge('database' => nil)
|
22
|
+
connection.create_database configuration['database'], creation_options
|
23
|
+
establish_connection configuration
|
24
|
+
rescue error_class => error
|
25
|
+
if error.errno == ACCESS_DENIED_ERROR
|
26
|
+
create_as_root
|
27
|
+
else
|
28
|
+
$stderr.puts error.error
|
29
|
+
$stderr.puts "Couldn't create database for #{config.inspect}, charset: #{charset}, collation: #{collation}"
|
30
|
+
$stderr.puts "(if you set the charset manually, make sure you have a matching collation)" if config['charset']
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def create_as_root
|
35
|
+
print "#{sqlerr.error}. \nPlease provide the root password for your mysql installation\n>"
|
36
|
+
root_password = $stdin.gets.strip
|
37
|
+
establish_connection configuration.merge(
|
38
|
+
'database' => nil, 'username' => 'root', 'password' => root_password
|
39
|
+
)
|
40
|
+
connection.create_database config['database'], creation_options
|
41
|
+
connection.execute grant_statement
|
42
|
+
establish_connection configuration
|
43
|
+
end
|
44
|
+
|
45
|
+
def creation_options
|
46
|
+
{:charset => charset, :collation => collation}
|
47
|
+
end
|
48
|
+
|
49
|
+
def drop
|
50
|
+
establish_connection configuration
|
51
|
+
connection.drop_database configuration['database']
|
52
|
+
end
|
53
|
+
|
54
|
+
def error_class
|
55
|
+
if configuration['adapter'] =~ /jdbc/
|
56
|
+
#FIXME After Jdbcmysql gives this class
|
57
|
+
require 'active_record/railties/jdbcmysql_error'
|
58
|
+
error_class = ArJdbcMySQL::Error
|
59
|
+
else
|
60
|
+
error_class = config['adapter'] =~ /mysql2/ && defined?(Mysql2) ? Mysql2::Error : Mysql::Error
|
61
|
+
end
|
62
|
+
end
|
63
|
+
|
64
|
+
def grant_statement
|
65
|
+
<<-SQL
|
66
|
+
GRANT ALL PRIVILEGES ON #{configuration['database']}.*
|
67
|
+
TO '#{configuration['username']}'@'localhost'
|
68
|
+
IDENTIFIED BY '#{configuration['password']}' WITH GRANT OPTION;
|
69
|
+
SQL
|
70
|
+
end
|
71
|
+
end
|
@@ -0,0 +1,39 @@
|
|
1
|
+
class Combustion::Databases::PostgreSQL < Combustion::Databases::Base
|
2
|
+
def reset
|
3
|
+
base.clear_active_connections!
|
4
|
+
|
5
|
+
super
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def create
|
11
|
+
establish_connection postgres_configuration
|
12
|
+
connection.create_database configuration['database'],
|
13
|
+
configuration.merge('encoding' => encoding)
|
14
|
+
establish_connection configuration
|
15
|
+
rescue Exception => error
|
16
|
+
$stderr.puts error, *(error.backtrace)
|
17
|
+
$stderr.puts "Couldn't create database for #{configuration.inspect}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def drop
|
21
|
+
establish_connection postgres_configuration
|
22
|
+
connection.drop_database configuration['database']
|
23
|
+
end
|
24
|
+
|
25
|
+
def encoding
|
26
|
+
configuration['encoding'] || ENV['CHARSET'] || 'utf8'
|
27
|
+
end
|
28
|
+
|
29
|
+
def postgres_configuration
|
30
|
+
configuration.merge(
|
31
|
+
'database' => 'postgres',
|
32
|
+
'schema_search_path' => schema_search_path
|
33
|
+
)
|
34
|
+
end
|
35
|
+
|
36
|
+
def schema_search_path
|
37
|
+
configuration['adapter'][/postgis/] ? 'public, postgis' : 'public'
|
38
|
+
end
|
39
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'pathname'
|
3
|
+
|
4
|
+
class Combustion::Databases::SQLite < Combustion::Databases::Base
|
5
|
+
private
|
6
|
+
|
7
|
+
def create
|
8
|
+
if exists?
|
9
|
+
$stderr.puts "#{config['database']} already exists"
|
10
|
+
return
|
11
|
+
end
|
12
|
+
|
13
|
+
establish_connection configuration
|
14
|
+
connection
|
15
|
+
rescue Exception => error
|
16
|
+
$stderr.puts error, *(error.backtrace)
|
17
|
+
$stderr.puts "Couldn't create database for #{configuration.inspect}"
|
18
|
+
end
|
19
|
+
|
20
|
+
def drop
|
21
|
+
FileUtils.rm_f file if exists?
|
22
|
+
end
|
23
|
+
|
24
|
+
def exists?
|
25
|
+
File.exist? file
|
26
|
+
end
|
27
|
+
|
28
|
+
def file
|
29
|
+
@file ||= path.absolute? ? path.to_s : File.join(Rails.root, path)
|
30
|
+
end
|
31
|
+
|
32
|
+
def path
|
33
|
+
@path ||= Pathname.new configuration['database']
|
34
|
+
end
|
35
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: combustion
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.5.
|
4
|
+
version: 0.5.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Pat Allan
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-07-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -113,6 +113,16 @@ files:
|
|
113
113
|
- lib/combustion.rb
|
114
114
|
- lib/combustion/application.rb
|
115
115
|
- lib/combustion/database.rb
|
116
|
+
- lib/combustion/database/load_schema.rb
|
117
|
+
- lib/combustion/database/migrate.rb
|
118
|
+
- lib/combustion/database/reset.rb
|
119
|
+
- lib/combustion/databases/base.rb
|
120
|
+
- lib/combustion/databases/firebird.rb
|
121
|
+
- lib/combustion/databases/mysql.rb
|
122
|
+
- lib/combustion/databases/oracle.rb
|
123
|
+
- lib/combustion/databases/postgresql.rb
|
124
|
+
- lib/combustion/databases/sql_server.rb
|
125
|
+
- lib/combustion/databases/sqlite.rb
|
116
126
|
- lib/combustion/generator.rb
|
117
127
|
- spec/database_spec.rb
|
118
128
|
- spec/dummy/db/migrate/20150717075542_create_dummy_test_table.rb
|