skiima 0.1.000 → 0.2.2

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. checksums.yaml +15 -0
  2. data/.gitignore +9 -0
  3. data/.travis.yml +11 -3
  4. data/Gemfile +12 -6
  5. data/Guardfile +13 -11
  6. data/LICENSE +20 -0
  7. data/Procfile.example +2 -0
  8. data/README.md +170 -23
  9. data/Rakefile +26 -22
  10. data/lib/skiima.rb +61 -240
  11. data/lib/skiima/config.rb +60 -0
  12. data/lib/skiima/config/struct.rb +87 -0
  13. data/lib/skiima/db/connector.rb +195 -0
  14. data/lib/skiima/db/connector/active_record.rb +11 -0
  15. data/lib/skiima/db/connector/active_record/base_connector.rb +34 -0
  16. data/lib/skiima/db/connector/active_record/mysql2_connector.rb +147 -0
  17. data/lib/skiima/db/connector/active_record/mysql_connector.rb +177 -0
  18. data/lib/skiima/db/connector/active_record/postgresql_connector.rb +39 -0
  19. data/lib/skiima/db/helpers/mysql.rb +230 -0
  20. data/lib/skiima/db/helpers/postgresql.rb +221 -0
  21. data/lib/skiima/db/resolver.rb +62 -0
  22. data/lib/skiima/dependency/reader.rb +55 -0
  23. data/lib/skiima/dependency/script.rb +63 -0
  24. data/lib/skiima/i18n.rb +24 -0
  25. data/lib/skiima/loader.rb +108 -0
  26. data/lib/skiima/locales/en.yml +2 -2
  27. data/lib/skiima/logger.rb +54 -0
  28. data/lib/skiima/railtie.rb +10 -0
  29. data/lib/skiima/railties/skiima.rake +31 -0
  30. data/lib/skiima/version.rb +2 -2
  31. data/skiima.gemspec +5 -5
  32. data/spec/config/{database.yml → database.yml.example} +16 -0
  33. data/spec/config/database.yml.travis +69 -0
  34. data/spec/db/skiima/{depends.yml → dependencies.yml} +7 -2
  35. data/spec/db/skiima/{empty_depends.yml → empty_dependencies.yml} +0 -0
  36. data/spec/db/skiima/init_test_db/database.skiima_test.mysql.current.sql +7 -0
  37. data/spec/db/skiima/init_test_db/database.skiima_test.postgresql.current.sql +7 -0
  38. data/spec/mysql2_spec.rb +61 -12
  39. data/spec/mysql_spec.rb +66 -27
  40. data/spec/postgresql_spec.rb +55 -34
  41. data/spec/shared_examples/config_shared_example.rb +40 -0
  42. data/spec/skiima/config/struct_spec.rb +78 -0
  43. data/spec/skiima/config_spec.rb +6 -0
  44. data/spec/skiima/db/connector/active_record/base_connector_spec.rb +0 -0
  45. data/spec/skiima/db/connector/active_record/mysql2_connector_spec.rb +3 -0
  46. data/spec/skiima/db/connector/active_record/mysql_connector_spec.rb +3 -0
  47. data/spec/skiima/db/connector/active_record/postgresql_connector_spec.rb +7 -0
  48. data/spec/skiima/db/connector_spec.rb +6 -0
  49. data/spec/skiima/db/resolver_spec.rb +54 -0
  50. data/spec/skiima/dependency/reader_spec.rb +52 -0
  51. data/spec/skiima/{dependency_spec.rb → dependency/script_spec.rb} +3 -41
  52. data/spec/skiima/i18n_spec.rb +29 -0
  53. data/spec/skiima/loader_spec.rb +102 -0
  54. data/spec/skiima/logger_spec.rb +0 -0
  55. data/spec/skiima_spec.rb +43 -64
  56. data/spec/spec_helper.rb +38 -4
  57. metadata +144 -100
  58. data/lib/skiima/db_adapters.rb +0 -187
  59. data/lib/skiima/db_adapters/base_mysql_adapter.rb +0 -308
  60. data/lib/skiima/db_adapters/mysql2_adapter.rb +0 -114
  61. data/lib/skiima/db_adapters/mysql_adapter.rb +0 -287
  62. data/lib/skiima/db_adapters/postgresql_adapter.rb +0 -509
  63. data/lib/skiima/dependency.rb +0 -84
  64. data/lib/skiima_helpers.rb +0 -49
  65. data/spec/skiima/db_adapters/mysql_adapter_spec.rb +0 -38
  66. data/spec/skiima/db_adapters/postgresql_adapter_spec.rb +0 -20
  67. data/spec/skiima/db_adapters_spec.rb +0 -31
@@ -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
@@ -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