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.
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