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
@@ -0,0 +1,62 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Skiima
|
3
|
+
module Db
|
4
|
+
|
5
|
+
class Resolver
|
6
|
+
extend Forwardable
|
7
|
+
|
8
|
+
attr_accessor :db, :orm_module, :connector_klass
|
9
|
+
attr_accessor :adapter
|
10
|
+
|
11
|
+
delegate create_connector: :connector_klass
|
12
|
+
|
13
|
+
def initialize(db_config)
|
14
|
+
merge_db_defaults(db_config)
|
15
|
+
adapter_specified?
|
16
|
+
load_orm_module
|
17
|
+
load_db_connector
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def merge_db_defaults(opts = {})
|
23
|
+
@db = (db_defaults.merge(Skiima.symbolize_keys(opts)))
|
24
|
+
end
|
25
|
+
|
26
|
+
def db_defaults
|
27
|
+
{ orm: 'active_record' }
|
28
|
+
end
|
29
|
+
|
30
|
+
def adapter_specified?
|
31
|
+
raise(AdapterNotSpecified, "database configuration does not specify adapter") unless db.key?(:adapter)
|
32
|
+
end
|
33
|
+
|
34
|
+
def load_db_connector
|
35
|
+
require "skiima/db/connector/#{db[:orm]}/#{db[:adapter]}_connector"
|
36
|
+
@connector_klass = get_db_connector_klass
|
37
|
+
rescue => e
|
38
|
+
raise LoadError, "Adapter does not exist for #{db[:orm]}: #{db[:adapter]} - (#{e.message})", e.backtrace
|
39
|
+
end
|
40
|
+
|
41
|
+
def load_orm_module
|
42
|
+
require "skiima/db/connector/#{db[:orm]}"
|
43
|
+
rescue => e
|
44
|
+
raise LoadError, "Adapter Module does not exist for #{db[:orb]}: (#{e.message})", e.backtrace
|
45
|
+
end
|
46
|
+
|
47
|
+
def get_db_connector_klass
|
48
|
+
#avoiding inflections
|
49
|
+
@connector_klass =
|
50
|
+
case (@orm_module = db[:orm])
|
51
|
+
when 'active_record'
|
52
|
+
case db[:adapter]
|
53
|
+
when 'postgresql' then Skiima::Db::Connector::ActiveRecord::PostgresqlConnector
|
54
|
+
when 'mysql' then Skiima::Db::Connector::ActiveRecord::MysqlConnector
|
55
|
+
when 'mysql2' then Skiima::Db::Connector::ActiveRecord::Mysql2Connector
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
end
|
62
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module Skiima
|
2
|
+
module Dependency
|
3
|
+
|
4
|
+
class Reader
|
5
|
+
attr_accessor :scripts
|
6
|
+
attr_accessor :dependencies, :adapter, :version
|
7
|
+
|
8
|
+
def initialize(dependencies, adapter, opts = {})
|
9
|
+
@dependencies, @adapter = dependencies, adapter.to_sym
|
10
|
+
@version = opts[:version] || :current
|
11
|
+
end
|
12
|
+
|
13
|
+
def adapter
|
14
|
+
case @adapter.to_s
|
15
|
+
when 'mysql', 'mysql2' then :mysql
|
16
|
+
else @adapter
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_group(g)
|
21
|
+
raise Skiima::SqlGroupNotFound unless dependencies.has_key?(g)
|
22
|
+
dependencies[g]
|
23
|
+
end
|
24
|
+
|
25
|
+
def get_adapter(grp)
|
26
|
+
grp.has_key?(adapter) ? (grp[adapter] || {}) : {}
|
27
|
+
end
|
28
|
+
|
29
|
+
def get_scripts(group, version_grp)
|
30
|
+
scr = (version_grp.has_key?(version) ? (version_grp[version] || {}) : {})
|
31
|
+
sc = scr.map {|s| Skiima::Dependency::Script.new(group, adapter, version, s)}
|
32
|
+
end
|
33
|
+
|
34
|
+
def get_load_order(*groups)
|
35
|
+
opts = groups.last.is_a?(Hash) ? groups.pop : {}
|
36
|
+
@scripts = groups.inject([]) do |memo, g|
|
37
|
+
grp = get_group(g)
|
38
|
+
scripts = if grp.is_a?(Hash) || (opts[:node] == :internal)
|
39
|
+
get_scripts(g, Skiima.symbolize_keys(read_script_group(grp)))
|
40
|
+
else
|
41
|
+
get_load_order(*(grp.map(&:to_sym)), node: :internal)
|
42
|
+
end
|
43
|
+
memo + scripts
|
44
|
+
end
|
45
|
+
end
|
46
|
+
|
47
|
+
private
|
48
|
+
|
49
|
+
def read_script_group(leaf_node)
|
50
|
+
get_adapter(Skiima.symbolize_keys(leaf_node))
|
51
|
+
end
|
52
|
+
end
|
53
|
+
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module Skiima
|
2
|
+
module Dependency
|
3
|
+
|
4
|
+
class Script
|
5
|
+
attr_accessor :group, :adapter, :version
|
6
|
+
attr_accessor :type, :name, :attr
|
7
|
+
attr_accessor :filename, :content, :sql
|
8
|
+
|
9
|
+
def initialize(group, adapter, version, scriptname)
|
10
|
+
@group, @adapter, @version = group.to_s, adapter.to_s, version.to_s
|
11
|
+
set_attr(scriptname)
|
12
|
+
end
|
13
|
+
|
14
|
+
def filename
|
15
|
+
@filename = [@type,@name,@adapter.to_s,@version,'sql'].join('.')
|
16
|
+
end
|
17
|
+
|
18
|
+
def read_content(direction, root)
|
19
|
+
@content = case
|
20
|
+
when (direction == :up) then read_upfile(root)
|
21
|
+
when (direction == :down && down_script?(root)) then read_downfile(root)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def interpolate_sql(char, vars = {})
|
26
|
+
@sql = Skiima.interpolate_sql(char, @content, vars)
|
27
|
+
end
|
28
|
+
|
29
|
+
def down_filename
|
30
|
+
filename.sub('.sql', '.drop.sql')
|
31
|
+
end
|
32
|
+
|
33
|
+
def read_upfile(root)
|
34
|
+
File.open(full_filename(root)).read
|
35
|
+
end
|
36
|
+
|
37
|
+
def read_downfile(root)
|
38
|
+
File.open(full_down_filename(root)).read
|
39
|
+
end
|
40
|
+
|
41
|
+
def full_filename(root)
|
42
|
+
File.join(root, group, filename)
|
43
|
+
end
|
44
|
+
|
45
|
+
def full_down_filename(root)
|
46
|
+
File.join(root, group, down_filename)
|
47
|
+
end
|
48
|
+
|
49
|
+
private
|
50
|
+
|
51
|
+
def set_attr(scr_name)
|
52
|
+
scr_name = scr_name.split('.')
|
53
|
+
@type, @name = scr_name.shift, scr_name.shift
|
54
|
+
@attr = scr_name
|
55
|
+
end
|
56
|
+
|
57
|
+
def down_script?(root)
|
58
|
+
File.exist?(full_down_filename(root))
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
end
|
63
|
+
end
|
data/lib/skiima/i18n.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
module Skiima
|
4
|
+
module I18n
|
5
|
+
|
6
|
+
def default_locale
|
7
|
+
::Skiima.locale
|
8
|
+
end
|
9
|
+
|
10
|
+
def msg(*args)
|
11
|
+
# TODO: change to use config.locale
|
12
|
+
locale = args.last.is_a?(Symbol) ? args.pop : default_locale
|
13
|
+
lookup = args.join('.')
|
14
|
+
Skiima._(lookup)
|
15
|
+
end
|
16
|
+
|
17
|
+
def set_translation_repository
|
18
|
+
FastGettext.add_text_domain('skiima', :path => File.join(File.dirname(__FILE__), 'skiima', 'locales'), :type => :yaml)
|
19
|
+
Skiima.text_domain = 'skiima'
|
20
|
+
Skiima.locale = locale.to_s
|
21
|
+
end
|
22
|
+
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,108 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Skiima
|
3
|
+
class Loader
|
4
|
+
extend Forwardable
|
5
|
+
include Skiima::Config
|
6
|
+
|
7
|
+
attr_accessor :env, :vars, :reader, :resolver
|
8
|
+
attr_accessor :dependencies, :db, :connector
|
9
|
+
attr_accessor :direction
|
10
|
+
attr_accessor :scripts
|
11
|
+
attr_accessor :logger
|
12
|
+
|
13
|
+
delegate connection: :connector
|
14
|
+
|
15
|
+
def defaults
|
16
|
+
Skiima.config
|
17
|
+
end
|
18
|
+
|
19
|
+
def initialize(env, opts = {})
|
20
|
+
@env = env
|
21
|
+
merge_db_config(opts.delete('db') || {})
|
22
|
+
get_config(opts)
|
23
|
+
set_vars
|
24
|
+
create_logger
|
25
|
+
create_resolver
|
26
|
+
create_connector
|
27
|
+
get_dependency_config
|
28
|
+
create_dependency_reader
|
29
|
+
end
|
30
|
+
|
31
|
+
def up(*args)
|
32
|
+
@direction = :up
|
33
|
+
read_and_execute(*args)
|
34
|
+
self
|
35
|
+
end
|
36
|
+
|
37
|
+
def down(*args)
|
38
|
+
@direction = :down
|
39
|
+
read_and_execute(*args)
|
40
|
+
self
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_resolver
|
44
|
+
@resolver = Skiima::Db::Resolver.new(db)
|
45
|
+
end
|
46
|
+
|
47
|
+
def create_connector
|
48
|
+
@connector = resolver.create_connector(db, logger)
|
49
|
+
end
|
50
|
+
|
51
|
+
def log_message(msg)
|
52
|
+
Skiima.log_message(logger, msg)
|
53
|
+
end
|
54
|
+
|
55
|
+
def read_and_execute(*scripts)
|
56
|
+
read_scripts *scripts
|
57
|
+
interpolate_each_script
|
58
|
+
execute_each_script
|
59
|
+
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def set_vars
|
64
|
+
@vars = config[:vars] || {}
|
65
|
+
end
|
66
|
+
|
67
|
+
def read_scripts(*args)
|
68
|
+
@scripts = reader.get_load_order(*args)
|
69
|
+
@scripts.reverse! if direction == :down
|
70
|
+
end
|
71
|
+
|
72
|
+
def interpolate_each_script
|
73
|
+
scripts.each do |s|
|
74
|
+
s.read_content(direction, full_scripts_path)
|
75
|
+
s.content ||= connector.drop(s.type, s.name, {:attr => s.attr}.merge(config.to_hash)) if direction == :down
|
76
|
+
s.interpolate_sql(interpolator, interpolation_vars)
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
def execute_each_script
|
81
|
+
scripts.each {|s| connector.execute(s.sql)}
|
82
|
+
end
|
83
|
+
|
84
|
+
def create_dependency_reader
|
85
|
+
@reader = Skiima::Dependency::Reader.new(dependencies, db['adapter'], config)
|
86
|
+
end
|
87
|
+
|
88
|
+
def interpolation_vars
|
89
|
+
{ :database => db['database'] }.merge(config[:vars] || {})
|
90
|
+
end
|
91
|
+
|
92
|
+
def get_config(opts)
|
93
|
+
@config = config.merge(opts)
|
94
|
+
end
|
95
|
+
|
96
|
+
def merge_db_config(db_config)
|
97
|
+
@db = read_db_yml(full_database_path)[env].merge(db_config)
|
98
|
+
end
|
99
|
+
|
100
|
+
def get_dependency_config
|
101
|
+
@dependencies = read_dependencies_yml(full_dependencies_path)
|
102
|
+
end
|
103
|
+
|
104
|
+
def create_logger
|
105
|
+
@logger = Skiima::Logger.new config.slice(:logging_out, :logging_level)
|
106
|
+
end
|
107
|
+
end
|
108
|
+
end
|
data/lib/skiima/locales/en.yml
CHANGED
@@ -6,8 +6,8 @@ en:
|
|
6
6
|
|
7
7
|
messages:
|
8
8
|
errors:
|
9
|
-
|
10
|
-
|
9
|
+
open_db_yml: Could not open Skiima Database Config!
|
10
|
+
open_dependencies_yml: Could not open Skiima Dependencies Config!
|
11
11
|
create:
|
12
12
|
start: Creating objects for @class
|
13
13
|
error: Encountered errors creating @class objects -
|
@@ -0,0 +1,54 @@
|
|
1
|
+
# encoding: utf-8
|
2
|
+
module Skiima
|
3
|
+
class Logger
|
4
|
+
extend Forwardable
|
5
|
+
|
6
|
+
delegate debug: :logger
|
7
|
+
delegate info: :logger
|
8
|
+
delegate warn: :logger
|
9
|
+
delegate error: :logger
|
10
|
+
delegate fatal: :logger
|
11
|
+
|
12
|
+
attr_accessor :logger, :logging_out, :logging_level
|
13
|
+
|
14
|
+
def initialize(opts = {})
|
15
|
+
@logging_out = get_logger_out(opts[:logging_out])
|
16
|
+
@logging_level = get_logger_level(opts[:logging_level])
|
17
|
+
create_logger
|
18
|
+
end
|
19
|
+
|
20
|
+
private
|
21
|
+
|
22
|
+
def get_logger_out(str)
|
23
|
+
case str
|
24
|
+
when /STDOUT/i then ::STDOUT
|
25
|
+
when /STDERR/i then ::STDERR
|
26
|
+
else File.join(root_path, str)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
|
30
|
+
def get_logger_level(str)
|
31
|
+
case str
|
32
|
+
when '4', /fatal/i then ::Logger::FATAL
|
33
|
+
when '3', /error/i then ::Logger::ERROR
|
34
|
+
when '2', /warn/i then ::Logger::WARN
|
35
|
+
when '1', /info/i then ::Logger::INFO
|
36
|
+
when '0', /debug/i then ::Logger::DEBUG
|
37
|
+
else ::Logger::ERROR
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
def create_logger
|
42
|
+
@logger = ::Logger.new(logging_out)
|
43
|
+
@logger.level = logging_level
|
44
|
+
end
|
45
|
+
|
46
|
+
end
|
47
|
+
|
48
|
+
module LoggerHelpers
|
49
|
+
def log_message(logger, msg)
|
50
|
+
logger.debug msg
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
@@ -0,0 +1,31 @@
|
|
1
|
+
require "skiima"
|
2
|
+
|
3
|
+
namespace :skiima do
|
4
|
+
|
5
|
+
desc "Runs Skiima.up for :default group in dependencies.yml"
|
6
|
+
task :up, [:skiima_env, :group] do
|
7
|
+
args.with_defaults(:skiima_env => 'development', :group => 'default')
|
8
|
+
Skiima.up(args.skiima_env.to_sym, args.group.to_sym)
|
9
|
+
end
|
10
|
+
|
11
|
+
desc "Runs Skiima.down for :default group in dependencies.yml"
|
12
|
+
task :down, [:skiima_env, :group] do
|
13
|
+
args.with_defaults(:skiima_env => 'development', :group => 'default')
|
14
|
+
Skiima.down(args.skiima_env.to_sym, args.group.to_sym)
|
15
|
+
end
|
16
|
+
|
17
|
+
namespace :test do
|
18
|
+
desc "Runs Skiima.up for :test group in dependencies.yml"
|
19
|
+
task :up, [:skiima_env, :group] do
|
20
|
+
args.with_defaults(:skiima_env => 'test', :group => 'test')
|
21
|
+
Skiima.up(args.skiima_env.to_sym, args.group.to_sym)
|
22
|
+
end
|
23
|
+
|
24
|
+
desc "Runs Skiima.down for :test group in dependencies.yml"
|
25
|
+
task :test, [:skiima_env, :group] do
|
26
|
+
args.with_defaults(:skiima_env => 'test', :group => 'test')
|
27
|
+
Skiima.down(args.skiima_env.to_sym, args.group.to_sym)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
data/lib/skiima/version.rb
CHANGED
data/skiima.gemspec
CHANGED
@@ -5,6 +5,7 @@ require "skiima/version"
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = "skiima"
|
7
7
|
s.version = Skiima::VERSION
|
8
|
+
|
8
9
|
s.authors = ["David Conner"]
|
9
10
|
s.email = ["dconner.pro@gmail.com"]
|
10
11
|
s.homepage = "http://github.com/dcunited001/skiima"
|
@@ -22,11 +23,10 @@ Gem::Specification.new do |s|
|
|
22
23
|
s.add_dependency "fast_gettext", '~> 0.6.0'
|
23
24
|
s.add_dependency "erubis", '~> 2.7.0'
|
24
25
|
|
25
|
-
s.add_development_dependency "bundler", '>= 1.
|
26
|
-
s.add_development_dependency "minitest", '~>
|
27
|
-
s.add_development_dependency "minitest-matchers", '~> 1.
|
28
|
-
s.add_development_dependency "mocha", '~> 0.
|
29
|
-
|
26
|
+
s.add_development_dependency "bundler", '>= 1.3.3'
|
27
|
+
s.add_development_dependency "minitest", '~> 4.6.2'
|
28
|
+
s.add_development_dependency "minitest-matchers", '~> 1.2.0'
|
29
|
+
s.add_development_dependency "mocha", '~> 0.13.2'
|
30
30
|
end
|
31
31
|
|
32
32
|
# Logging
|