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