skiima 0.1.000
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/.gitignore +20 -0
- data/.travis.yml +8 -0
- data/CHANGELOG +8 -0
- data/Gemfile +30 -0
- data/Guardfile +14 -0
- data/README.md +87 -0
- data/Rakefile +56 -0
- data/lib/skiima/db_adapters/base_mysql_adapter.rb +308 -0
- data/lib/skiima/db_adapters/mysql2_adapter.rb +114 -0
- data/lib/skiima/db_adapters/mysql_adapter.rb +287 -0
- data/lib/skiima/db_adapters/postgresql_adapter.rb +509 -0
- data/lib/skiima/db_adapters.rb +187 -0
- data/lib/skiima/dependency.rb +84 -0
- data/lib/skiima/locales/en.yml +20 -0
- data/lib/skiima/locales/fr.yml +2 -0
- data/lib/skiima/version.rb +4 -0
- data/lib/skiima.rb +270 -0
- data/lib/skiima_helpers.rb +49 -0
- data/skiima.gemspec +53 -0
- data/spec/config/database.yml +56 -0
- data/spec/db/skiima/depends.yml +61 -0
- data/spec/db/skiima/empty_depends.yml +0 -0
- data/spec/db/skiima/init_test_db/database.skiima_test.mysql.current.sql +2 -0
- data/spec/db/skiima/init_test_db/database.skiima_test.postgresql.current.sql +2 -0
- data/spec/db/skiima/test_column_names/table.test_column_names.mysql.current.sql +8 -0
- data/spec/db/skiima/test_column_names/table.test_column_names.postgresql.current.sql +18 -0
- data/spec/db/skiima/test_index/index.test_index.mysql.current.sql +2 -0
- data/spec/db/skiima/test_index/index.test_index.postgresql.current.sql +2 -0
- data/spec/db/skiima/test_proc/proc.test_proc.mysql.current.sql +8 -0
- data/spec/db/skiima/test_proc/proc.test_proc_drop.mysql.current.drop.sql +1 -0
- data/spec/db/skiima/test_proc/proc.test_proc_drop.mysql.current.sql +8 -0
- data/spec/db/skiima/test_rule/rule.test_rule.postgresql.current.sql +6 -0
- data/spec/db/skiima/test_schema/schema.test_schema.postgresql.current.sql +2 -0
- data/spec/db/skiima/test_table/table.test_table.mysql.current.sql +7 -0
- data/spec/db/skiima/test_table/table.test_table.postgresql.current.sql +4 -0
- data/spec/db/skiima/test_view/view.test_view.mysql.current.sql +5 -0
- data/spec/db/skiima/test_view/view.test_view.postgresql.current.sql +6 -0
- data/spec/helpers/mysql_spec_helper.rb +0 -0
- data/spec/helpers/postgresql_spec_helper.rb +11 -0
- data/spec/mysql2_spec.rb +57 -0
- data/spec/mysql_spec.rb +100 -0
- data/spec/postgresql_spec.rb +138 -0
- data/spec/skiima/db_adapters/mysql_adapter_spec.rb +38 -0
- data/spec/skiima/db_adapters/postgresql_adapter_spec.rb +20 -0
- data/spec/skiima/db_adapters_spec.rb +31 -0
- data/spec/skiima/dependency_spec.rb +94 -0
- data/spec/skiima_spec.rb +97 -0
- data/spec/spec_helper.rb +35 -0
- metadata +195 -0
@@ -0,0 +1,84 @@
|
|
1
|
+
module Skiima
|
2
|
+
module Dependency
|
3
|
+
class Script
|
4
|
+
attr_accessor :group, :adapter, :version
|
5
|
+
attr_accessor :type, :name, :attr
|
6
|
+
attr_accessor :filename, :content, :sql
|
7
|
+
|
8
|
+
def initialize(group, adapter, version, scriptname)
|
9
|
+
@group, @adapter, @version = group.to_s, adapter.to_s, version.to_s
|
10
|
+
set_attr(scriptname)
|
11
|
+
end
|
12
|
+
|
13
|
+
def filename
|
14
|
+
@filename = [@type,@name,@adapter.to_s,@version,'sql'].join('.')
|
15
|
+
end
|
16
|
+
|
17
|
+
def read_content(direction, root)
|
18
|
+
@content = case
|
19
|
+
when (direction == :up) then File.open(File.join(root, group, filename)).read
|
20
|
+
when (direction == :down && down_script?) then File.open(File.join(root, group, down_filename)).read
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def interpolate_sql(char, vars = {})
|
25
|
+
@sql = Skiima.interpolate_sql(char, @content, vars)
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def set_attr(scr_name)
|
31
|
+
scr_name = scr_name.split('.')
|
32
|
+
@type, @name = scr_name.shift, scr_name.shift
|
33
|
+
@attr = scr_name
|
34
|
+
end
|
35
|
+
|
36
|
+
def down_filename
|
37
|
+
filename.sub('.sql', '.drop.sql')
|
38
|
+
end
|
39
|
+
|
40
|
+
def down_script?
|
41
|
+
File.exist?(down_filename)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Reader
|
46
|
+
attr_accessor :scripts
|
47
|
+
attr_accessor :depends, :adapter, :version
|
48
|
+
|
49
|
+
def initialize(depends, adapter, opts = {})
|
50
|
+
@depends, @adapter = depends, adapter.to_sym
|
51
|
+
@version = opts[:version] || :current
|
52
|
+
end
|
53
|
+
|
54
|
+
def adapter
|
55
|
+
case @adapter.to_s
|
56
|
+
when 'mysql', 'mysql2' then :mysql
|
57
|
+
else @adapter
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def get_group(g)
|
62
|
+
raise Skiima::SqlGroupNotFound unless depends.has_key?(g)
|
63
|
+
depends[g]
|
64
|
+
end
|
65
|
+
|
66
|
+
def get_adapter(grp)
|
67
|
+
grp.has_key?(adapter) ? (grp[adapter] || {}) : {}
|
68
|
+
end
|
69
|
+
|
70
|
+
def get_scripts(group, version_grp)
|
71
|
+
scr = (version_grp.has_key?(version) ? (version_grp[version] || {}) : {})
|
72
|
+
sc = scr.map {|s| Skiima::Dependency::Script.new(group, adapter, version, s)}
|
73
|
+
end
|
74
|
+
|
75
|
+
def get_load_order(*groups)
|
76
|
+
@scripts = groups.inject([]) do |memo, g|
|
77
|
+
grp = Skiima.symbolize_keys(get_group(g))
|
78
|
+
grp = Skiima.symbolize_keys(get_adapter(grp))
|
79
|
+
memo = memo + get_scripts(g, grp)
|
80
|
+
end
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
---
|
2
|
+
en:
|
3
|
+
simple: easy
|
4
|
+
date:
|
5
|
+
relative: "%{relative_time} ago"
|
6
|
+
|
7
|
+
messages:
|
8
|
+
errors:
|
9
|
+
open_db_yaml: Could not open Skiima Database Config!
|
10
|
+
open_depends_yaml: Could not open Skiima Depends Config!
|
11
|
+
create:
|
12
|
+
start: Creating objects for @class
|
13
|
+
error: Encountered errors creating @class objects -
|
14
|
+
no_error: All @class objects created successfully!
|
15
|
+
delimiter: =================================
|
16
|
+
drop:
|
17
|
+
start: Dropping objects for @class
|
18
|
+
error: Encountered errors dropping @class objects -
|
19
|
+
no_error: All @class objects dropped successfully!
|
20
|
+
delimiter: =================================
|
data/lib/skiima.rb
ADDED
@@ -0,0 +1,270 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
require 'skiima/version'
|
3
|
+
|
4
|
+
require 'yaml'
|
5
|
+
require 'logger'
|
6
|
+
require 'fast_gettext'
|
7
|
+
require 'erubis'
|
8
|
+
|
9
|
+
require 'skiima_helpers'
|
10
|
+
|
11
|
+
# include FastGettext unless it already is
|
12
|
+
include FastGettext unless ::Object.included_modules.include?(FastGettext)
|
13
|
+
|
14
|
+
module Skiima
|
15
|
+
include FastGettext::Translation
|
16
|
+
extend SkiimaHelpers
|
17
|
+
extend ModuleHelpers
|
18
|
+
|
19
|
+
# require 'skiima/base'
|
20
|
+
autoload :Dependency, 'skiima/dependency'
|
21
|
+
autoload :DbAdapters, 'skiima/db_adapters'
|
22
|
+
|
23
|
+
set_defaults(:config, {
|
24
|
+
:root_path => 'specify/in/config/block',
|
25
|
+
:config_path => 'config',
|
26
|
+
:database_yaml => 'database.yml',
|
27
|
+
:scripts_path => 'db/skiima',
|
28
|
+
:depends_yaml => 'depends.yml',
|
29
|
+
:interpolator => '&',
|
30
|
+
:locale => 'en',
|
31
|
+
:logging_out => 'STDOUT',
|
32
|
+
:logging_level => '3' })
|
33
|
+
#should time zone be added to configs?
|
34
|
+
|
35
|
+
class << self
|
36
|
+
def setup
|
37
|
+
yield self
|
38
|
+
set_translation_repository
|
39
|
+
end
|
40
|
+
|
41
|
+
def new(env, opts = {})
|
42
|
+
Skiima::Loader.new(env, opts)
|
43
|
+
end
|
44
|
+
|
45
|
+
def up(*args)
|
46
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
47
|
+
ski = Skiima.new(env, opts).up(*args)
|
48
|
+
ensure
|
49
|
+
ski.connection.close
|
50
|
+
end
|
51
|
+
|
52
|
+
def down(*args)
|
53
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
54
|
+
Skiima.new(env, opts).down(*args)
|
55
|
+
ensure
|
56
|
+
ski.connection.close
|
57
|
+
end
|
58
|
+
|
59
|
+
def msg(*args)
|
60
|
+
locale = args.last.is_a?(Symbol) ? args.pop : default_locale
|
61
|
+
lookup = args.join('.')
|
62
|
+
Skiima._(lookup)
|
63
|
+
end
|
64
|
+
|
65
|
+
def log_message(logger, msg)
|
66
|
+
logger.debug msg
|
67
|
+
end
|
68
|
+
|
69
|
+
def default_locale
|
70
|
+
::Skiima.locale
|
71
|
+
end
|
72
|
+
|
73
|
+
def set_translation_repository
|
74
|
+
FastGettext.add_text_domain('skiima', :path => File.join(File.dirname(__FILE__), 'skiima', 'locales'), :type => :yaml)
|
75
|
+
Skiima.text_domain = 'skiima'
|
76
|
+
Skiima.locale = locale.to_s
|
77
|
+
end
|
78
|
+
|
79
|
+
def self.exe_with_connection(db, &block)
|
80
|
+
resolver = Skiima::DbAdapters::Resolver.new db
|
81
|
+
connection = nil
|
82
|
+
|
83
|
+
begin
|
84
|
+
connection = self.send(resolver.adapter_method, db)
|
85
|
+
yield connection
|
86
|
+
rescue => ex
|
87
|
+
puts "Oh Noes!!"
|
88
|
+
ensure
|
89
|
+
connection.close
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
def interpolate_sql(char, sql, vars = {})
|
94
|
+
vars.inject(sql) do |memo, (k,v)|
|
95
|
+
memo = memo.gsub("#{char}#{k.to_s}", v)
|
96
|
+
end
|
97
|
+
end
|
98
|
+
|
99
|
+
def full_scripts_path(root = self.root_path, config = self.scripts_path)
|
100
|
+
File.join(root, config)
|
101
|
+
end
|
102
|
+
|
103
|
+
def full_database_path(root = self.root_path, config = self.config_path, db = self.database_yaml)
|
104
|
+
File.join(root, config, db)
|
105
|
+
end
|
106
|
+
|
107
|
+
def full_depends_path(root = self.root_path, config = self.scripts_path, depends = self.depends_yaml)
|
108
|
+
File.join(root, config, depends)
|
109
|
+
end
|
110
|
+
|
111
|
+
def read_db_yaml(file)
|
112
|
+
Skiima.symbolize_keys(self.read_yaml_or_throw(file, MissingFileException, "#{Skiima.msg('errors.open_db_yaml')} #{file}"))
|
113
|
+
end
|
114
|
+
|
115
|
+
def read_depends_yaml(file)
|
116
|
+
Skiima.symbolize_keys(self.read_yaml_or_throw(file, MissingFileException, "#{Skiima.msg('errors.open_depends_yaml')} #{file}"))
|
117
|
+
end
|
118
|
+
|
119
|
+
def read_sql_file(folder, file)
|
120
|
+
File.open(File.join(Skiima.full_scripts_path, folder, file)).read
|
121
|
+
end
|
122
|
+
|
123
|
+
def read_yaml_or_throw(file, errclass, errmsg)
|
124
|
+
yaml = begin
|
125
|
+
input = File.read(file)
|
126
|
+
eruby = Erubis::Eruby.new(input)
|
127
|
+
YAML::load(eruby.result(binding())) || {}
|
128
|
+
rescue => ex
|
129
|
+
raise errclass, errmsg
|
130
|
+
end
|
131
|
+
|
132
|
+
Skiima.symbolize_keys(yaml)
|
133
|
+
end
|
134
|
+
|
135
|
+
def method_missing(method, *args, &block)
|
136
|
+
setter = method.to_s.gsub(/=$/, '').to_sym if method.to_s =~ /=$/
|
137
|
+
|
138
|
+
val = case
|
139
|
+
when (@@config.keys.include?(method)) then @@config[method]
|
140
|
+
when (setter and @@config.keys.include?(setter)) then @@config[setter] = args.first
|
141
|
+
end
|
142
|
+
|
143
|
+
val || super
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
#BaseExceptions
|
148
|
+
class BaseException < ::StandardError; end
|
149
|
+
class MissingFileException < BaseException; end
|
150
|
+
class SqlGroupNotFound < BaseException; end
|
151
|
+
class SqlScriptNotFound < BaseException; end
|
152
|
+
|
153
|
+
#DbAdapterExceptions
|
154
|
+
class AdapterNotSpecified < BaseException; end
|
155
|
+
class LoadError < BaseException; end
|
156
|
+
class StatementInvalid < BaseException; end
|
157
|
+
|
158
|
+
class Loader
|
159
|
+
attr_accessor :config, :logger
|
160
|
+
attr_accessor :db, :connection
|
161
|
+
attr_accessor :scripts
|
162
|
+
|
163
|
+
def initialize(env, opts = {})
|
164
|
+
db_config = Skiima.symbolize_keys(opts[:db] || {})
|
165
|
+
|
166
|
+
self.config = Skiima.config.merge(opts)
|
167
|
+
create_logger
|
168
|
+
@db = Skiima.symbolize_keys(Skiima.read_db_yaml(full_database_path)[env].merge(db_config))
|
169
|
+
make_connection
|
170
|
+
@depends = Skiima.read_depends_yaml(full_depends_path)
|
171
|
+
end
|
172
|
+
|
173
|
+
def up(*args)
|
174
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
175
|
+
reader = Skiima::Dependency::Reader.new(@depends, @db[:adapter], opts)
|
176
|
+
scripts = reader.get_load_order(*args)
|
177
|
+
scripts.each do |s|
|
178
|
+
s.read_content(:up, full_scripts_path)
|
179
|
+
s.interpolate_sql(interpolator, interpolation_vars)
|
180
|
+
end
|
181
|
+
scripts.each {|s| connection.execute(s.sql)}
|
182
|
+
end
|
183
|
+
|
184
|
+
def down(*args)
|
185
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
186
|
+
reader = Skiima::Dependency::Reader.new(@depends, @db[:adapter], opts)
|
187
|
+
scripts = reader.get_load_order(*args).reverse
|
188
|
+
scripts.each do |s|
|
189
|
+
s.read_content(:down, full_scripts_path)
|
190
|
+
s.content ||= connection.drop(s.type, s.name, {:attr => s.attr}.merge(opts))
|
191
|
+
s.interpolate_sql(interpolator, interpolation_vars)
|
192
|
+
end
|
193
|
+
scripts.each {|s| connection.execute(s.sql)}
|
194
|
+
end
|
195
|
+
|
196
|
+
def make_connection
|
197
|
+
resolver = Skiima::DbAdapters::Resolver.new(@db)
|
198
|
+
@connection = Skiima.send(resolver.adapter_method, logger, @db)
|
199
|
+
end
|
200
|
+
|
201
|
+
def log_action(msg, &block)
|
202
|
+
begin
|
203
|
+
logger.debug "[#{Time.now}] Started: #{msg}"
|
204
|
+
results = yield
|
205
|
+
logger.debug "[#{Time.now}] Finished: #{msg}"
|
206
|
+
results
|
207
|
+
rescue
|
208
|
+
logger.error "[#{Time.now}] Error: #{msg}"
|
209
|
+
raise
|
210
|
+
end
|
211
|
+
end
|
212
|
+
|
213
|
+
def log_message(msg)
|
214
|
+
Skiima.log_message(logger, msg)
|
215
|
+
end
|
216
|
+
|
217
|
+
def interpolation_vars(vars = {})
|
218
|
+
{ :database => db[:database] }.merge(vars)
|
219
|
+
end
|
220
|
+
|
221
|
+
def method_missing(method, *args, &block)
|
222
|
+
setter = method.to_s.gsub(/=$/, '').to_sym if method.to_s =~ /=$/
|
223
|
+
|
224
|
+
val = case
|
225
|
+
when (@config.keys.include?(method)) then @config[method]
|
226
|
+
when (setter and @config.keys.include?(setter)) then @config[setter] = args
|
227
|
+
end
|
228
|
+
|
229
|
+
val || super
|
230
|
+
end
|
231
|
+
|
232
|
+
private
|
233
|
+
|
234
|
+
def full_database_path
|
235
|
+
Skiima.full_database_path(self.root_path, self.config_path, self.database_yaml)
|
236
|
+
end
|
237
|
+
|
238
|
+
def full_depends_path
|
239
|
+
Skiima.full_depends_path(self.root_path, self.scripts_path, self.depends_yaml)
|
240
|
+
end
|
241
|
+
|
242
|
+
def full_scripts_path
|
243
|
+
Skiima.full_scripts_path(self.root_path, self.scripts_path)
|
244
|
+
end
|
245
|
+
|
246
|
+
def get_logger_out(str)
|
247
|
+
case str
|
248
|
+
when /STDOUT/i then ::STDOUT
|
249
|
+
when /STDERR/i then ::STDERR
|
250
|
+
else File.join(root_path, str)
|
251
|
+
end
|
252
|
+
end
|
253
|
+
|
254
|
+
def get_logger_level(str)
|
255
|
+
case str
|
256
|
+
when '4', /fatal/i then ::Logger::FATAL
|
257
|
+
when '3', /error/i then ::Logger::ERROR
|
258
|
+
when '2', /warn/i then ::Logger::WARN
|
259
|
+
when '1', /info/i then ::Logger::INFO
|
260
|
+
when '0', /debug/i then ::Logger::DEBUG
|
261
|
+
else ::Logger::ERROR
|
262
|
+
end
|
263
|
+
end
|
264
|
+
|
265
|
+
def create_logger
|
266
|
+
self.logger = ::Logger.new(get_logger_out(@config[:logging_out]))
|
267
|
+
self.logger.level = get_logger_level(@config[:logging_level])
|
268
|
+
end
|
269
|
+
end
|
270
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module SkiimaHelpers
|
3
|
+
def symbolize_keys(hash)
|
4
|
+
hash.inject({}) do |options, (key, value)|
|
5
|
+
options[(key.to_sym rescue key) || key] = value
|
6
|
+
options
|
7
|
+
end
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
module ModuleHelpers
|
12
|
+
def set_defaults(sym, val)
|
13
|
+
add_module_attr_reader(sym)
|
14
|
+
add_module_attr_writer(sym)
|
15
|
+
class_variable_set("@@#{sym.to_s}", val)
|
16
|
+
end
|
17
|
+
|
18
|
+
alias_method :set_default, :set_defaults
|
19
|
+
|
20
|
+
def add_module_attr_writer(sym)
|
21
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
22
|
+
def self.#{sym}=(obj)
|
23
|
+
@@#{sym} = obj
|
24
|
+
end
|
25
|
+
EOS
|
26
|
+
|
27
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
28
|
+
def #{sym}=(obj)
|
29
|
+
@@#{sym} = obj
|
30
|
+
end
|
31
|
+
EOS
|
32
|
+
end
|
33
|
+
|
34
|
+
def add_module_attr_reader(sym)
|
35
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
36
|
+
@@#{sym} = nil unless defined? @@#{sym}
|
37
|
+
|
38
|
+
def self.#{sym}
|
39
|
+
@@#{sym}
|
40
|
+
end
|
41
|
+
EOS
|
42
|
+
|
43
|
+
class_eval(<<-EOS, __FILE__, __LINE__ + 1)
|
44
|
+
def #{sym}
|
45
|
+
@@#{sym}
|
46
|
+
end
|
47
|
+
EOS
|
48
|
+
end
|
49
|
+
end
|
data/skiima.gemspec
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
$:.push File.expand_path("../lib", __FILE__)
|
3
|
+
require "skiima/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |s|
|
6
|
+
s.name = "skiima"
|
7
|
+
s.version = Skiima::VERSION
|
8
|
+
s.authors = ["David Conner"]
|
9
|
+
s.email = ["dconner.pro@gmail.com"]
|
10
|
+
s.homepage = "http://github.com/dcunited001/skiima"
|
11
|
+
s.summary = %q{A SQL object manager for Rails projects}
|
12
|
+
s.description = %q{Skiima helps to manage SQL objects like views and functions}
|
13
|
+
|
14
|
+
s.rubyforge_project = "skiima"
|
15
|
+
|
16
|
+
s.files = `git ls-files`.split("\n")
|
17
|
+
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
18
|
+
|
19
|
+
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
20
|
+
s.require_paths = ["lib"]
|
21
|
+
|
22
|
+
s.add_dependency "fast_gettext", '~> 0.6.0'
|
23
|
+
s.add_dependency "erubis", '~> 2.7.0'
|
24
|
+
|
25
|
+
s.add_development_dependency "bundler", '>= 1.0.21'
|
26
|
+
s.add_development_dependency "minitest", '~> 2.9.1'
|
27
|
+
s.add_development_dependency "minitest-matchers", '~> 1.1.3'
|
28
|
+
s.add_development_dependency "mocha", '~> 0.10.0'
|
29
|
+
|
30
|
+
end
|
31
|
+
|
32
|
+
# Logging
|
33
|
+
# TODO: add logging messages
|
34
|
+
# TODO: convert to i18n messages
|
35
|
+
|
36
|
+
# SQL Objects
|
37
|
+
# add functions
|
38
|
+
# add procs
|
39
|
+
# add triggers
|
40
|
+
|
41
|
+
# Adapters
|
42
|
+
# SQL Server Adapter
|
43
|
+
|
44
|
+
# Skiima Options
|
45
|
+
# add a way to just return a list of scripts to be executed
|
46
|
+
|
47
|
+
# Refactor:
|
48
|
+
# reorganize modules
|
49
|
+
|
50
|
+
# Thor tasks ??
|
51
|
+
# TODO: thor task to load all sets
|
52
|
+
# TODO: thor task to load specific sets
|
53
|
+
# TODO: delegate rake tasks to thor (how?)
|
@@ -0,0 +1,56 @@
|
|
1
|
+
---
|
2
|
+
production:
|
3
|
+
adapter: postgresql
|
4
|
+
encoding: utf8
|
5
|
+
database: skiima_production
|
6
|
+
username: skiima
|
7
|
+
password: test
|
8
|
+
|
9
|
+
development:
|
10
|
+
adapter: postgresql
|
11
|
+
encoding: utf8
|
12
|
+
database: skiima_development
|
13
|
+
username: skiima
|
14
|
+
password: test
|
15
|
+
|
16
|
+
test:
|
17
|
+
adapter: postgresql
|
18
|
+
encoding: utf8
|
19
|
+
database: skiima_test
|
20
|
+
username: skiima
|
21
|
+
password: test
|
22
|
+
|
23
|
+
postgresql_test:
|
24
|
+
adapter: postgresql
|
25
|
+
encoding: utf8
|
26
|
+
database: postgresql_test
|
27
|
+
username: skiima
|
28
|
+
password: test
|
29
|
+
|
30
|
+
mysql_test:
|
31
|
+
adapter: mysql
|
32
|
+
encoding: utf8
|
33
|
+
reconnect: false
|
34
|
+
database: mysql_test
|
35
|
+
pool: 5
|
36
|
+
username: skiima
|
37
|
+
password: test
|
38
|
+
socket: /tmp/mysql.sock
|
39
|
+
|
40
|
+
mysql2_test:
|
41
|
+
adapter: mysql2
|
42
|
+
encoding: utf8
|
43
|
+
reconnect: false
|
44
|
+
database: mysql_test
|
45
|
+
pool: 5
|
46
|
+
username: skiima
|
47
|
+
password: test
|
48
|
+
socket: /tmp/mysql.sock
|
49
|
+
|
50
|
+
sqlserver_test:
|
51
|
+
adapter: sqlserver
|
52
|
+
encoding: utf8
|
53
|
+
database: skiima_test
|
54
|
+
username: skiima
|
55
|
+
password: test
|
56
|
+
|
@@ -0,0 +1,61 @@
|
|
1
|
+
---
|
2
|
+
init_test_db:
|
3
|
+
mysql:
|
4
|
+
current:
|
5
|
+
- database.skiima_test
|
6
|
+
postgresql:
|
7
|
+
current:
|
8
|
+
- database.skiima_test
|
9
|
+
test_table:
|
10
|
+
mysql:
|
11
|
+
current:
|
12
|
+
- table.test_table
|
13
|
+
postgresql:
|
14
|
+
current:
|
15
|
+
- table.test_table
|
16
|
+
test_column_names:
|
17
|
+
mysql:
|
18
|
+
current:
|
19
|
+
- table.test_column_names
|
20
|
+
postgresql:
|
21
|
+
current:
|
22
|
+
- table.test_column_names
|
23
|
+
test_index:
|
24
|
+
mysql:
|
25
|
+
current:
|
26
|
+
- index.test_index.test_table
|
27
|
+
postgresql:
|
28
|
+
current:
|
29
|
+
- index.test_index.test_table
|
30
|
+
test_schema:
|
31
|
+
mysql:
|
32
|
+
current:
|
33
|
+
- schema.test_schema
|
34
|
+
postgresql:
|
35
|
+
current:
|
36
|
+
- schema.test_schema
|
37
|
+
test_view:
|
38
|
+
mysql:
|
39
|
+
current:
|
40
|
+
- view.test_view
|
41
|
+
postgresql:
|
42
|
+
current:
|
43
|
+
- view.test_view
|
44
|
+
test_rule:
|
45
|
+
postgresql:
|
46
|
+
current:
|
47
|
+
- rule.test_rule.test_view
|
48
|
+
test_proc:
|
49
|
+
mysql:
|
50
|
+
current:
|
51
|
+
- proc.test_proc.test_proc
|
52
|
+
- proc.test_proc.test_proc_drop
|
53
|
+
blank_group:
|
54
|
+
mysql:
|
55
|
+
postgresql:
|
56
|
+
only_pg:
|
57
|
+
mysql:
|
58
|
+
postgresql:
|
59
|
+
current:
|
60
|
+
- table.only_pg
|
61
|
+
- view.pg_only
|
File without changes
|
@@ -0,0 +1,8 @@
|
|
1
|
+
DROP TABLE IF EXISTS test_column_names;
|
2
|
+
--==================
|
3
|
+
CREATE TABLE `test_column_names` (
|
4
|
+
`id` int(11) NOT NULL AUTO_INCREMENT,
|
5
|
+
`first_name` varchar(40) NOT NULL,
|
6
|
+
`last_name` varchar(40) NOT NULL,
|
7
|
+
PRIMARY KEY (`id`)
|
8
|
+
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
|
@@ -0,0 +1,18 @@
|
|
1
|
+
DROP TABLE IF EXISTS test_column_names;
|
2
|
+
CREATE TABLE test_column_names (
|
3
|
+
id integer PRIMARY KEY,
|
4
|
+
email character varying(255),
|
5
|
+
encrypted_password character varying(128),
|
6
|
+
reset_password_token character varying(255),
|
7
|
+
reset_password_sent_at timestamp without time zone,
|
8
|
+
remember_created_at timestamp without time zone,
|
9
|
+
sign_in_count integer default 0,
|
10
|
+
current_sign_in_at timestamp without time zone,
|
11
|
+
last_sign_in_at timestamp without time zone,
|
12
|
+
current_sign_in_ip character varying(255),
|
13
|
+
last_sign_in_ip character varying(255),
|
14
|
+
created_at timestamp without time zone not null,
|
15
|
+
updated_at timestamp without time zone not null,
|
16
|
+
alias character varying(255),
|
17
|
+
first_name character varying(255),
|
18
|
+
last_name character varying(255));
|
@@ -0,0 +1 @@
|
|
1
|
+
DROP PROCEDURE IF EXISTS `test_proc_drop`;
|