convergence 1.0.1 → 1.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a094b6afa402acbb8e29b69c60580f89322b8437
4
- data.tar.gz: 39ad0cfc2bcefed5cb2fcc365d73484933fcb017
2
+ SHA256:
3
+ metadata.gz: d589a1c75e088d6e45f8dc8b3d0afdab65025b9f6ac1cb1abf919703dbc34682
4
+ data.tar.gz: e01d8e2e02c26f1c9d8bc80a7aeb2e3b425eded2c138203d3cb8e3ad602ab7d9
5
5
  SHA512:
6
- metadata.gz: c6bd2505d21ab261de51ed9c08b38a09954333c192e919d21afa2c79abb2c444e6ef044ca23c33872b1a762c4bfa7cd814744f9de4c7d3ebf024f9fc50776696
7
- data.tar.gz: 806d68d3b11c388ded5932d6f68e89520e4c70dfab1c90d5dc3f0590257e5abbfec6600461e016458aa2c4afd444d2d88e51465af5866c8e5893db19178b78a7
6
+ metadata.gz: 2622208e674c2192813556e25911b72db056fc57a369928e99047efcc97e66f7b152a1a2e8bec37f5aba7ddc27831d27357b9cea5d8aecda2526ae844f0068a0
7
+ data.tar.gz: ec99f89c4803f0dd2033d915de708b01b5d7e176c80f483e2abcdab9ecade94991992f2f67dbc9e54bded4dbf4501b99aaa01e308c5d8b54d833868d2010418c
@@ -1,3 +1,9 @@
1
+ ## Convergence 1.0.2 (May 24, 2019) ##
2
+
3
+ * Support ssl connections (PR: #69)
4
+
5
+ *yujideveloper*
6
+
1
7
  ## Convergence 1.0.1 (September 27, 2018) ##
2
8
 
3
9
  * Add Rollback Dryrun command (PR: #64)
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- convergence (1.0.1)
4
+ convergence (1.0.2)
5
5
  diff-lcs
6
6
  diffy
7
7
  mysql2
@@ -13,8 +13,8 @@ GEM
13
13
  ast (2.3.0)
14
14
  coderay (1.1.2)
15
15
  diff-lcs (1.3)
16
- diffy (3.2.1)
17
- ffi (1.9.18)
16
+ diffy (3.3.0)
17
+ ffi (1.11.1)
18
18
  formatador (0.2.5)
19
19
  guard (2.14.1)
20
20
  formatador (>= 0.2.4)
@@ -94,4 +94,4 @@ DEPENDENCIES
94
94
  rubocop
95
95
 
96
96
  BUNDLED WITH
97
- 1.16.3
97
+ 1.17.1
@@ -23,7 +23,7 @@ Gem::Specification.new do |spec|
23
23
  spec.add_dependency 'diffy'
24
24
  spec.add_dependency 'thor', '~> 0.20'
25
25
 
26
- spec.required_ruby_version = ">= 2.3.0"
26
+ spec.required_ruby_version = ">= 2.4.0"
27
27
 
28
28
  spec.add_development_dependency 'bundler', '~> 1.7'
29
29
  spec.add_development_dependency 'rake', '~> 10.0'
@@ -5,8 +5,6 @@ require 'convergence/module'
5
5
  require 'convergence/config'
6
6
 
7
7
  class Convergence::CLI < Thor
8
- default_command :__fallback # TODO: `__fallback` will be removed in a future version(maybe v1.1.0)
9
-
10
8
  map %w[--version -v] => :version
11
9
 
12
10
  desc 'apply FILE', 'execute sql to your database'
@@ -48,61 +46,10 @@ class Convergence::CLI < Thor
48
46
  puts "version #{Convergence::VERSION}"
49
47
  end
50
48
 
51
- # TODO: `__fallback` will be removed in a future version(maybe v1.1.0)
52
- desc '', '', hide: true
53
- method_option :config,
54
- aliases: '-c', type: :string,
55
- desc: 'Database Yaml Setting'
56
- method_option :diff,
57
- aliases: '-d', type: :array, default: nil,
58
- banner: 'DSL1 DSL2'
59
- method_option :export,
60
- aliases: '-e', type: :boolean, default: false,
61
- desc: 'export db schema to dsl'
62
- method_option :input,
63
- aliases: '-i', type: :string,
64
- desc: 'Input DSL'
65
- method_option :dryrun,
66
- type: :boolean, default: false
67
- method_option :apply,
68
- type: :boolean, default: false,
69
- desc: 'execute sql to your database'
70
- def __fallback
71
- command_klass =
72
- if !options[:diff].nil? && !options[:diff].empty?
73
- require 'convergence/command/diff'
74
- opts = { diff: options[:diff] }
75
- Convergence::Command::Diff
76
- elsif options[:export]
77
- require 'convergence/command/export'
78
- opts = {}
79
- Convergence::Command::Export
80
- elsif options[:dryrun]
81
- require 'convergence/command/dryrun'
82
- opts = { input: options[:input] }
83
- Convergence::Command::Dryrun
84
- elsif options[:apply]
85
- require 'convergence/command/apply'
86
- opts = { input: options[:input] }
87
- Convergence::Command::Apply
88
- end
89
-
90
- if command_klass
91
- deprecation_warning
92
- command_klass.new(opts, config: config).execute
93
- else
94
- help
95
- end
96
- end
97
-
98
49
  private
99
50
 
100
51
  def config
101
52
  return unless options[:config]
102
53
  @config ||= Convergence::Config.load(options[:config])
103
54
  end
104
-
105
- def deprecation_warning
106
- warn '[DEPRECATION] Flag style command is deprecated. Please use sub-command style instead.'
107
- end
108
55
  end
@@ -12,6 +12,8 @@ class Convergence::Command
12
12
  end
13
13
  end
14
14
 
15
+ private
16
+
15
17
  def database_adapter
16
18
  @config.nil? ? 'mysql' : @config.adapter
17
19
  end
@@ -30,16 +32,6 @@ class Convergence::Command
30
32
  end
31
33
  end
32
34
 
33
- def sql_generator
34
- @sql_generator ||= case database_adapter
35
- when 'mysql', 'mysql2'
36
- require 'convergence/sql_generator/mysql_generator'
37
- SQLGenerator::MysqlGenerator.new
38
- else
39
- fail NotImplementedError.new('unknown database adapter')
40
- end
41
- end
42
-
43
35
  def logger
44
36
  @logger ||= Convergence::Logger.new
45
37
  end
@@ -6,19 +6,34 @@ require 'convergence/default_parameter'
6
6
  require 'convergence/diff'
7
7
 
8
8
  class Convergence::Command::Apply < Convergence::Command
9
- def validate!
10
- fail ArgumentError.new('config required') if @config.nil?
11
- fail ArgumentError.new('input required') unless @opts[:input]
12
- end
13
-
14
9
  def execute
15
- validate!
16
10
  current_dir_path = Pathname.new(@opts[:input]).realpath.dirname
17
11
  input_tables = Convergence::DSL.parse(File.open(@opts[:input]).read, current_dir_path)
18
12
  current_tables = dumper.dump
19
13
  execute_sql(input_tables, current_tables)
20
14
  end
21
15
 
16
+ def generate_sql(input_tables, current_tables)
17
+ current_tables_with_full_option =
18
+ Convergence::DefaultParameter.append_database_default_parameter(current_tables, database_adapter)
19
+ input_tables_with_full_option =
20
+ Convergence::DefaultParameter.append_database_default_parameter(input_tables, database_adapter)
21
+ delta = Convergence::Diff.new.diff(current_tables_with_full_option, input_tables_with_full_option)
22
+ sql_generator.generate(input_tables_with_full_option, delta, current_tables_with_full_option)
23
+ end
24
+
25
+ private
26
+
27
+ def sql_generator
28
+ @sql_generator ||= case database_adapter
29
+ when 'mysql', 'mysql2'
30
+ require 'convergence/sql_generator/mysql_generator'
31
+ SQLGenerator::MysqlGenerator.new
32
+ else
33
+ fail NotImplementedError.new('unknown database adapter')
34
+ end
35
+ end
36
+
22
37
  def execute_sql(input_tables, current_tables)
23
38
  sql = generate_sql(input_tables, current_tables)
24
39
  unless sql.strip.empty?
@@ -45,13 +60,4 @@ SET FOREIGN_KEY_CHECKS=1;
45
60
  end
46
61
  end
47
62
  end
48
-
49
- def generate_sql(input_tables, current_tables)
50
- current_tables_with_full_option =
51
- Convergence::DefaultParameter.append_database_default_parameter(current_tables, database_adapter)
52
- input_tables_with_full_option =
53
- Convergence::DefaultParameter.append_database_default_parameter(input_tables, database_adapter)
54
- delta = Convergence::Diff.new.diff(current_tables_with_full_option, input_tables_with_full_option)
55
- sql_generator.generate(input_tables_with_full_option, delta, current_tables_with_full_option)
56
- end
57
63
  end
@@ -5,14 +5,7 @@ require 'convergence/pretty_diff'
5
5
  require 'convergence/dsl'
6
6
 
7
7
  class Convergence::Command::Diff < Convergence::Command
8
- def validate!
9
- unless @opts[:diff].size == 2
10
- fail ArgumentError.new('diff required two arguments')
11
- end
12
- end
13
-
14
8
  def execute
15
- validate!
16
9
  from = Convergence::DefaultParameter.remove_database_default_parameter(from_tables, database_adapter)
17
10
  to = Convergence::DefaultParameter.remove_database_default_parameter(to_tables, database_adapter)
18
11
  msg = Convergence::PrettyDiff.new(from, to).output
@@ -6,13 +6,7 @@ require 'convergence/default_parameter'
6
6
  require 'convergence/pretty_diff'
7
7
 
8
8
  class Convergence::Command::Dryrun < Convergence::Command
9
- def validate!
10
- fail ArgumentError.new('config required') if @config.nil?
11
- fail ArgumentError.new('input required') unless @opts[:input]
12
- end
13
-
14
9
  def execute
15
- validate!
16
10
  current_dir_path = Pathname.new(@opts[:input]).realpath.dirname
17
11
  input_tables = Convergence::DSL.parse(File.open(@opts[:input]).read, current_dir_path)
18
12
  current_tables = dumper.dump
@@ -21,6 +15,8 @@ class Convergence::Command::Dryrun < Convergence::Command
21
15
  output_sql(input_tables, current_tables)
22
16
  end
23
17
 
18
+ private
19
+
24
20
  def output_diff(input_tables, current_tables)
25
21
  input_tables_without_default_parameter =
26
22
  Convergence::DefaultParameter.remove_database_default_parameter(input_tables, database_adapter)
@@ -3,14 +3,7 @@ require 'convergence/dumper'
3
3
  require 'convergence/default_parameter'
4
4
 
5
5
  class Convergence::Command::Export < Convergence::Command
6
- def validate!
7
- if @config.nil?
8
- fail ArgumentError.new('config required')
9
- end
10
- end
11
-
12
6
  def execute
13
- validate!
14
7
  tables = Convergence::DefaultParameter.remove_database_default_parameter(dumper.dump, database_adapter)
15
8
  msg = Convergence::Dumper.new.dump_dsl(tables)
16
9
  logger.output(msg)
@@ -5,13 +5,7 @@ require 'convergence/dsl'
5
5
  require 'convergence/default_parameter'
6
6
 
7
7
  class Convergence::Command::RollbackDryrun < Convergence::Command
8
- def validate!
9
- fail ArgumentError.new('config required') if @config.nil?
10
- fail ArgumentError.new('input required') unless @opts[:input]
11
- end
12
-
13
8
  def execute
14
- validate!
15
9
  current_dir_path = Pathname.new(@opts[:input]).realpath.dirname
16
10
  input_tables = Convergence::DSL.parse(File.open(@opts[:input]).read, current_dir_path)
17
11
  current_tables = dumper.dump
@@ -19,6 +13,8 @@ class Convergence::Command::RollbackDryrun < Convergence::Command
19
13
  output_sql(current_tables, input_tables)
20
14
  end
21
15
 
16
+ private
17
+
22
18
  def output_sql(input_tables, current_tables)
23
19
  msg = Convergence::Command::Apply
24
20
  .new(@opts, config: @config)
@@ -4,7 +4,33 @@ require 'yaml'
4
4
  class Convergence::Config
5
5
  ATTRIBUTES = %i[adapter database host port username password].freeze
6
6
 
7
- attr_accessor(*ATTRIBUTES)
7
+ attr_accessor(*ATTRIBUTES, :mysql)
8
+
9
+ class MySQL
10
+ ATTRIBUTES = %i[ssl_mode sslkey sslcert sslca sslcapath sslcipher sslverify].freeze
11
+
12
+ attr_accessor(*ATTRIBUTES)
13
+
14
+ def initialize(attributes)
15
+ attributes.each do |k, v|
16
+ next if v.nil?
17
+ next if !ATTRIBUTES.include?(k.to_sym) && !ATTRIBUTES.include?(k.to_s)
18
+ instance_variable_set("@#{k}", v)
19
+ end
20
+ end
21
+
22
+ def ssl_options
23
+ {
24
+ ssl_mode: ssl_mode,
25
+ sslkey: sslkey,
26
+ sslcert: sslcert,
27
+ sslca: sslca,
28
+ sslcapath: sslcapath,
29
+ sslcipher: sslcipher,
30
+ sslverify: sslverify
31
+ }.compact
32
+ end
33
+ end
8
34
 
9
35
  def initialize(attributes)
10
36
  attributes.each do |k, v|
@@ -12,6 +38,10 @@ class Convergence::Config
12
38
  next if !ATTRIBUTES.include?(k.to_sym) && !ATTRIBUTES.include?(k.to_s)
13
39
  instance_variable_set("@#{k}", v)
14
40
  end
41
+ case adapter
42
+ when 'mysql', 'mysql2'
43
+ @mysql = MySQL.new(attributes)
44
+ end
15
45
  end
16
46
 
17
47
  def self.load(yaml_path)
@@ -10,21 +10,25 @@ class Convergence::DatabaseConnector::MysqlConnector
10
10
 
11
11
  def client(database_name = @config.database)
12
12
  @mysql ||= Mysql2::Client.new(
13
- host: @config.host,
14
- port: @config.port,
15
- username: @config.username,
16
- password: @config.password,
17
- database: database_name
13
+ {
14
+ host: @config.host,
15
+ port: @config.port,
16
+ username: @config.username,
17
+ password: @config.password,
18
+ database: database_name
19
+ }.merge!(@config.mysql.ssl_options)
18
20
  )
19
21
  end
20
22
 
21
23
  def schema_client
22
24
  @schema_mysql ||= Mysql2::Client.new(
23
- host: @config.host,
24
- port: @config.port,
25
- username: @config.username,
26
- password: @config.password,
27
- database: 'information_schema'
25
+ {
26
+ host: @config.host,
27
+ port: @config.port,
28
+ username: @config.username,
29
+ password: @config.password,
30
+ database: 'information_schema'
31
+ }.merge!(@config.mysql.ssl_options)
28
32
  )
29
33
  end
30
34
  end
@@ -1,3 +1,3 @@
1
1
  module Convergence
2
- VERSION = '1.0.1'
2
+ VERSION = '1.0.2'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: convergence
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.1
4
+ version: 1.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Shinsuke Nishio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-27 00:00:00.000000000 Z
11
+ date: 2019-05-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: mysql2
@@ -243,7 +243,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
243
243
  requirements:
244
244
  - - ">="
245
245
  - !ruby/object:Gem::Version
246
- version: 2.3.0
246
+ version: 2.4.0
247
247
  required_rubygems_version: !ruby/object:Gem::Requirement
248
248
  requirements:
249
249
  - - ">="
@@ -251,7 +251,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
251
251
  version: '0'
252
252
  requirements: []
253
253
  rubyforge_project:
254
- rubygems_version: 2.6.8
254
+ rubygems_version: 2.7.6
255
255
  signing_key:
256
256
  specification_version: 4
257
257
  summary: DB Schema management tool