mysql_framework 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe MysqlFramework::SqlTable do
6
+ let(:table) { described_class.new('gems') }
7
+
8
+ describe '#[](column)' do
9
+ it 'returns a new SqlColumn class for the specified column' do
10
+ expect(table[:version]).to be_a(MysqlFramework::SqlColumn)
11
+ expect(table[:version].to_s).to eq('`gems`.`version`')
12
+ end
13
+ end
14
+
15
+ describe '#to_s' do
16
+ it 'returns the tablename wrapped in backticks' do
17
+ expect(table.to_s).to eq('`gems`')
18
+ end
19
+ end
20
+
21
+ describe '#to_sym' do
22
+ it 'returns the table name as a symbol' do
23
+ expect(table.to_sym).to eq(:gems)
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,52 @@
1
+ require 'simplecov'
2
+ SimpleCov.start do
3
+ add_filter 'spec/'
4
+ end
5
+
6
+ ENV['MYSQL_DATABASE'] ||= 'test_database'
7
+ ENV['MYSQL_HOST'] ||= '127.0.0.1'
8
+ ENV['MYSQL_PARTITIONS'] ||= '5'
9
+ ENV['MYSQL_PASSWORD'] ||= ''
10
+ ENV['MYSQL_PORT'] ||= '3306'
11
+ ENV['MYSQL_USERNAME'] ||= 'root'
12
+ ENV['REDIS_URL'] ||= 'redis://127.0.0.1:6379'
13
+
14
+ require 'bundler'
15
+ require 'mysql_framework'
16
+ require 'securerandom'
17
+
18
+ require_relative 'support/scripts/create_test_table'
19
+ require_relative 'support/scripts/create_demo_table'
20
+ require_relative 'support/scripts/create_test_proc'
21
+ require_relative 'support/tables/test'
22
+ require_relative 'support/tables/demo'
23
+
24
+ RSpec.configure do |config|
25
+ config.expect_with :rspec do |expectations|
26
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
27
+ end
28
+
29
+ config.mock_with :rspec do |mocks|
30
+ mocks.verify_partial_doubles = true
31
+ end
32
+ end
33
+
34
+ client = Mysql2::Client.new({
35
+ host: ENV.fetch('MYSQL_HOST'),
36
+ port: ENV.fetch('MYSQL_PORT'),
37
+ username: ENV.fetch('MYSQL_USERNAME'),
38
+ password: ENV.fetch('MYSQL_PASSWORD'),
39
+ })
40
+ client.query("DROP DATABASE IF EXISTS `#{ENV.fetch('MYSQL_DATABASE')}`;")
41
+ client.query("CREATE DATABASE `#{ENV.fetch('MYSQL_DATABASE')}`;")
42
+
43
+ connector = MysqlFramework::Connector.new
44
+ connector.query("DROP TABLE IF EXISTS `#{ENV.fetch('MYSQL_DATABASE')}`.`gems`")
45
+ connector.query("CREATE TABLE `#{ENV.fetch('MYSQL_DATABASE')}`.`gems` (
46
+ `id` CHAR(36) NOT NULL,
47
+ `name` VARCHAR(255) NULL,
48
+ `author` VARCHAR(255) NULL,
49
+ `created_at` DATETIME,
50
+ `updated_at` DATETIME,
51
+ PRIMARY KEY (`id`)
52
+ )")
@@ -0,0 +1,5 @@
1
+ CREATE PROCEDURE `test_procedure`()
2
+ BEGIN
3
+ SELECT * FROM demo;
4
+ SELECT * FROM test;
5
+ END
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MysqlFramework
4
+ module Support
5
+ module Scripts
6
+ class CreateDemoTable < MysqlFramework::Scripts::Base
7
+ def initialize
8
+ @identifier = 201806021520 # 15:20 02/06/2018
9
+ end
10
+
11
+ def apply
12
+ mysql_connector.query(<<~SQL)
13
+ CREATE TABLE IF NOT EXISTS `#{database_name}`.`demo` (
14
+ `id` CHAR(36) NOT NULL,
15
+ `name` VARCHAR(255) NULL,
16
+ `created_at` DATETIME NOT NULL,
17
+
18
+ `updated_at` DATETIME NOT NULL,
19
+ PRIMARY KEY (`id`)
20
+ )
21
+ SQL
22
+ end
23
+
24
+ def rollback
25
+ raise 'Rollback not supported in test.'
26
+ end
27
+
28
+ def tags
29
+ [MysqlFramework::Support::Tables::DemoTable::NAME]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MysqlFramework
4
+ module Support
5
+ module Scripts
6
+ class CreateTestProc < MysqlFramework::Scripts::Base
7
+ def initialize
8
+ @identifier = 201807031200 # 12:90 03/07/2018
9
+ end
10
+
11
+ PROC_FILE = 'spec/support/procedure.sql'
12
+
13
+ def apply
14
+ update_procedure('test_procedure', PROC_FILE)
15
+ end
16
+
17
+ def rollback
18
+ raise 'Rollback not supported in test.'
19
+ end
20
+
21
+ def tags
22
+ [MysqlFramework::Support::Tables::TestTable::NAME, 'TestProc']
23
+ end
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MysqlFramework
4
+ module Support
5
+ module Scripts
6
+ class CreateTestTable < MysqlFramework::Scripts::Base
7
+ def initialize
8
+ @identifier = 201801011030 # 10:30 01/01/2018
9
+ end
10
+
11
+ def apply
12
+ mysql_connector.query(<<~SQL)
13
+ CREATE TABLE IF NOT EXISTS `#{database_name}`.`test` (
14
+ `id` CHAR(36) NOT NULL,
15
+ `name` VARCHAR(255) NULL,
16
+ `action` VARCHAR(255) NULL,
17
+ `created_at` DATETIME NOT NULL,
18
+ `updated_at` DATETIME NOT NULL,
19
+ PRIMARY KEY (`id`)
20
+ )
21
+ SQL
22
+ end
23
+
24
+ def rollback
25
+ raise 'Rollback not supported in test.'
26
+ end
27
+
28
+ def tags
29
+ [MysqlFramework::Support::Tables::TestTable::NAME]
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MysqlFramework
4
+ module Support
5
+ module Tables
6
+ class DemoTable
7
+ extend MysqlFramework::Scripts::Table
8
+
9
+ NAME = 'demo'
10
+
11
+ register_table NAME
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ module MysqlFramework
4
+ module Support
5
+ module Tables
6
+ class TestTable
7
+ extend MysqlFramework::Scripts::Table
8
+
9
+ NAME = 'test'
10
+
11
+ register_table NAME
12
+ end
13
+ end
14
+ end
15
+ end
metadata ADDED
@@ -0,0 +1,157 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: mysql_framework
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Sage
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2018-07-03 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.11'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.11'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: mysql2
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '0.4'
76
+ type: :runtime
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '0.4'
83
+ - !ruby/object:Gem::Dependency
84
+ name: redlock
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :runtime
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ description: A lightweight framework to provide managers for working with MySQL.
98
+ email:
99
+ - support@sageone.com
100
+ executables: []
101
+ extensions: []
102
+ extra_rdoc_files: []
103
+ files:
104
+ - bin/console
105
+ - bin/setup
106
+ - lib/mysql_framework.rb
107
+ - lib/mysql_framework/connector.rb
108
+ - lib/mysql_framework/logger.rb
109
+ - lib/mysql_framework/scripts.rb
110
+ - lib/mysql_framework/scripts/base.rb
111
+ - lib/mysql_framework/scripts/manager.rb
112
+ - lib/mysql_framework/scripts/table.rb
113
+ - lib/mysql_framework/sql_column.rb
114
+ - lib/mysql_framework/sql_condition.rb
115
+ - lib/mysql_framework/sql_query.rb
116
+ - lib/mysql_framework/sql_table.rb
117
+ - lib/mysql_framework/version.rb
118
+ - spec/lib/mysql_framework/connector_spec.rb
119
+ - spec/lib/mysql_framework/logger_spec.rb
120
+ - spec/lib/mysql_framework/scripts/base_spec.rb
121
+ - spec/lib/mysql_framework/scripts/manager_spec.rb
122
+ - spec/lib/mysql_framework/sql_column_spec.rb
123
+ - spec/lib/mysql_framework/sql_condition_spec.rb
124
+ - spec/lib/mysql_framework/sql_query_spec.rb
125
+ - spec/lib/mysql_framework/sql_table_spec.rb
126
+ - spec/spec_helper.rb
127
+ - spec/support/procedure.sql
128
+ - spec/support/scripts/create_demo_table.rb
129
+ - spec/support/scripts/create_test_proc.rb
130
+ - spec/support/scripts/create_test_table.rb
131
+ - spec/support/tables/demo.rb
132
+ - spec/support/tables/test.rb
133
+ homepage: https://github.com/sage/mysql_framework
134
+ licenses:
135
+ - MIT
136
+ metadata: {}
137
+ post_install_message:
138
+ rdoc_options: []
139
+ require_paths:
140
+ - lib
141
+ required_ruby_version: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ required_rubygems_version: !ruby/object:Gem::Requirement
147
+ requirements:
148
+ - - ">="
149
+ - !ruby/object:Gem::Version
150
+ version: '0'
151
+ requirements: []
152
+ rubyforge_project:
153
+ rubygems_version: 2.7.3
154
+ signing_key:
155
+ specification_version: 4
156
+ summary: A lightweight framework to provide managers for working with MySQL.
157
+ test_files: []