ghost_adapter 0.0.2 → 0.1.4

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 16360adbdcaec4bfe137c537c3895a3d7ec75284f43711b17da3985874c337e1
4
- data.tar.gz: 6eb5e12eab95103791e86ae42be79a40aed252b86ca802e683942ec0ee5d2396
3
+ metadata.gz: 1cabaf83939ee711ed1679803274084bedf6598c2711d69bfeee19cb404a0add
4
+ data.tar.gz: e42e338f2c2afc2ea448fc9e14fb5132781b9afedcf1c097131e39a935efcb15
5
5
  SHA512:
6
- metadata.gz: 206bede0e5fb5087a16b56fef1787060b072cd234e1101ba14c8d4b41efac55b15dcd43ce3a5d72dbcf0723c9d3d930a1042bbcd540d26b59459bdaa9fb7c585
7
- data.tar.gz: 1edd7c6b056e355eabd320cabe30eec22699b1c0a91c8c12aff6ccaf348a5cfd130ab1e978d423e55c7c4f034658af8d9918ee15e4beeb8168d55e9b6d064822
6
+ metadata.gz: 80eb4f5803734e3a599c165df1b22fa6892db6fd685d6aa59fc445a072376fad3e8e4fb8535dce94c44af9aced1ec34594a33270b4c0457b0826a11c8e9f6263
7
+ data.tar.gz: d2ef0fa71b5a429e1cddbe99c1432f047ac4842636f6cb58551416ff88f05d8a7d6ff3b1303c3a2769fb68aee95850b749f9b9831154f15bb2b4e66e2dba19a9
@@ -0,0 +1,29 @@
1
+ name: Ruby
2
+
3
+ on:
4
+ push:
5
+ branches: [main]
6
+ pull_request:
7
+ branches: [main]
8
+
9
+ jobs:
10
+ test:
11
+ runs-on: ubuntu-latest
12
+ strategy:
13
+ matrix:
14
+ ruby-version: ["2.5", "2.6", "2.7", "3.0"]
15
+
16
+ steps:
17
+ - uses: actions/checkout@v2
18
+ - name: Set up Ruby
19
+ # To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
20
+ # change this to (see https://github.com/ruby/setup-ruby#versioning):
21
+ # uses: ruby/setup-ruby@v1
22
+ uses: ruby/setup-ruby@473e4d8fe5dd94ee328fdfca9f8c9c7afc9dae5e
23
+ with:
24
+ ruby-version: ${{ matrix.ruby-version }}
25
+ bundler-cache: true # runs 'bundle install' and caches installed gems automatically
26
+ - name: Run rubocop
27
+ run: bundle exec rake rubocop
28
+ - name: Run tests
29
+ run: bundle exec rake spec
data/.gitignore CHANGED
@@ -1,3 +1,5 @@
1
+ .rspec_status
2
+ .DS_Store
1
3
  /.bundle/
2
4
  /.yardoc
3
5
  /_yardoc/
@@ -5,3 +7,4 @@
5
7
  /pkg/
6
8
  /spec/reports/
7
9
  /tmp/
10
+ .byebug_history
data/.rubocop.yml CHANGED
@@ -9,13 +9,17 @@ Style/RescueModifier:
9
9
 
10
10
  Metrics/BlockLength:
11
11
  Exclude:
12
- - test/**/*_test.rb
12
+ - spec/**/*_spec.rb
13
13
 
14
14
  Metrics/MethodLength:
15
15
  IgnoredMethods:
16
16
  - build_ghost_command
17
17
  - mysql2_ghost_connection
18
18
 
19
+ Metrics/ModuleLength:
20
+ Exclude:
21
+ - lib/ghost_adapter/config.rb
22
+
19
23
  Metrics/AbcSize:
20
24
  IgnoredMethods:
21
25
  - build_ghost_command
data/.travis.yml CHANGED
@@ -20,6 +20,6 @@ jobs:
20
20
  script:
21
21
  - bundle exec rake rubocop
22
22
  - stage: Tests
23
- name: Run minitest
23
+ name: Run specs
24
24
  script:
25
- - bundle exec rake test
25
+ - bundle exec rake spec
data/CHANGELOG.md ADDED
@@ -0,0 +1,13 @@
1
+ # CHANGELOG
2
+
3
+ ## 0.1.4
4
+
5
+ - Fix bug caused by missing `require 'open3'` that occurs for some ruby versions
6
+
7
+ ## 0.1.3
8
+
9
+ - Fix bug [#26](https://github.com/WeTransfer/ghost_adapter/issues/26) causing environment configuration to be overwritten by some other configuration methods.
10
+
11
+ ## 0.1.2
12
+
13
+ - Fix bug [#28](https://github.com/WeTransfer/ghost_adapter/issues/28) that resulted in add_index and remove_index calls to not run through `gh-ost`
data/Gemfile.lock CHANGED
@@ -1,18 +1,19 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ghost_adapter (0.0.2)
4
+ ghost_adapter (0.1.4)
5
5
  activerecord (>= 5)
6
+ mysql2 (>= 0.4.0, < 0.6.0)
6
7
 
7
8
  GEM
8
9
  remote: https://rubygems.org/
9
10
  specs:
10
- activemodel (6.1.1)
11
- activesupport (= 6.1.1)
12
- activerecord (6.1.1)
13
- activemodel (= 6.1.1)
14
- activesupport (= 6.1.1)
15
- activesupport (6.1.1)
11
+ activemodel (6.1.3.1)
12
+ activesupport (= 6.1.3.1)
13
+ activerecord (6.1.3.1)
14
+ activemodel (= 6.1.3.1)
15
+ activesupport (= 6.1.3.1)
16
+ activesupport (6.1.3.1)
16
17
  concurrent-ruby (~> 1.0, >= 1.0.2)
17
18
  i18n (>= 1.6, < 2)
18
19
  minitest (>= 5.1)
@@ -20,10 +21,13 @@ GEM
20
21
  zeitwerk (~> 2.3)
21
22
  ast (2.4.2)
22
23
  bump (0.10.0)
24
+ byebug (11.1.3)
23
25
  concurrent-ruby (1.1.8)
24
- i18n (1.8.8)
26
+ diff-lcs (1.4.4)
27
+ i18n (1.8.9)
25
28
  concurrent-ruby (~> 1.0)
26
- minitest (5.14.3)
29
+ minitest (5.14.4)
30
+ mysql2 (0.5.3)
27
31
  parallel (1.20.1)
28
32
  parser (3.0.0.0)
29
33
  ast (~> 2.4.1)
@@ -31,6 +35,19 @@ GEM
31
35
  rake (13.0.3)
32
36
  regexp_parser (2.0.3)
33
37
  rexml (3.2.4)
38
+ rspec (3.10.0)
39
+ rspec-core (~> 3.10.0)
40
+ rspec-expectations (~> 3.10.0)
41
+ rspec-mocks (~> 3.10.0)
42
+ rspec-core (3.10.1)
43
+ rspec-support (~> 3.10.0)
44
+ rspec-expectations (3.10.1)
45
+ diff-lcs (>= 1.2.0, < 2.0)
46
+ rspec-support (~> 3.10.0)
47
+ rspec-mocks (3.10.2)
48
+ diff-lcs (>= 1.2.0, < 2.0)
49
+ rspec-support (~> 3.10.0)
50
+ rspec-support (3.10.2)
34
51
  rubocop (1.8.1)
35
52
  parallel (~> 1.10)
36
53
  parser (>= 3.0.0.0)
@@ -55,9 +72,10 @@ PLATFORMS
55
72
  DEPENDENCIES
56
73
  bump (~> 0)
57
74
  bundler (~> 2)
75
+ byebug (~> 11.1)
58
76
  ghost_adapter!
59
- minitest (~> 5.14)
60
77
  rake (~> 13.0)
78
+ rspec (~> 3)
61
79
  rubocop (~> 1)
62
80
 
63
81
  BUNDLED WITH
data/README.md CHANGED
@@ -2,11 +2,10 @@
2
2
 
3
3
  ![ghost](./doc/images/ghost.png)
4
4
 
5
- ![gem version](https://img.shields.io/gem/v/ghost_adapter)
6
- ![travis](https://img.shields.io/travis/com/wetransfer/ghost_adapter)
7
- ![Hippocratic License](https://img.shields.io/badge/license-Hippocratic-green?link=https://github.com/WeTransfer/ghost_adapter/blob/main/LICENSE.md)
8
- ![gh-ost version](https://img.shields.io/badge/gh--ost%20version-1.1.0-blue?link=https://github.com/github/gh-ost/releases/latest)
9
- ![depfu](https://img.shields.io/depfu/wetransfer/ghost_adapter)
5
+ [![Gem](https://img.shields.io/gem/v/ghost_adapter)](https://rubygems.org/gems/ghost_adapter)
6
+ [![Build Status](https://travis-ci.com/WeTransfer/ghost_adapter.svg?branch=main)](https://travis-ci.com/WeTransfer/ghost_adapter)
7
+ [![Hippocratic License](https://img.shields.io/badge/license-Hippocratic-green)](https://github.com/WeTransfer/ghost_adapter/blob/main/LICENSE.md)
8
+ [![gh-ost version](https://img.shields.io/badge/gh--ost%20version-1.1.0-blue)](https://github.com/github/gh-ost/releases/latest)
10
9
 
11
10
  A tiny, _very configurable_ ActiveRecord adapter built for running [gh-ost](https://github.com/github/gh-ost) migrations. When not running migrations, it'll stay the heck out of the way.
12
11
 
data/Rakefile CHANGED
@@ -1,14 +1,8 @@
1
1
  require 'bundler/gem_tasks'
2
- require 'rake/testtask'
3
-
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << 'test'
6
- t.libs << 'lib'
7
- t.test_files = FileList['test/**/*_test.rb']
8
- end
9
-
2
+ require 'rspec/core/rake_task'
10
3
  require 'rubocop/rake_task'
11
4
 
12
5
  RuboCop::RakeTask.new
6
+ RSpec::Core::RakeTask.new(:spec)
13
7
 
14
- task default: %i[test rubocop]
8
+ task default: %i[spec rubocop]
@@ -23,10 +23,12 @@ Gem::Specification.new do |spec|
23
23
  spec.require_paths = ['lib']
24
24
 
25
25
  spec.add_dependency 'activerecord', '>= 5'
26
+ spec.add_dependency 'mysql2', '>= 0.4.0', '< 0.6.0'
26
27
 
27
28
  spec.add_development_dependency 'bump', '~> 0'
28
29
  spec.add_development_dependency 'bundler', '~> 2'
29
- spec.add_development_dependency 'minitest', '~> 5.14'
30
+ spec.add_development_dependency 'byebug', '~> 11.1'
30
31
  spec.add_development_dependency 'rake', '~> 13.0'
32
+ spec.add_development_dependency 'rspec', '~> 3'
31
33
  spec.add_development_dependency 'rubocop', '~> 1'
32
34
  end
@@ -1,8 +1,6 @@
1
1
  require 'active_record/connection_adapters/mysql2_adapter'
2
2
  require 'ghost_adapter/migrator'
3
3
  require 'ghost_adapter/version_checker'
4
-
5
- gem 'mysql2', '>= 0.4.4', '< 0.6.0'
6
4
  require 'mysql2'
7
5
 
8
6
  module ActiveRecord
@@ -56,6 +54,16 @@ module ActiveRecord
56
54
  end
57
55
  end
58
56
 
57
+ def add_index(table_name, column_name, options = {})
58
+ index_name, index_type, index_columns, index_options = add_index_options(table_name, column_name, options)
59
+ execute "ALTER TABLE #{quote_table_name(table_name)} ADD #{index_type} INDEX #{quote_column_name(index_name)} (#{index_columns})#{index_options}" # rubocop:disable Layout/LineLength
60
+ end
61
+
62
+ def remove_index(table_name, options = {})
63
+ index_name = index_name_for_remove(table_name, options)
64
+ execute "ALTER TABLE #{quote_table_name(table_name)} DROP INDEX #{quote_column_name(index_name)}"
65
+ end
66
+
59
67
  private
60
68
 
61
69
  attr_reader :database, :dry_run
data/lib/ghost_adapter.rb CHANGED
@@ -1,3 +1,8 @@
1
+ require 'active_record'
2
+ require 'active_support/all'
3
+
4
+ require 'active_record/connection_adapters/mysql2_ghost_adapter'
5
+
1
6
  require 'ghost_adapter/config'
2
7
 
3
8
  require 'ghost_adapter/railtie' if defined? ::Rails::Railtie
@@ -8,11 +13,21 @@ module GhostAdapter
8
13
  end
9
14
 
10
15
  def self.setup(options = {})
11
- @@config = GhostAdapter::Config.new(options) # rubocop:disable Style/ClassVars
16
+ new_config = GhostAdapter::Config.new(options)
17
+
18
+ if defined? @@config
19
+ @@config.merge!(new_config)
20
+ else
21
+ @@config = new_config # rubocop:disable Style/ClassVars
22
+ end
12
23
 
13
24
  yield @@config if block_given?
14
25
  end
15
26
 
27
+ def self.clear_config
28
+ @@config = GhostAdapter::Config.new # rubocop:disable Style/ClassVars
29
+ end
30
+
16
31
  module Internal
17
32
  @@ghost_migration_enabled = false # rubocop:disable Style/ClassVars
18
33
 
@@ -78,10 +78,14 @@ module GhostAdapter
78
78
  user
79
79
  verbose].freeze
80
80
  Config = Struct.new(*CONFIG_KEYS, keyword_init: true) do
81
- def initialize(options = {})
81
+ def merge!(other_config)
82
+ other_config.compact.each { |k, v| self[k] = v }
83
+ self
84
+ end
85
+
86
+ def with_env
82
87
  env_config = EnvParser.new(ENV).config
83
- config_options = options.merge(env_config)
84
- super(config_options)
88
+ compact.merge(env_config)
85
89
  end
86
90
 
87
91
  def compact
@@ -89,16 +93,20 @@ module GhostAdapter
89
93
  end
90
94
 
91
95
  def as_args
92
- compact.map do |key, value|
93
- next unless value # Skip both false and null values
96
+ with_env.map { |key, value| arg(key, value) }.compact
97
+ end
98
+
99
+ private
100
+
101
+ def arg(key, value)
102
+ return unless value
94
103
 
95
- hyphenated_key = key.to_s.gsub('_', '-')
96
- if value == true
97
- "--#{hyphenated_key}"
98
- else
99
- "--#{hyphenated_key}=#{value}"
100
- end
101
- end.compact
104
+ hyphenated_key = key.to_s.gsub('_', '-')
105
+ if value == true
106
+ "--#{hyphenated_key}"
107
+ else
108
+ "--#{hyphenated_key}=#{value}"
109
+ end
102
110
  end
103
111
  end
104
112
  end
@@ -7,6 +7,9 @@ module GhostAdapter
7
7
  next unless ghost_key?(key)
8
8
 
9
9
  config_key = convert_env_key(key)
10
+
11
+ next unless GhostAdapter::CONFIG_KEYS.include?(config_key)
12
+
10
13
  config_value = convert_env_value(value)
11
14
 
12
15
  [config_key, config_value]
@@ -20,7 +23,7 @@ module GhostAdapter
20
23
  end
21
24
 
22
25
  def convert_env_key(key)
23
- key.gsub('GHOST_', '').downcase
26
+ key.gsub('GHOST_', '').downcase.to_sym
24
27
  end
25
28
 
26
29
  def convert_env_value(value)
@@ -1,3 +1,3 @@
1
1
  module GhostAdapter
2
- VERSION = '0.0.2'.freeze
2
+ VERSION = '0.1.4'.freeze
3
3
  end
@@ -1,3 +1,5 @@
1
+ require 'open3'
2
+
1
3
  module GhostAdapter
2
4
  class IncompatibleVersion < StandardError
3
5
  def initialize(version = nil)
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ghost_adapter
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.2
4
+ version: 0.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Austin C Roos
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-04 00:00:00.000000000 Z
11
+ date: 2021-03-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -24,6 +24,26 @@ dependencies:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
26
  version: '5'
27
+ - !ruby/object:Gem::Dependency
28
+ name: mysql2
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 0.4.0
34
+ - - "<"
35
+ - !ruby/object:Gem::Version
36
+ version: 0.6.0
37
+ type: :runtime
38
+ prerelease: false
39
+ version_requirements: !ruby/object:Gem::Requirement
40
+ requirements:
41
+ - - ">="
42
+ - !ruby/object:Gem::Version
43
+ version: 0.4.0
44
+ - - "<"
45
+ - !ruby/object:Gem::Version
46
+ version: 0.6.0
27
47
  - !ruby/object:Gem::Dependency
28
48
  name: bump
29
49
  requirement: !ruby/object:Gem::Requirement
@@ -53,19 +73,19 @@ dependencies:
53
73
  - !ruby/object:Gem::Version
54
74
  version: '2'
55
75
  - !ruby/object:Gem::Dependency
56
- name: minitest
76
+ name: byebug
57
77
  requirement: !ruby/object:Gem::Requirement
58
78
  requirements:
59
79
  - - "~>"
60
80
  - !ruby/object:Gem::Version
61
- version: '5.14'
81
+ version: '11.1'
62
82
  type: :development
63
83
  prerelease: false
64
84
  version_requirements: !ruby/object:Gem::Requirement
65
85
  requirements:
66
86
  - - "~>"
67
87
  - !ruby/object:Gem::Version
68
- version: '5.14'
88
+ version: '11.1'
69
89
  - !ruby/object:Gem::Dependency
70
90
  name: rake
71
91
  requirement: !ruby/object:Gem::Requirement
@@ -80,6 +100,20 @@ dependencies:
80
100
  - - "~>"
81
101
  - !ruby/object:Gem::Version
82
102
  version: '13.0'
103
+ - !ruby/object:Gem::Dependency
104
+ name: rspec
105
+ requirement: !ruby/object:Gem::Requirement
106
+ requirements:
107
+ - - "~>"
108
+ - !ruby/object:Gem::Version
109
+ version: '3'
110
+ type: :development
111
+ prerelease: false
112
+ version_requirements: !ruby/object:Gem::Requirement
113
+ requirements:
114
+ - - "~>"
115
+ - !ruby/object:Gem::Version
116
+ version: '3'
83
117
  - !ruby/object:Gem::Dependency
84
118
  name: rubocop
85
119
  requirement: !ruby/object:Gem::Requirement
@@ -104,10 +138,12 @@ files:
104
138
  - ".github/ISSUE_TEMPLATE/bug_report.md"
105
139
  - ".github/ISSUE_TEMPLATE/feature_request.md"
106
140
  - ".github/PULL_REQUEST_TEMPLATE.md"
141
+ - ".github/workflows/ruby.yml"
107
142
  - ".gitignore"
108
143
  - ".rubocop.yml"
109
144
  - ".travis.yml"
110
145
  - ".vscode/settings.json"
146
+ - CHANGELOG.md
111
147
  - CODEOWNERS
112
148
  - CODE_OF_CONDUCT.md
113
149
  - CONTRIBUTORS.md
@@ -151,7 +187,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
151
187
  - !ruby/object:Gem::Version
152
188
  version: '0'
153
189
  requirements: []
154
- rubygems_version: 3.1.2
190
+ rubygems_version: 3.1.4
155
191
  signing_key:
156
192
  specification_version: 4
157
193
  summary: Run ActiveRecord migrations through gh-ost