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
@@ -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
@@ -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
@@ -6,8 +6,8 @@ en:
6
6
 
7
7
  messages:
8
8
  errors:
9
- open_db_yaml: Could not open Skiima Database Config!
10
- open_depends_yaml: Could not open Skiima Depends Config!
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,10 @@
1
+ require "skiima"
2
+ require "rails"
3
+
4
+ module Skiima
5
+ class Railtie < Rails::Railtie
6
+ rake_tasks do
7
+ load "skiima/railties/skiima.rake"
8
+ end
9
+ end
10
+ end
@@ -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
@@ -1,4 +1,4 @@
1
1
  # encoding: utf-8
2
2
  module Skiima
3
- VERSION = "0.1.000"
4
- end
3
+ VERSION = "0.2.2"
4
+ end
@@ -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.0.21'
26
- s.add_development_dependency "minitest", '~> 2.9.1'
27
- s.add_development_dependency "minitest-matchers", '~> 1.1.3'
28
- s.add_development_dependency "mocha", '~> 0.10.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