skiima 0.1.000 → 0.2.2
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.
- checksums.yaml +15 -0
- data/.gitignore +9 -0
- data/.travis.yml +11 -3
- data/Gemfile +12 -6
- data/Guardfile +13 -11
- data/LICENSE +20 -0
- data/Procfile.example +2 -0
- data/README.md +170 -23
- data/Rakefile +26 -22
- data/lib/skiima.rb +61 -240
- data/lib/skiima/config.rb +60 -0
- data/lib/skiima/config/struct.rb +87 -0
- data/lib/skiima/db/connector.rb +195 -0
- data/lib/skiima/db/connector/active_record.rb +11 -0
- data/lib/skiima/db/connector/active_record/base_connector.rb +34 -0
- data/lib/skiima/db/connector/active_record/mysql2_connector.rb +147 -0
- data/lib/skiima/db/connector/active_record/mysql_connector.rb +177 -0
- data/lib/skiima/db/connector/active_record/postgresql_connector.rb +39 -0
- data/lib/skiima/db/helpers/mysql.rb +230 -0
- data/lib/skiima/db/helpers/postgresql.rb +221 -0
- data/lib/skiima/db/resolver.rb +62 -0
- data/lib/skiima/dependency/reader.rb +55 -0
- data/lib/skiima/dependency/script.rb +63 -0
- data/lib/skiima/i18n.rb +24 -0
- data/lib/skiima/loader.rb +108 -0
- data/lib/skiima/locales/en.yml +2 -2
- data/lib/skiima/logger.rb +54 -0
- data/lib/skiima/railtie.rb +10 -0
- data/lib/skiima/railties/skiima.rake +31 -0
- data/lib/skiima/version.rb +2 -2
- data/skiima.gemspec +5 -5
- data/spec/config/{database.yml → database.yml.example} +16 -0
- data/spec/config/database.yml.travis +69 -0
- data/spec/db/skiima/{depends.yml → dependencies.yml} +7 -2
- data/spec/db/skiima/{empty_depends.yml → empty_dependencies.yml} +0 -0
- data/spec/db/skiima/init_test_db/database.skiima_test.mysql.current.sql +7 -0
- data/spec/db/skiima/init_test_db/database.skiima_test.postgresql.current.sql +7 -0
- data/spec/mysql2_spec.rb +61 -12
- data/spec/mysql_spec.rb +66 -27
- data/spec/postgresql_spec.rb +55 -34
- data/spec/shared_examples/config_shared_example.rb +40 -0
- data/spec/skiima/config/struct_spec.rb +78 -0
- data/spec/skiima/config_spec.rb +6 -0
- data/spec/skiima/db/connector/active_record/base_connector_spec.rb +0 -0
- data/spec/skiima/db/connector/active_record/mysql2_connector_spec.rb +3 -0
- data/spec/skiima/db/connector/active_record/mysql_connector_spec.rb +3 -0
- data/spec/skiima/db/connector/active_record/postgresql_connector_spec.rb +7 -0
- data/spec/skiima/db/connector_spec.rb +6 -0
- data/spec/skiima/db/resolver_spec.rb +54 -0
- data/spec/skiima/dependency/reader_spec.rb +52 -0
- data/spec/skiima/{dependency_spec.rb → dependency/script_spec.rb} +3 -41
- data/spec/skiima/i18n_spec.rb +29 -0
- data/spec/skiima/loader_spec.rb +102 -0
- data/spec/skiima/logger_spec.rb +0 -0
- data/spec/skiima_spec.rb +43 -64
- data/spec/spec_helper.rb +38 -4
- metadata +144 -100
- data/lib/skiima/db_adapters.rb +0 -187
- data/lib/skiima/db_adapters/base_mysql_adapter.rb +0 -308
- data/lib/skiima/db_adapters/mysql2_adapter.rb +0 -114
- data/lib/skiima/db_adapters/mysql_adapter.rb +0 -287
- data/lib/skiima/db_adapters/postgresql_adapter.rb +0 -509
- data/lib/skiima/dependency.rb +0 -84
- data/lib/skiima_helpers.rb +0 -49
- data/spec/skiima/db_adapters/mysql_adapter_spec.rb +0 -38
- data/spec/skiima/db_adapters/postgresql_adapter_spec.rb +0 -20
- data/spec/skiima/db_adapters_spec.rb +0 -31
data/lib/skiima/dependency.rb
DELETED
@@ -1,84 +0,0 @@
|
|
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
|
data/lib/skiima_helpers.rb
DELETED
@@ -1,49 +0,0 @@
|
|
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
|
@@ -1,38 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
require 'skiima/db_adapters/mysql_adapter'
|
4
|
-
|
5
|
-
describe "Skiima::DbAdapters::MysqlAdapter" do
|
6
|
-
let(:db) { Skiima.read_db_yaml(Skiima.full_database_path)[:mysql_test] }
|
7
|
-
let(:mysql_params) { [db[:host], db[:username], db[:password], db[:database], db[:port], db[:socket], Mysql::CLIENT_MULTI_RESULTS] }
|
8
|
-
let(:mysql_adapter) { Skiima::DbAdapters::MysqlAdapter.new(Mysql.init, nil, mysql_params, db) }
|
9
|
-
|
10
|
-
describe "#initialize" do
|
11
|
-
before(:each) do
|
12
|
-
Mysql.any_instance.expects(:real_connect)
|
13
|
-
Skiima::DbAdapters::MysqlAdapter.any_instance.expects(:version)
|
14
|
-
Skiima::DbAdapters::MysqlAdapter.any_instance.expects(:configure_connection)
|
15
|
-
end
|
16
|
-
|
17
|
-
it 'should set connection options and config' do
|
18
|
-
mysql_adapter.instance_variable_get(:@connection_options).must_equal mysql_params
|
19
|
-
mysql_adapter.instance_variable_get(:@config).must_equal db
|
20
|
-
end
|
21
|
-
|
22
|
-
it 'should set ssl options if included' do
|
23
|
-
db.merge!({:sslkey => '123'})
|
24
|
-
Mysql.any_instance.expects(:ssl_set)
|
25
|
-
|
26
|
-
mysql_adapter
|
27
|
-
end
|
28
|
-
|
29
|
-
it 'should set encoding options if included' do
|
30
|
-
utf = 'utf-8'
|
31
|
-
db.merge!({:encoding => utf})
|
32
|
-
Mysql.any_instance.expects(:options).with(Mysql::SET_CHARSET_NAME, utf)
|
33
|
-
|
34
|
-
mysql_adapter
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
require 'skiima/db_adapters/postgresql_adapter'
|
4
|
-
|
5
|
-
describe "Skiima::DbAdapters::PostgresqlAdapter" do
|
6
|
-
let(:db) { Skiima.read_db_yaml(Skiima.full_database_path)[:test] }
|
7
|
-
let(:pg_params) { [db[:host], db[:port], nil, nil, db[:database], db[:username], db[:password]] }
|
8
|
-
let(:pg_adapter) { Skiima::DbAdapters::PostgresqlAdapter.new(nil, nil, pg_params, db) }
|
9
|
-
|
10
|
-
describe "#initialize" do
|
11
|
-
it 'should set params, attempt to connect, check the version, and get the timezone' do
|
12
|
-
Skiima::DbAdapters::PostgresqlAdapter.any_instance.expects(:connect)
|
13
|
-
Skiima::DbAdapters::PostgresqlAdapter.any_instance.expects(:postgresql_version).returns(80300)
|
14
|
-
Skiima::DbAdapters::PostgresqlAdapter.any_instance.expects(:get_timezone).returns('UTC')
|
15
|
-
|
16
|
-
pg_adapter.version.must_equal 80300
|
17
|
-
pg_adapter.local_tz.must_equal 'UTC'
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
require 'spec_helper'
|
3
|
-
|
4
|
-
describe Skiima::DbAdapters::Resolver do
|
5
|
-
let(:db) { Skiima.read_db_yaml(Skiima.full_database_path)[:test] }
|
6
|
-
|
7
|
-
it "should force an adapter to be specified" do
|
8
|
-
proc{ Skiima::DbAdapters::Resolver.new({}) }.must_raise(Skiima::AdapterNotSpecified)
|
9
|
-
end
|
10
|
-
|
11
|
-
it "should raise an error when there is not a valid adapter defined" do
|
12
|
-
db[:adapter] = 'undefsql'
|
13
|
-
proc{ Skiima::DbAdapters::Resolver.new(db) }.must_raise(LoadError)
|
14
|
-
end
|
15
|
-
|
16
|
-
it "should load the adapter class" do
|
17
|
-
# bad test for ordering
|
18
|
-
# proc { Skiima::DbAdapters::PostgresqlAdapter }.must_raise(NameError)
|
19
|
-
|
20
|
-
Skiima::DbAdapters::Resolver.new(db)
|
21
|
-
Skiima::DbAdapters::PostgresqlAdapter.must_be_instance_of Class
|
22
|
-
end
|
23
|
-
|
24
|
-
it "should set the adapter method" do
|
25
|
-
Skiima::DbAdapters::Resolver.new(db).adapter_method.must_equal "postgresql_connection"
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
describe Skiima::DbAdapters::Base do
|
30
|
-
|
31
|
-
end
|