skiima 0.1.000
Sign up to get free protection for your applications and to get access to all the features.
- 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`;
|