redshift_simple_migrator 0.1.0

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: 01923b9e53ca268191c749379cc7e8ba0f3ba2db
4
+ data.tar.gz: 355dc3153e7148fdee4d3e5858ccaae1ab00e131
5
+ SHA512:
6
+ metadata.gz: 976fa156dd49aa6214ddaa7ee32b27406a7dc5b8699c8c86da9eab78413c2342cf3705acb3317e81a0d84c6c3e6720c0b2cdee96ae089879ac6bbc2f72339bb1
7
+ data.tar.gz: dba4b32033ef4f92d6a0f58e1eb3ca18e87b5eb78816842350d89da2ed0dea3e20bd4cae35ad2fe349e0c201ebc67398543b4a8f9ae6834a3b324677cebc5b2d
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+
11
+ /database.yml
12
+ /migrate
data/.rspec ADDED
@@ -0,0 +1,2 @@
1
+ --color
2
+ --require spec_helper
data/.travis.yml ADDED
@@ -0,0 +1,11 @@
1
+ language: ruby
2
+ addons:
3
+ postgresql: "9.4"
4
+ rvm:
5
+ - 2.2.1
6
+ before_install: gem install bundler -v 1.10.3
7
+ before_script:
8
+ - psql -c 'create database travis_ci_test;' -U postgres
9
+ - cp spec/config.travis.yml spec/config.yml
10
+ env:
11
+ - REDSHIFT_ENV=test
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in redshift_simple_migrator.gemspec
4
+ gemspec
data/README.md ADDED
@@ -0,0 +1,125 @@
1
+ # RedshiftSimpleMigrator
2
+ [![Build Status](https://travis-ci.org/joker1007/redshift_simple_migrator.svg?branch=master)](https://travis-ci.org/joker1007/redshift_simple_migrator)
3
+
4
+ this gem is super simple migrator for AWS Redshift (and PostgreSQL).
5
+
6
+ ## Installation
7
+
8
+ Add this line to your application's Gemfile:
9
+
10
+ ```ruby
11
+ gem 'redshift_simple_migrator'
12
+ ```
13
+
14
+ And then execute:
15
+
16
+ $ bundle
17
+
18
+ Or install it yourself as:
19
+
20
+ $ gem install redshift_simple_migrator
21
+
22
+ ## Usage
23
+
24
+ ### Define migration
25
+
26
+ Migration definition is like ActiveRecord::Migration,
27
+ but this gem supports only `execute` method.
28
+ It has no other migration dsl.
29
+
30
+ #### Migration File
31
+
32
+ ```ruby
33
+ class CreateKpiMiddleTable < RedshiftSimpleMigrator::Migration
34
+ def up
35
+ execute <<-SQL
36
+ CREATE TABLE company_users DISTKEY (id) AS
37
+ SELECT
38
+ a.id,
39
+ a.company_id
40
+ FROM
41
+ users a
42
+ INNER JOIN companies b ON a.company_id = b.id;
43
+ SQL
44
+ end
45
+
46
+ def down
47
+ execute <<-SQL
48
+ DROP TABLE company_users;
49
+ SQL
50
+ end
51
+ end
52
+ ```
53
+
54
+ #### File name convention
55
+
56
+ File name convention is same with ActiveRecord::Migration.
57
+
58
+ ```
59
+ % ls redshift/migrate/
60
+ 001_create_kpi_middle_table.rb
61
+ ```
62
+
63
+ ### Command
64
+
65
+ ```sh
66
+ # Show current migration version
67
+ $ redshift_simple_migrator version -c <config.yml>
68
+
69
+ # List execute migrations
70
+ $ redshift_simple_migrator list <TARGET_VERSION> -c <config.yml> -p <migrations_path>
71
+
72
+ # Execute migration
73
+ $ redshift_simple_migrator migrate <TARGET_VERSION> -c <config.yml> -p <migrations_path>
74
+ ```
75
+
76
+ If you use with rails, config is autoloaded from `config/redshift_simple_migrator.yml`, and define Rake tasks.
77
+
78
+ ### Rake tasks
79
+
80
+ ```
81
+ rake redshift:migrate # Migrate the AWS Redshift (options: VERSION=x)
82
+ rake redshift:migrate:status # Display status of AWS Redshift migration (options: VERSION=x)
83
+ ```
84
+
85
+ ### config.yml example
86
+
87
+ ```yml
88
+ default: &default
89
+ host: hogehoge.redshift.amazonaws.com
90
+ port: 5439
91
+ dbname: sample
92
+ user: admin
93
+ password: password
94
+ connect_timeout: 30000
95
+ schema_migrations_table_name: redshift_schema_migrations
96
+
97
+ development:
98
+ <<: *default
99
+ ```
100
+
101
+ If `schema_migrations_table_name` table doesn't exist, this gem creates the table automatically.
102
+
103
+ `schema_migrations` table schema is following.
104
+
105
+ ```sql
106
+ CREATE TABLE <schema_migrations_table_name> (version text NOT NULL)
107
+ ```
108
+
109
+ ## TODO
110
+ - Refine `migrations_path` config.
111
+ - Write test codes.
112
+
113
+ If you want to change target environment, set `REDSHIFT_ENV` environment variable.
114
+ For example, `REDSHIFT_ENV=prouduction redshift_simple_migrator migrate -c config.yml -p db/migrate`
115
+
116
+ ## Development
117
+
118
+ After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake false` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment. Run `bundle exec redshift_simple_migrator` to use the gem in this directory, ignoring other installed copies of this gem.
119
+
120
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
121
+
122
+ ## Contributing
123
+
124
+ Bug reports and pull requests are welcome on GitHub at https://github.com/joker1007/redshift_simple_migrator.
125
+
data/Rakefile ADDED
@@ -0,0 +1,6 @@
1
+ require "bundler/gem_tasks"
2
+ require "rspec/core/rake_task"
3
+
4
+ RSpec::Core::RakeTask.new(:spec)
5
+
6
+ task :default => :spec
data/bin/console ADDED
@@ -0,0 +1,10 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "redshift_simple_migrator"
5
+
6
+ # You can add fixtures and/or initialization code here to make experimenting
7
+ # with your gem easier. You can also use a different console, if you like.
8
+
9
+ require "pry"
10
+ Pry.start
data/bin/setup ADDED
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+ set -euo pipefail
3
+ IFS=$'\n\t'
4
+
5
+ bundle install
6
+
7
+ # Do any other automated setup that you need to do here
@@ -0,0 +1,6 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "redshift_simple_migrator"
5
+
6
+ RedshiftSimpleMigrator::CLI.start(ARGV)
@@ -0,0 +1,61 @@
1
+ require 'thor'
2
+
3
+ module RedshiftSimpleMigrator
4
+ class CLI < Thor
5
+ desc "version", "Show migration version"
6
+ option :config, required: true, type: :string, aliases: :c
7
+ def version
8
+ with_migrator do |m|
9
+ current_version = m.current_version
10
+ puts "Current version is #{current_version}"
11
+ end
12
+ end
13
+
14
+ desc "list [VERSION]", "List migration definitions"
15
+ option :config, required: true, type: :string, aliases: :c
16
+ option :path, required: true, type: :string, aliases: :p
17
+ def list(version = nil)
18
+ with_migrator do |m|
19
+ direction, migrations = m.run_migrations(version)
20
+ migrations.each do |migration|
21
+ puts "#{direction} #{migration.version} #{migration.class.to_s}"
22
+ end
23
+ end
24
+ end
25
+
26
+ desc "migrate [VERSION]", "run migration"
27
+ option :config, required: true, type: :string, aliases: :c
28
+ option :path, required: true, type: :string, aliases: :p
29
+ def migrate(version = nil)
30
+ with_migrator do |m|
31
+ m.run(version)
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def load_config
38
+ raise "Config file is not found" unless File.exist?(options[:config])
39
+ RedshiftSimpleMigrator.config.load(options[:config])
40
+ end
41
+
42
+ def set_migrations_path
43
+ raise "Migrations path is not found" unless File.exist?(options[:path])
44
+ RedshiftSimpleMigrator.config.migrations_path = options[:path]
45
+ end
46
+
47
+ def migrator
48
+ return @migrator if @migrator
49
+
50
+ load_config
51
+ set_migrations_path
52
+ @migrator = Migrator.new
53
+ end
54
+
55
+ def with_migrator
56
+ yield migrator
57
+ ensure
58
+ migrator.close if migrator
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,36 @@
1
+ require 'singleton'
2
+ require 'active_support/configurable'
3
+
4
+ module RedshiftSimpleMigrator
5
+ class Configuration
6
+ include Singleton
7
+ include ActiveSupport::Configurable
8
+
9
+ config_accessor :schema_migrations_table_name do
10
+ "schema_migrations"
11
+ end
12
+
13
+ config_accessor :migrations_path
14
+
15
+ config_accessor :host, :port, :dbname, :user, :password, :connect_timeout
16
+
17
+ def load(config_file, default_env = "development")
18
+ env = ENV["REDSHIFT_ENV"] || ENV["RAILS_ENV"] || ENV["RACK_ENV"] || default_env
19
+ config = YAML.load_file(config_file)[env]
20
+ config.each do |k, v|
21
+ send("#{k}=", v)
22
+ end
23
+ end
24
+
25
+ def database_config
26
+ {
27
+ host: host,
28
+ port: port,
29
+ dbname: dbname,
30
+ user: user,
31
+ password: password,
32
+ connect_timeout: connect_timeout
33
+ }
34
+ end
35
+ end
36
+ end
@@ -0,0 +1,34 @@
1
+ require 'pg'
2
+ require 'yaml'
3
+ require 'active_support/core_ext/module'
4
+
5
+ module RedshiftSimpleMigrator
6
+ class Connection
7
+ attr_reader :connection
8
+
9
+ delegate \
10
+ :close,
11
+ :exec,
12
+ :async_exec,
13
+ :exec_params,
14
+ :escape,
15
+ :escape_string,
16
+ :escape_identifier,
17
+ :escape_literal,
18
+ to: :connection
19
+
20
+ def initialize
21
+ @connection = PG.connect(RedshiftSimpleMigrator.config.database_config)
22
+ @connection.type_map_for_results = PG::BasicTypeMapForResults.new(@connection)
23
+ end
24
+
25
+ def with_transaction(&block)
26
+ connection.exec("BEGIN")
27
+ block.call(self)
28
+ connection.exec("COMMIT")
29
+ rescue => e
30
+ connection.exec("ROLLBACK") if connection
31
+ raise e
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,27 @@
1
+ module RedshiftSimpleMigrator
2
+ class Migration
3
+ attr_reader :connection, :version
4
+
5
+ delegate \
6
+ :exec,
7
+ :escape,
8
+ :escape_string,
9
+ :escape_identifier,
10
+ :escape_literal,
11
+ to: :connection
12
+ alias :execute :exec
13
+
14
+ def initialize(connection, version)
15
+ @connection = connection
16
+ @version = version
17
+ end
18
+
19
+ def up
20
+ raise NotImplementedError
21
+ end
22
+
23
+ def down
24
+ raise NotImplementedError
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,114 @@
1
+ require 'active_support/inflector'
2
+
3
+ module RedshiftSimpleMigrator
4
+ class Migrator
5
+ attr_reader :connection, :migrations_path, :schema_migrations_table_name
6
+
7
+ delegate :close, to: :connection
8
+
9
+ MIGRATION_FILE_PATTERN = /^(?<version>\d+)_(?<migration_name>.*)\.rb$/.freeze
10
+
11
+ def initialize
12
+ config = RedshiftSimpleMigrator.config
13
+ @connection = Connection.new
14
+ @migrations_path = config.migrations_path
15
+ @schema_migrations_table_name =
16
+ @connection.escape_identifier(config.schema_migrations_table_name)
17
+
18
+ @current_version_is_loaded = nil
19
+ @current_migrations = nil
20
+ end
21
+
22
+ def current_migrations
23
+ return @current_migrations if @current_migrations
24
+
25
+ migrations = Dir.entries(migrations_path).map do |name|
26
+ if match = MIGRATION_FILE_PATTERN.match(name)
27
+ load File.expand_path(File.join(migrations_path, name))
28
+ migration_class = match[:migration_name].camelcase.constantize
29
+ migration_class.new(connection, match[:version].to_i)
30
+ end
31
+ end
32
+ @current_migrations = migrations.compact
33
+ end
34
+
35
+ def run_migrations(target_version = nil)
36
+ direction = detect_direction(target_version)
37
+ if direction == :up
38
+ migrations = current_migrations.select do |m|
39
+ include_target = target_version ? target_version.to_i >= m.version : true
40
+ include_target && m.version > current_version.to_i
41
+ end
42
+ return direction, migrations.sort_by(&:version)
43
+ else
44
+ migrations = current_migrations.select do |m|
45
+ target_version.to_i < m.version &&
46
+ m.version <= current_version.to_i
47
+ end
48
+ return direction, migrations.sort_by {|m| -(m.version) }
49
+ end
50
+ end
51
+
52
+ def current_version
53
+ return @current_version if @current_version_is_loaded
54
+
55
+ connection.async_exec(get_version_query) do |result|
56
+ versions = result.map do |row|
57
+ row["version"].to_i
58
+ end
59
+ @current_version = versions.max
60
+ @current_version_is_loaded = true
61
+ @current_version
62
+ end
63
+ rescue PG::UndefinedTable
64
+ connection.exec(create_schema_migrations_table_query)
65
+ retry
66
+ end
67
+
68
+ def run(target_version = nil)
69
+ direction, migrations = run_migrations(target_version)
70
+ connection.with_transaction do
71
+ migrations.each do |m|
72
+ m.send(direction)
73
+ if direction == :up
74
+ insert_version(m.version)
75
+ else
76
+ remove_version(m.version)
77
+ end
78
+ end
79
+ end
80
+ end
81
+
82
+ private
83
+
84
+ def get_version_query
85
+ "SELECT version FROM #{schema_migrations_table_name}"
86
+ end
87
+
88
+ def create_schema_migrations_table_query
89
+ "CREATE TABLE IF NOT EXISTS #{schema_migrations_table_name} (version text NOT NULL)"
90
+ end
91
+
92
+ def detect_direction(target_version)
93
+ return :up unless target_version && current_version
94
+
95
+ if current_version.to_i <= target_version.to_i
96
+ :up
97
+ else
98
+ :down
99
+ end
100
+ end
101
+
102
+ def insert_version(version)
103
+ connection.exec_params(<<-SQL, [version.to_s])
104
+ INSERT INTO #{schema_migrations_table_name} (version) VALUES ($1)
105
+ SQL
106
+ end
107
+
108
+ def remove_version(version)
109
+ connection.exec_params(<<-SQL, [version.to_s])
110
+ DELETE FROM #{schema_migrations_table_name} WHERE version = $1
111
+ SQL
112
+ end
113
+ end
114
+ end
@@ -0,0 +1,18 @@
1
+ module RedshiftSimpleMigrator
2
+ class Railtie < Rails::Railtie
3
+ initializer "redshift_simple_migrator.initialization" do
4
+ RedshiftSimpleMigrator.configure do |c|
5
+ c.migrations_path = Rails.root.join("redshift", "migrate").to_s
6
+ end
7
+ end
8
+
9
+ config.after_initialize do
10
+ config_yml = Rails.root.join("config", "redshift_simple_migrator.yml").to_s
11
+ RedshiftSimpleMigrator.config.load(config_yml) if File.exist?(config_yml)
12
+ end
13
+
14
+ rake_tasks do
15
+ load "redshift_simple_migrator/tasks/redshift.rake"
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,26 @@
1
+ namespace :redshift do
2
+ desc "Migrate the AWS Redshift (options: VERSION=x)"
3
+ task migrate: [:environment] do
4
+ begin
5
+ migrator = RedshiftSimpleMigrator::Migrator.new
6
+ migrator.run(ENV["VERSION"])
7
+ ensure
8
+ migrator.close
9
+ end
10
+ end
11
+
12
+ namespace :migrate do
13
+ desc "Display status of AWS Redshift migration (options: VERSION=x)"
14
+ task status: [:environment] do
15
+ begin
16
+ migrator = RedshiftSimpleMigrator::Migrator.new
17
+ direction, migrations = migrator.run_migrations(ENV["VERSION"])
18
+ migrations.each do |migration|
19
+ puts "#{direction} #{migration.version} #{migration.class.to_s}"
20
+ end
21
+ ensure
22
+ migrator.close
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,3 @@
1
+ module RedshiftSimpleMigrator
2
+ VERSION = "0.1.0"
3
+ end
@@ -0,0 +1,21 @@
1
+ require "redshift_simple_migrator/version"
2
+
3
+ module RedshiftSimpleMigrator
4
+ def self.config
5
+ RedshiftSimpleMigrator::Configuration.instance
6
+ end
7
+
8
+ def self.configure
9
+ yield self.config
10
+ end
11
+ end
12
+
13
+ require "redshift_simple_migrator/configuration"
14
+ require "redshift_simple_migrator/connection"
15
+ require "redshift_simple_migrator/migrator"
16
+ require "redshift_simple_migrator/migration"
17
+ require "redshift_simple_migrator/cli"
18
+
19
+ if defined?(Rails)
20
+ require "redshift_simple_migrator/railtie"
21
+ end
@@ -0,0 +1,32 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'redshift_simple_migrator/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "redshift_simple_migrator"
8
+ spec.version = RedshiftSimpleMigrator::VERSION
9
+ spec.authors = ["joker1007"]
10
+ spec.email = ["kakyoin.hierophant@gmail.com"]
11
+
12
+ spec.summary = %q{Simple schema migrator for AWS Redshift (and PostgreSQL)}
13
+ spec.description = %q{Simple schema migrator for AWS Redshift (and PostgreSQL)}
14
+ spec.homepage = "https://github.com/joker1007/redshift_simple_migrator"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
17
+ spec.bindir = "exe"
18
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_runtime_dependency "pg", ">= 0.18"
22
+ spec.add_runtime_dependency "activesupport", ">= 4"
23
+ spec.add_runtime_dependency "thor"
24
+
25
+ spec.add_development_dependency "bundler", "~> 1.10"
26
+ spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "rspec"
28
+ spec.add_development_dependency "rspec-power_assert"
29
+ spec.add_development_dependency "pry"
30
+ spec.add_development_dependency "tapp"
31
+ spec.add_development_dependency "tapp-awesome_print"
32
+ end
metadata ADDED
@@ -0,0 +1,203 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: redshift_simple_migrator
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - joker1007
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2015-06-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: pg
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0.18'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0.18'
27
+ - !ruby/object:Gem::Dependency
28
+ name: activesupport
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: '4'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: '4'
41
+ - !ruby/object:Gem::Dependency
42
+ name: thor
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
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: bundler
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '1.10'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '1.10'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '10.0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '10.0'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rspec
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rspec-power_assert
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: pry
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
125
+ - !ruby/object:Gem::Dependency
126
+ name: tapp
127
+ requirement: !ruby/object:Gem::Requirement
128
+ requirements:
129
+ - - ">="
130
+ - !ruby/object:Gem::Version
131
+ version: '0'
132
+ type: :development
133
+ prerelease: false
134
+ version_requirements: !ruby/object:Gem::Requirement
135
+ requirements:
136
+ - - ">="
137
+ - !ruby/object:Gem::Version
138
+ version: '0'
139
+ - !ruby/object:Gem::Dependency
140
+ name: tapp-awesome_print
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - ">="
144
+ - !ruby/object:Gem::Version
145
+ version: '0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - ">="
151
+ - !ruby/object:Gem::Version
152
+ version: '0'
153
+ description: Simple schema migrator for AWS Redshift (and PostgreSQL)
154
+ email:
155
+ - kakyoin.hierophant@gmail.com
156
+ executables:
157
+ - redshift_simple_migrator
158
+ extensions: []
159
+ extra_rdoc_files: []
160
+ files:
161
+ - ".gitignore"
162
+ - ".rspec"
163
+ - ".travis.yml"
164
+ - Gemfile
165
+ - README.md
166
+ - Rakefile
167
+ - bin/console
168
+ - bin/setup
169
+ - exe/redshift_simple_migrator
170
+ - lib/redshift_simple_migrator.rb
171
+ - lib/redshift_simple_migrator/cli.rb
172
+ - lib/redshift_simple_migrator/configuration.rb
173
+ - lib/redshift_simple_migrator/connection.rb
174
+ - lib/redshift_simple_migrator/migration.rb
175
+ - lib/redshift_simple_migrator/migrator.rb
176
+ - lib/redshift_simple_migrator/railtie.rb
177
+ - lib/redshift_simple_migrator/tasks/redshift.rake
178
+ - lib/redshift_simple_migrator/version.rb
179
+ - redshift_simple_migrator.gemspec
180
+ homepage: https://github.com/joker1007/redshift_simple_migrator
181
+ licenses: []
182
+ metadata: {}
183
+ post_install_message:
184
+ rdoc_options: []
185
+ require_paths:
186
+ - lib
187
+ required_ruby_version: !ruby/object:Gem::Requirement
188
+ requirements:
189
+ - - ">="
190
+ - !ruby/object:Gem::Version
191
+ version: '0'
192
+ required_rubygems_version: !ruby/object:Gem::Requirement
193
+ requirements:
194
+ - - ">="
195
+ - !ruby/object:Gem::Version
196
+ version: '0'
197
+ requirements: []
198
+ rubyforge_project:
199
+ rubygems_version: 2.4.6
200
+ signing_key:
201
+ specification_version: 4
202
+ summary: Simple schema migrator for AWS Redshift (and PostgreSQL)
203
+ test_files: []