percona-migrations-livelink 0.0.3

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f24c52b34bbdb28bc9742668ac22d300454892af
4
+ data.tar.gz: 211a367ae70a694799fa68237116a41ee17f605a
5
+ SHA512:
6
+ metadata.gz: ad9ff0bb6c541981e13a045b486106e5c46c5d0d4781145f43b8d848bd4bef242f11d2d4e1ce20f0fa7f6717a1622ca9cc157fccdef4e133149f876e7ea24a38
7
+ data.tar.gz: a45b50a1fbe6e3cb7ff2e36629c456efb1b213d8ad75b8fa6c4a05f48480a31ff47385a26b9fd131afce84e028cbf6ca6d0a69aba77d2c9b5958c10e7fae6c55
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,8 @@
1
+ sudo: false
2
+ language: ruby
3
+ cache: bundler
4
+ rvm:
5
+ - 1.9.3
6
+ - 2.0
7
+ - 2.1
8
+ - 2.2
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source 'https://rubygems.org'
2
+
3
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 Sergey Varaksin
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,57 @@
1
+ # Percona Migrations
2
+
3
+ [![Build Status](https://travis-ci.org/svarks/percona-migrations.svg?branch=master)](https://travis-ci.org/svarks/percona-migrations)
4
+
5
+ Allows to use `pt-online-schema-change` for table changes in MySQL.
6
+
7
+ ## Installation
8
+
9
+ Add this line to your application's Gemfile:
10
+
11
+ ```ruby
12
+ gem 'percona-migrations'
13
+ ```
14
+
15
+ Create `config/initializers/percona_migrations.rb` with:
16
+
17
+ ```ruby
18
+ PerconaMigrations.database_config = ActiveRecord::Base.configurations[Rails.env]
19
+ PerconaMigrations.allow_sql = !Rails.env.production?
20
+
21
+ ActiveRecord::Migration.send :include, PerconaMigrations::HelperMethods
22
+ ```
23
+
24
+ ## Usage
25
+
26
+ ```ruby
27
+ class AddAddressToUsers < ActiveRecord::Migration
28
+ def up
29
+ commands = columns.map { |name, type| "ADD COLUMN #{name} #{type}" }
30
+
31
+ percona_alter_table :users, commands
32
+ end
33
+
34
+ def down
35
+ commands = columns.map { |name, _| "DROP COLUMN #{name}" }
36
+
37
+ percona_alter_table :users, commands
38
+ end
39
+
40
+ private
41
+
42
+ def columns
43
+ { street: 'STRING(255)' },
44
+ { city: 'STRING(255)' },
45
+ { state: 'STRING(2)' },
46
+ { zip: 'STRING(10)' }
47
+ end
48
+ end
49
+ ```
50
+
51
+ ## Contributing
52
+
53
+ 1. Fork it ( https://github.com/[my-github-username]/percona-migrations/fork )
54
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
55
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
56
+ 4. Push to the branch (`git push origin my-new-feature`)
57
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,9 @@
1
+ require "bundler/gem_tasks"
2
+
3
+ begin
4
+ require 'rspec/core/rake_task'
5
+ RSpec::Core::RakeTask.new(:spec)
6
+
7
+ task default: :spec
8
+ rescue LoadError
9
+ end
@@ -0,0 +1 @@
1
+ require 'percona_migrations'
@@ -0,0 +1,94 @@
1
+ require 'percona_migrations/version'
2
+ require 'percona_migrations/runners'
3
+ require 'percona_migrations/helper_methods'
4
+
5
+ require 'active_record'
6
+ require 'logger'
7
+ require 'shellwords'
8
+
9
+ module PerconaMigrations
10
+ extend self
11
+
12
+ @allow_sql = true
13
+
14
+ @config = Struct.new('PerconaConfig',
15
+ :charset,
16
+ :check_interval,
17
+ :check_alter,
18
+ :check_plan,
19
+ :check_replication_filters,
20
+ :check_slave_lag,
21
+ :chunk_index,
22
+ :chunk_index_columns,
23
+ :chunk_size,
24
+ :chunk_size_limit,
25
+ :chunk_time,
26
+ :critical_load,
27
+ :default_engine,
28
+ :defaults_file,
29
+ :drop_new_table,
30
+ :drop_old_table,
31
+ :lock_wait_timeout,
32
+ :max_lag,
33
+ :max_load,
34
+ :pid,
35
+ :print,
36
+ :progress,
37
+ :quiet,
38
+ :recurse,
39
+ :recursion_method,
40
+ :retries,
41
+ :set_vars,
42
+ :statistics,
43
+ :swap_tables
44
+ ).new
45
+
46
+ attr_writer :database_config, :allow_sql, :logger
47
+
48
+ def config
49
+ if block_given?
50
+ yield @config
51
+ else
52
+ @config
53
+ end
54
+ end
55
+
56
+ def pt_schema_tool_args
57
+
58
+ @config.members.map do |key|
59
+
60
+ arg = key.to_s.gsub(/_/,'-')
61
+ val = @config[key]
62
+
63
+ case val
64
+ when nil
65
+ nil
66
+ when true
67
+ "--#{arg}"
68
+ when false
69
+ "--no-#{arg}"
70
+ else
71
+ "--#{arg} #{Shellwords.escape(val)}"
72
+ end
73
+ end.compact.join(' ')
74
+ end
75
+
76
+ def database_config
77
+ @database_config || raise('PerconaMigrations.database_config is not set.')
78
+ end
79
+
80
+ def allow_sql?
81
+ !!@allow_sql
82
+ end
83
+
84
+ def logger
85
+ unless defined? @logger
86
+ @logger = Logger.new($stdout)
87
+ @logger.formatter = proc do |severity, datetime, progname, msg|
88
+ "[percona-migrations] #{msg}\n"
89
+ end
90
+ end
91
+
92
+ @logger
93
+ end
94
+ end
@@ -0,0 +1,7 @@
1
+ module PerconaMigrations
2
+ module HelperMethods
3
+ def percona_alter_table(*args)
4
+ PerconaMigrations::Runners.run(*args)
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,43 @@
1
+ require 'percona_migrations/runners/base'
2
+ require 'percona_migrations/runners/percona'
3
+ require 'percona_migrations/runners/sql'
4
+
5
+ module PerconaMigrations
6
+ module Runners
7
+ def self.run(*args)
8
+ runner_class = find_runner
9
+
10
+ unless runner_class
11
+ raise "No available migration runners found."
12
+ end
13
+
14
+ runner = runner_class.new(*args)
15
+ runner.run
16
+ end
17
+
18
+ def self.find_runner
19
+ if Runners::Percona.available?
20
+ Runners::Percona
21
+ else
22
+ log_percona_install_command
23
+ Runners::Sql if PerconaMigrations.allow_sql?
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def self.log_percona_install_command
30
+ logger = PerconaMigrations.logger
31
+ return unless logger
32
+
33
+ logger.warn ""
34
+ logger.warn "*" * 80
35
+ logger.warn ""
36
+ logger.warn "`#{Runners::Percona::COMMAND}` command not found, please install percona tools:"
37
+ logger.warn "$ brew install percona-toolkit"
38
+ logger.warn ""
39
+ logger.warn "*" * 80
40
+ logger.warn ""
41
+ end
42
+ end
43
+ end
@@ -0,0 +1,26 @@
1
+ module PerconaMigrations
2
+ module Runners
3
+ class Base
4
+ def self.available?
5
+ true
6
+ end
7
+
8
+ def initialize(table_name, commands)
9
+ @table_name = table_name
10
+ @commands = commands
11
+ end
12
+
13
+ def run
14
+ raise NotImplementerError
15
+ end
16
+
17
+ def log(msg)
18
+ logger.info(msg) if logger
19
+ end
20
+
21
+ def logger
22
+ PerconaMigrations.logger
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,51 @@
1
+ module PerconaMigrations
2
+ module Runners
3
+ class Percona < Base
4
+ COMMAND = 'pt-online-schema-change'
5
+
6
+ def self.available?
7
+ !percona_command.empty?
8
+ end
9
+
10
+ def self.percona_command
11
+ @percona_command ||= %x(which #{COMMAND}).chop
12
+ end
13
+
14
+ def run
15
+ options = [
16
+ PerconaMigrations.pt_schema_tool_args,
17
+ "--alter '#{@commands.join(', ')}'",
18
+ "-h #{database_config['host']}",
19
+ "-P #{database_config['port']}",
20
+ "-u #{database_config['username']}",
21
+ "D=#{database_config['database']},t=#{@table_name}"
22
+ ]
23
+
24
+ password = database_config['password']
25
+ if password && !password.empty?
26
+ options << "-p $PASSWORD"
27
+ end
28
+
29
+ run_command(options.reject(&:empty?).join(' '), { 'PASSWORD' => password })
30
+ end
31
+
32
+ private
33
+
34
+ def database_config
35
+ PerconaMigrations.database_config
36
+ end
37
+
38
+ def run_command(options, env_vars = {})
39
+ %w(dry-run execute).each do |mode|
40
+ cmd = "#{self.class.percona_command} #{options} --#{mode}"
41
+
42
+ log "Running percona command: \"#{cmd}\""
43
+
44
+ unless system(env_vars, cmd)
45
+ raise "Percona command failed: #{$?}"
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -0,0 +1,25 @@
1
+ module PerconaMigrations
2
+ module Runners
3
+ class Sql < Base
4
+ def run
5
+ @commands.each do |command|
6
+ run_command command
7
+ end
8
+ end
9
+
10
+ private
11
+
12
+ def run_command(command)
13
+ sql = "ALTER TABLE #{@table_name} #{command}"
14
+
15
+ log "Running SQL: \"#{sql}\""
16
+
17
+ conn.execute sql
18
+ end
19
+
20
+ def conn
21
+ @conn ||= ActiveRecord::Base.connection
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,3 @@
1
+ module PerconaMigrations
2
+ VERSION = "0.0.3"
3
+ end
@@ -0,0 +1,25 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'percona_migrations/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "percona-migrations-livelink"
8
+ spec.version = PerconaMigrations::VERSION
9
+ spec.authors = ["Sergey Varaksin", "Geoff Youngs"]
10
+ spec.email = ["varaksin86@gmail.com", "git@intersect-uk.co.uk"]
11
+ spec.summary = %q{Allows to use percona in rails migrations.}
12
+ spec.homepage = "https://github.com/svarks/percona-migrations"
13
+ spec.license = "MIT"
14
+
15
+ spec.files = `git ls-files -z`.split("\x0")
16
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
17
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
18
+ spec.require_paths = ["lib"]
19
+
20
+ spec.add_dependency 'activerecord', '>= 3.0'
21
+
22
+ spec.add_development_dependency 'rake'
23
+ spec.add_development_dependency 'rspec', '~> 3.2.0'
24
+ spec.add_development_dependency 'pry'
25
+ end
@@ -0,0 +1,18 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PerconaMigrations::HelperMethods do
4
+ subject do
5
+ klass = Class.new do
6
+ include PerconaMigrations::HelperMethods
7
+ end
8
+ klass.new
9
+ end
10
+
11
+ describe '#alter_table' do
12
+ it 'calls a method on PerconaMigrations' do
13
+ expect(PerconaMigrations::Runners).to receive(:run).with('users', ['add column name string(255)'])
14
+
15
+ subject.percona_alter_table('users', ['add column name string(255)'])
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,63 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PerconaMigrations::Runners do
4
+ describe '::run' do
5
+ before do
6
+ expect(subject).to receive(:find_runner).and_return(runner_class)
7
+ end
8
+
9
+ context 'when runner is found' do
10
+ let(:runner_class) { PerconaMigrations::Runners::Percona }
11
+ let(:arguments) { [:arg1, :arg2, :arg3] }
12
+
13
+ it 'runs the runner' do
14
+ runner = double()
15
+ expect(runner_class).to receive(:new).with(*arguments).and_return(runner)
16
+ expect(runner).to receive(:run)
17
+
18
+ subject.run(*arguments)
19
+ end
20
+ end
21
+
22
+ context 'when runner is not found' do
23
+ let(:runner_class) { nil }
24
+
25
+ it 'throws an exception' do
26
+ expect { subject.run }.to raise_exception
27
+ end
28
+ end
29
+ end
30
+
31
+ describe '::find_runner' do
32
+ before do
33
+ expect(PerconaMigrations::Runners::Percona).to receive(:available?).and_return(percona_available)
34
+ end
35
+
36
+ context 'when percona is available' do
37
+ let(:percona_available) { true }
38
+
39
+ it 'returns percona runner if enabled' do
40
+ expect(subject.find_runner).to eq(PerconaMigrations::Runners::Percona)
41
+ end
42
+ end
43
+
44
+ context 'when percona is not available' do
45
+ let(:percona_available) { false }
46
+
47
+ context 'and sql is enabled' do
48
+ it 'returns sql runner' do
49
+ expect(subject.find_runner).to eq(PerconaMigrations::Runners::Sql)
50
+ end
51
+ end
52
+
53
+ context 'and sql is disabled' do
54
+ before do
55
+ allow(PerconaMigrations).to receive(:allow_sql?).and_return(false)
56
+ end
57
+ it 'returns nil' do
58
+ expect(subject.find_runner).to eq(nil)
59
+ end
60
+ end
61
+ end
62
+ end
63
+ end
@@ -0,0 +1,72 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PerconaMigrations::Runners::Percona do
4
+ subject { described_class }
5
+
6
+ let(:percona_command) { '/bin/pt-online-schema-change' }
7
+
8
+ describe '::percona_command' do
9
+ it 'is looking for pt-online-schema-change in $PATH' do
10
+ expect(subject).to receive(:`).with('which pt-online-schema-change').and_return(percona_command + "\n")
11
+ expect(subject.percona_command).to eq(percona_command)
12
+ end
13
+ end
14
+
15
+ describe '::available?' do
16
+ it 'returns true when percona_command is present' do
17
+ expect(subject).to receive(:percona_command).and_return('/bin/percona')
18
+ expect(subject.available?).to eq(true)
19
+ end
20
+ end
21
+
22
+ describe '#run' do
23
+ let(:db_config) do
24
+ {
25
+ 'host' => 'localhost',
26
+ 'port' => '3306',
27
+ 'username' => 'root',
28
+ 'password' => 'test',
29
+ 'database' => 'test-db'
30
+ }
31
+ end
32
+ let(:runner) { described_class.new('users', ['add column name string(255)']) }
33
+ let(:arguments) do
34
+ [
35
+ "--alter 'add column name string(255)'",
36
+ "-h localhost",
37
+ "-P 3306",
38
+ "-u root",
39
+ "D=test-db,t=users",
40
+ "-p $PASSWORD"
41
+ ]
42
+ end
43
+
44
+ before do
45
+ allow(PerconaMigrations).to receive(:database_config).and_return(db_config)
46
+ allow(PerconaMigrations).to receive(:pt_schema_tool_args).and_return('--foo')
47
+ allow(subject).to receive(:percona_command).and_return(percona_command)
48
+ end
49
+
50
+ it 'runs percona command 2 times (dry-run and execute)' do
51
+ command = "#{percona_command} --foo #{arguments.join(' ')}"
52
+
53
+ expect(runner).to receive(:system).
54
+ with({ 'PASSWORD' => 'test' }, "#{command} --dry-run").
55
+ and_return(true)
56
+
57
+ expect(runner).to receive(:system).
58
+ with({ 'PASSWORD' => 'test' }, "#{command} --execute").
59
+ and_return(true)
60
+
61
+ runner.run
62
+ end
63
+
64
+ it 'throws an exception if dry-run fails' do
65
+ expect(runner).to receive(:system).
66
+ with({ 'PASSWORD' => 'test' }, "#{percona_command} --foo #{arguments.join(' ')} --dry-run").
67
+ and_return(false)
68
+
69
+ expect { runner.run }.to raise_exception
70
+ end
71
+ end
72
+ end
@@ -0,0 +1,24 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PerconaMigrations::Runners::Sql do
4
+ let(:conn) { double() }
5
+ let(:runner) do
6
+ described_class.new('users', [
7
+ 'add column first_name string(255)',
8
+ 'add column last_name string(255)',
9
+ ])
10
+ end
11
+
12
+ before do
13
+ allow(ActiveRecord::Base).to receive(:connection).and_return(conn)
14
+ end
15
+
16
+ describe '#run' do
17
+ it 'runs sql commands throuth ActiveRecord' do
18
+ expect(conn).to receive(:execute).with('ALTER TABLE users add column first_name string(255)')
19
+ expect(conn).to receive(:execute).with('ALTER TABLE users add column last_name string(255)')
20
+
21
+ runner.run
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,73 @@
1
+ require 'spec_helper'
2
+
3
+ RSpec.describe PerconaMigrations do
4
+ describe '::allow_sql?' do
5
+ it 'is true by default' do
6
+ expect(subject.allow_sql?).to eq(true)
7
+ end
8
+
9
+ it 'can be set to false' do
10
+ subject.allow_sql = false
11
+
12
+ expect(subject.allow_sql?).to eq(false)
13
+
14
+ subject.allow_sql = true
15
+ end
16
+ end
17
+
18
+ describe '::database_config' do
19
+ it 'throws an exception if not set' do
20
+ expect { subject.database_config }.to raise_exception
21
+ end
22
+
23
+ it 'returns config' do
24
+ config = { 'username' => 'test' }
25
+ subject.database_config = config
26
+
27
+ expect(subject.database_config).to eq(config)
28
+
29
+ subject.database_config = nil
30
+ end
31
+ end
32
+
33
+ describe '::config' do
34
+ before do
35
+ subject.instance_eval { @config = @config.class.new }
36
+ end
37
+ it 'yields a block' do
38
+ expect { |b| subject.config(&b) }.to yield_control.once
39
+ end
40
+ it 'allows config to be set' do
41
+ subject.config { |c| c.max_load = 'Threads_running=25' }
42
+ expect(subject.config.max_load).to eq('Threads_running=25')
43
+ end
44
+ it 'ignores unset values' do
45
+ expect(subject.config.retries).to be(nil)
46
+ end
47
+ it 'returns no arguments by default' do
48
+ expect(subject.pt_schema_tool_args).to be_empty
49
+ end
50
+
51
+ context 'with boolean config' do
52
+ before do
53
+ subject.config do |c|
54
+ c.statistics = true
55
+ c.drop_old_table = false
56
+ end
57
+ end
58
+ it 'returns arguments' do
59
+ expect(subject.pt_schema_tool_args).to eq('--no-drop-old-table --statistics')
60
+ end
61
+ end
62
+ context 'with config' do
63
+ before do
64
+ subject.config do |c|
65
+ c.max_load = 'Threads_running=25'
66
+ end
67
+ end
68
+ it 'returns arguments' do
69
+ expect(subject.pt_schema_tool_args).to eq('--max-load Threads_running\\=25')
70
+ end
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,25 @@
1
+ require 'rubygems'
2
+ require 'bundler'
3
+
4
+ Bundler.require(:default, :development)
5
+
6
+ $LOAD_PATH.unshift(File.expand_path('../lib', __FILE__))
7
+
8
+ require 'percona_migrations'
9
+
10
+ PerconaMigrations.logger = nil
11
+
12
+ RSpec.configure do |config|
13
+ config.expect_with :rspec do |expectations|
14
+ expectations.include_chain_clauses_in_custom_matcher_descriptions = true
15
+ end
16
+
17
+ config.mock_with :rspec do |mocks|
18
+ mocks.verify_partial_doubles = true
19
+ end
20
+
21
+ config.filter_run :focus
22
+ config.run_all_when_everything_filtered = true
23
+ config.disable_monkey_patching!
24
+ config.order = :random
25
+ end
metadata ADDED
@@ -0,0 +1,130 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: percona-migrations-livelink
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.3
5
+ platform: ruby
6
+ authors:
7
+ - Sergey Varaksin
8
+ - Geoff Youngs
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2016-03-17 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: activerecord
16
+ requirement: !ruby/object:Gem::Requirement
17
+ requirements:
18
+ - - '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '3.0'
21
+ type: :runtime
22
+ prerelease: false
23
+ version_requirements: !ruby/object:Gem::Requirement
24
+ requirements:
25
+ - - '>='
26
+ - !ruby/object:Gem::Version
27
+ version: '3.0'
28
+ - !ruby/object:Gem::Dependency
29
+ name: rake
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - '>='
33
+ - !ruby/object:Gem::Version
34
+ version: '0'
35
+ type: :development
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - '>='
40
+ - !ruby/object:Gem::Version
41
+ version: '0'
42
+ - !ruby/object:Gem::Dependency
43
+ name: rspec
44
+ requirement: !ruby/object:Gem::Requirement
45
+ requirements:
46
+ - - ~>
47
+ - !ruby/object:Gem::Version
48
+ version: 3.2.0
49
+ type: :development
50
+ prerelease: false
51
+ version_requirements: !ruby/object:Gem::Requirement
52
+ requirements:
53
+ - - ~>
54
+ - !ruby/object:Gem::Version
55
+ version: 3.2.0
56
+ - !ruby/object:Gem::Dependency
57
+ name: pry
58
+ requirement: !ruby/object:Gem::Requirement
59
+ requirements:
60
+ - - '>='
61
+ - !ruby/object:Gem::Version
62
+ version: '0'
63
+ type: :development
64
+ prerelease: false
65
+ version_requirements: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ description:
71
+ email:
72
+ - varaksin86@gmail.com
73
+ - git@intersect-uk.co.uk
74
+ executables: []
75
+ extensions: []
76
+ extra_rdoc_files: []
77
+ files:
78
+ - .gitignore
79
+ - .rspec
80
+ - .travis.yml
81
+ - Gemfile
82
+ - LICENSE.txt
83
+ - README.md
84
+ - Rakefile
85
+ - lib/percona-migrations.rb
86
+ - lib/percona_migrations.rb
87
+ - lib/percona_migrations/helper_methods.rb
88
+ - lib/percona_migrations/runners.rb
89
+ - lib/percona_migrations/runners/base.rb
90
+ - lib/percona_migrations/runners/percona.rb
91
+ - lib/percona_migrations/runners/sql.rb
92
+ - lib/percona_migrations/version.rb
93
+ - percona-migrations.gemspec
94
+ - spec/lib/percona_migrations/helper_methods_spec.rb
95
+ - spec/lib/percona_migrations/runner_spec.rb
96
+ - spec/lib/percona_migrations/runners/percona_spec.rb
97
+ - spec/lib/percona_migrations/runners/sql_spec.rb
98
+ - spec/lib/percona_migrations_spec.rb
99
+ - spec/spec_helper.rb
100
+ homepage: https://github.com/svarks/percona-migrations
101
+ licenses:
102
+ - MIT
103
+ metadata: {}
104
+ post_install_message:
105
+ rdoc_options: []
106
+ require_paths:
107
+ - lib
108
+ required_ruby_version: !ruby/object:Gem::Requirement
109
+ requirements:
110
+ - - '>='
111
+ - !ruby/object:Gem::Version
112
+ version: '0'
113
+ required_rubygems_version: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - '>='
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ requirements: []
119
+ rubyforge_project:
120
+ rubygems_version: 2.0.14
121
+ signing_key:
122
+ specification_version: 4
123
+ summary: Allows to use percona in rails migrations.
124
+ test_files:
125
+ - spec/lib/percona_migrations/helper_methods_spec.rb
126
+ - spec/lib/percona_migrations/runner_spec.rb
127
+ - spec/lib/percona_migrations/runners/percona_spec.rb
128
+ - spec/lib/percona_migrations/runners/sql_spec.rb
129
+ - spec/lib/percona_migrations_spec.rb
130
+ - spec/spec_helper.rb