slonik_migration 1.0.0 → 1.1.0
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 +4 -4
- data/.travis.yml +8 -5
- data/README.md +17 -6
- data/gemfiles/rails50.gemfile +2 -1
- data/gemfiles/rails51.gemfile +2 -1
- data/gemfiles/rails52.gemfile +6 -0
- data/lib/generators/slonik_migration/templates/slonik.yml +3 -0
- data/lib/slonik_migration/command.rb +5 -7
- data/lib/slonik_migration/config.rb +25 -0
- data/lib/slonik_migration/extension.rb +42 -0
- data/lib/slonik_migration/version.rb +1 -1
- data/lib/slonik_migration.rb +0 -44
- data/lib/tasks/slonik_migration.rake +26 -3
- data/slonik_migration.gemspec +2 -2
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0a9bac5e2a100f82b528a7e361791da8861df69c
|
4
|
+
data.tar.gz: 4f0d8060ee2efc0e090468e47269dbc1fd83667a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 96882aac71029ddd3c17ef983b3701955d0bb6eee73ed333d127b4e1c51a29ddfbcea5638855daa71536a4b07aad32b7b641ff52de2ae485bc9388ba41488412
|
7
|
+
data.tar.gz: 71141e836529b0059b2434619ecd1aa4efb9778f4e46f7c0ec055006b15f391bdde0fa6a067b5b214ffc34dabb3f523ef01fc303aff85061c35b9db6c874bae9
|
data/.travis.yml
CHANGED
@@ -1,10 +1,13 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
- 2.3
|
4
|
-
- 2.4
|
3
|
+
- 2.3
|
4
|
+
- 2.4
|
5
|
+
- 2.5
|
5
6
|
gemfile:
|
6
7
|
- gemfiles/rails50.gemfile
|
7
8
|
- gemfiles/rails51.gemfile
|
8
|
-
|
9
|
-
|
10
|
-
|
9
|
+
- gemfiles/rails52.gemfile
|
10
|
+
script:
|
11
|
+
- bundle exec rspec spec/slonik_migration_spec.rb
|
12
|
+
- bundle exec rspec spec/slonik_migration_task_spec.rb
|
13
|
+
|
data/README.md
CHANGED
@@ -5,7 +5,7 @@ A rails migration gem for slony using `slonik_execute_script` command.
|
|
5
5
|
## Dependencies
|
6
6
|
|
7
7
|
* ruby 2.3+
|
8
|
-
*
|
8
|
+
* activerecord 5.0+
|
9
9
|
* slony 2.2+
|
10
10
|
|
11
11
|
## Installation
|
@@ -30,6 +30,9 @@ Edit `config/slonik.yml`.
|
|
30
30
|
|
31
31
|
```yaml
|
32
32
|
default: &default
|
33
|
+
# enable migration with slonik
|
34
|
+
enabled: true
|
35
|
+
|
33
36
|
# slonik command. $SQL is replaced with raw SQL.
|
34
37
|
command: slonik_execute_script -c $SQL 1 | sed "s/set id = 1,//" | slonik
|
35
38
|
|
@@ -51,13 +54,21 @@ production:
|
|
51
54
|
|
52
55
|
## Usage
|
53
56
|
|
54
|
-
|
57
|
+
This gem enhances following rails commands:
|
58
|
+
|
59
|
+
* db:migrate
|
60
|
+
* db:migrate:up
|
61
|
+
* db:migrate:down
|
62
|
+
|
63
|
+
You can use migration command as usual:
|
64
|
+
|
65
|
+
$ bundle exec rake db:migrate RAILS_ENV=production
|
55
66
|
|
56
|
-
|
67
|
+
If you want to specify config file:
|
57
68
|
|
58
|
-
|
69
|
+
$ bundle exec rake db:migrate RAILS_ENV=production CONFIG=/path/to/slonik.yml
|
59
70
|
|
60
|
-
|
71
|
+
## Execution example
|
61
72
|
|
62
73
|
Migration command executes `slonik_execute_command` as the following example:
|
63
74
|
|
@@ -69,7 +80,7 @@ Bug reports and pull requests are welcome at https://github.com/kanety/slonik_mi
|
|
69
80
|
|
70
81
|
## Reference
|
71
82
|
|
72
|
-
This gem is inspired by the discussions
|
83
|
+
This gem is inspired by [the discussions](http://justatheory.com/computers/databases/postgresql/rails_and_slony.html).
|
73
84
|
|
74
85
|
## License
|
75
86
|
|
data/gemfiles/rails50.gemfile
CHANGED
data/gemfiles/rails51.gemfile
CHANGED
@@ -4,9 +4,7 @@ require 'shellwords'
|
|
4
4
|
module SlonikMigration
|
5
5
|
class Command
|
6
6
|
def initialize
|
7
|
-
|
8
|
-
env = ENV['RAILS_ENV'] || 'development'
|
9
|
-
@config = YAML.load(ERB.new(IO.read(config_file)).result)[env].deep_symbolize_keys
|
7
|
+
@config = SlonikMigration::Config.load
|
10
8
|
end
|
11
9
|
|
12
10
|
def execute(sql, options = {})
|
@@ -18,13 +16,13 @@ module SlonikMigration
|
|
18
16
|
private
|
19
17
|
|
20
18
|
def build(sql, target: nil, name: nil, owner: nil)
|
21
|
-
sql << %Q|; ALTER #{target} "#{name}" OWNER TO #{@config
|
22
|
-
@config
|
23
|
-
|
19
|
+
sql << %Q|; ALTER #{target} "#{name}" OWNER TO #{@config.owner}| if target && name && @config.owner
|
20
|
+
@config.command.gsub(%r{\$SQL}, Shellwords.escape(sql))
|
21
|
+
.gsub(%r{\$(\w+)}) { replace($1) }
|
24
22
|
end
|
25
23
|
|
26
24
|
def replace(key)
|
27
|
-
if (var = @config.
|
25
|
+
if (var = @config.variables[key])
|
28
26
|
Shellwords.escape(var.to_s)
|
29
27
|
else
|
30
28
|
"$#{key}"
|
@@ -0,0 +1,25 @@
|
|
1
|
+
require 'ostruct'
|
2
|
+
|
3
|
+
module SlonikMigration
|
4
|
+
class Config
|
5
|
+
class << self
|
6
|
+
def load
|
7
|
+
file = config_file
|
8
|
+
env = ENV['RAILS_ENV'] || 'development'
|
9
|
+
OpenStruct.new(YAML.load(ERB.new(IO.read(file)).result)[env]).freeze
|
10
|
+
end
|
11
|
+
|
12
|
+
private
|
13
|
+
|
14
|
+
def config_file
|
15
|
+
if ENV['CONFIG_FILE']
|
16
|
+
ENV['CONFIG_FILE']
|
17
|
+
elsif defined?(Rails)
|
18
|
+
Rails.root.join('config/slonik.yml').to_s
|
19
|
+
else
|
20
|
+
File.join(Dir.pwd, 'config/slonik.yml')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
require_relative 'command'
|
2
|
+
|
3
|
+
module SlonikMigration
|
4
|
+
class Extension
|
5
|
+
class << self
|
6
|
+
def overwrite
|
7
|
+
ActiveRecord::Migrator.class_eval do
|
8
|
+
private
|
9
|
+
alias_method :orig_use_transaction?, :use_transaction?
|
10
|
+
def use_transaction?(migration)
|
11
|
+
false
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
|
16
|
+
alias_method :orig_execute, :execute
|
17
|
+
def execute(sql, name = nil)
|
18
|
+
if sql =~ /^create (table|sequence|view) "([^"]+)"/i
|
19
|
+
ret = SlonikMigration::Command.new.execute(sql, target: $1, name: $2)
|
20
|
+
raise "failed to execute slonik command." unless ret
|
21
|
+
elsif sql =~ /^(create|alter|drop)/i
|
22
|
+
ret = SlonikMigration::Command.new.execute(sql)
|
23
|
+
raise "failed to execute slonik command." unless ret
|
24
|
+
else
|
25
|
+
orig_execute sql, name
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def restore
|
32
|
+
ActiveRecord::Migrator.class_eval do
|
33
|
+
alias_method :use_transaction?, :orig_use_transaction?
|
34
|
+
end
|
35
|
+
|
36
|
+
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
|
37
|
+
alias_method :execute, :orig_execute
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
data/lib/slonik_migration.rb
CHANGED
@@ -2,48 +2,4 @@ require 'slonik_migration/version'
|
|
2
2
|
require 'slonik_migration/railtie' if defined?(Rails)
|
3
3
|
|
4
4
|
module SlonikMigration
|
5
|
-
class << self
|
6
|
-
def patch
|
7
|
-
overwrite
|
8
|
-
yield
|
9
|
-
ensure
|
10
|
-
restore
|
11
|
-
end
|
12
|
-
|
13
|
-
def overwrite
|
14
|
-
ActiveRecord::Migrator.class_eval do
|
15
|
-
private
|
16
|
-
alias_method :orig_use_transaction?, :use_transaction?
|
17
|
-
def use_transaction?(migration)
|
18
|
-
false
|
19
|
-
end
|
20
|
-
end
|
21
|
-
|
22
|
-
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
|
23
|
-
alias_method :orig_execute, :execute
|
24
|
-
def execute(sql, name = nil)
|
25
|
-
require 'slonik_migration/command'
|
26
|
-
if sql =~ /^create (table|sequence|view) "([^"]+)"/i
|
27
|
-
ret = SlonikMigration::Command.new.execute(sql, target: $1, name: $2)
|
28
|
-
raise "failed to execute slonik command." unless ret
|
29
|
-
elsif sql =~ /^(create|alter|drop)/i
|
30
|
-
ret = SlonikMigration::Command.new.execute(sql)
|
31
|
-
raise "failed to execute slonik command." unless ret
|
32
|
-
else
|
33
|
-
orig_execute sql, name
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def restore
|
40
|
-
ActiveRecord::Migrator.class_eval do
|
41
|
-
alias_method :use_transaction?, :orig_use_transaction?
|
42
|
-
end
|
43
|
-
|
44
|
-
ActiveRecord::ConnectionAdapters::PostgreSQLAdapter.class_eval do
|
45
|
-
alias_method :execute, :orig_execute
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
5
|
end
|
@@ -1,16 +1,39 @@
|
|
1
|
+
require 'slonik_migration/config'
|
2
|
+
require 'slonik_migration/extension'
|
3
|
+
|
4
|
+
if SlonikMigration::Config.load.enabled
|
5
|
+
namespace :slonik do
|
6
|
+
task :migration do
|
7
|
+
SlonikMigration::Extension.overwrite
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
Rake::Task["db:migrate"].enhance(["slonik:migration"]) do
|
12
|
+
SlonikMigration::Extension.restore
|
13
|
+
end
|
14
|
+
|
15
|
+
Rake::Task["db:migrate:up"].enhance(["slonik:migration"]) do
|
16
|
+
SlonikMigration::Extension.restore
|
17
|
+
end
|
18
|
+
|
19
|
+
Rake::Task["db:migrate:down"].enhance(["slonik:migration"]) do
|
20
|
+
SlonikMigration::Extension.restore
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
1
24
|
namespace :slonik do
|
2
25
|
namespace :db do
|
3
26
|
desc "Migrate database using slonik_execute_script"
|
4
27
|
task :migrate => :environment do
|
5
|
-
|
28
|
+
Rake::Task["db:migrate"].invoke
|
6
29
|
end
|
7
30
|
|
8
31
|
namespace :migrate do
|
9
32
|
task :up => :environment do
|
10
|
-
|
33
|
+
Rake::Task["db:migrate:up"].invoke
|
11
34
|
end
|
12
35
|
task :down => :environment do
|
13
|
-
|
36
|
+
Rake::Task["db:migrate:down"].invoke
|
14
37
|
end
|
15
38
|
end
|
16
39
|
end
|
data/slonik_migration.gemspec
CHANGED
@@ -17,9 +17,9 @@ Gem::Specification.new do |spec|
|
|
17
17
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
18
|
spec.require_paths = ["lib"]
|
19
19
|
|
20
|
-
spec.add_dependency "activerecord", ">= 5.0
|
20
|
+
spec.add_dependency "activerecord", ">= 5.0"
|
21
21
|
|
22
|
-
spec.add_development_dependency "rails", ">= 5.0
|
22
|
+
spec.add_development_dependency "rails", ">= 5.0"
|
23
23
|
spec.add_development_dependency "pg"
|
24
24
|
spec.add_development_dependency "rspec"
|
25
25
|
spec.add_development_dependency "rspec-rails"
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slonik_migration
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Yoshikazu Kaneta
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-03-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activerecord
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version: 5.0
|
19
|
+
version: '5.0'
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version: 5.0
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rails
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version: 5.0
|
33
|
+
version: '5.0'
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version: 5.0
|
40
|
+
version: '5.0'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: pg
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -110,10 +110,13 @@ files:
|
|
110
110
|
- Rakefile
|
111
111
|
- gemfiles/rails50.gemfile
|
112
112
|
- gemfiles/rails51.gemfile
|
113
|
+
- gemfiles/rails52.gemfile
|
113
114
|
- lib/generators/slonik_migration/config_generator.rb
|
114
115
|
- lib/generators/slonik_migration/templates/slonik.yml
|
115
116
|
- lib/slonik_migration.rb
|
116
117
|
- lib/slonik_migration/command.rb
|
118
|
+
- lib/slonik_migration/config.rb
|
119
|
+
- lib/slonik_migration/extension.rb
|
117
120
|
- lib/slonik_migration/railtie.rb
|
118
121
|
- lib/slonik_migration/version.rb
|
119
122
|
- lib/tasks/slonik_migration.rake
|
@@ -137,7 +140,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
137
140
|
version: '0'
|
138
141
|
requirements: []
|
139
142
|
rubyforge_project:
|
140
|
-
rubygems_version: 2.5.2.
|
143
|
+
rubygems_version: 2.5.2.2
|
141
144
|
signing_key:
|
142
145
|
specification_version: 4
|
143
146
|
summary: A rails migration gem for slony
|