brancher 0.2.0 → 0.3.0

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
2
  SHA1:
3
- metadata.gz: c616af20efc6517103ceebed2bd1120d4c0fc5ad
4
- data.tar.gz: 317c28a2aa798faf3261b5c0e63cb4354dea04b7
3
+ metadata.gz: e46188837b98d89a415fd14531e6c8596e28e833
4
+ data.tar.gz: a30cba0b35d679485f32b964a80deecc52ce522c
5
5
  SHA512:
6
- metadata.gz: 76e80a391937a051a3f39a46b17ff249e44669606fe102e99befb2b82c034f281b667612adb1bbb6beee8b7e9ac1fde0cea801bb96b59b92170497abc29fe07f
7
- data.tar.gz: 3e0c8ce75d8d71fcfe3885d701f5ed6467e38e13c8ac4426186832b01e394f007623b5bee0cc1e94f2bebe0cb5124d882a8fb85f06e6c2fe133dd8c85ebf9a3b
6
+ metadata.gz: d630b069a8244240763bda6357c257e042263ca9289c996f8420918d5da3417ed13e6e6ae525a4576a29492d7c19f99d1701514a529e8130d130a10dabfa7ade
7
+ data.tar.gz: e65166e71657c1bb0f9d6bfe49404ace55d7c74c913b5bb20eaa1aa5b88ade3050f1fda6e87e8c860467d48ad3a4fec648577f4c6a6f272ed17d06ff5707bcea
@@ -6,9 +6,11 @@ module Brancher
6
6
  include ActiveSupport::Configurable
7
7
  config.except_branches ||= []
8
8
  config.auto_copy ||= false
9
+ config.max_database_name_length ||= 63
9
10
  end
10
11
 
11
12
  require "brancher/database_configuration_renaming"
13
+ require "brancher/multiple_database_configuration_renaming"
12
14
  require "brancher/database_rename_service"
13
15
  require "brancher/auto_copying"
14
16
  require "brancher/railtie"
@@ -24,11 +24,10 @@ module Brancher
24
24
  end
25
25
 
26
26
  def auto_copy
27
- suffix = Brancher::DatabaseRenameService.suffix
28
- return unless suffix
27
+ return if config[:database] == config[:original_database]
29
28
 
30
29
  database_name = config[:database]
31
- original_database_name = database_name.gsub(Regexp.new(suffix), "")
30
+ original_database_name = config[:original_database]
32
31
 
33
32
  case config[:adapter]
34
33
  when /mysql/
@@ -39,15 +38,15 @@ module Brancher
39
38
  end
40
39
 
41
40
  def mysql_copy(original_database_name, database_name)
42
- system("bundle", "exec", "rake", "db:create")
41
+ ActiveRecord::Tasks::DatabaseTasks.create(config.with_indifferent_access)
43
42
 
44
43
  cmd = ["mysqldump", "-u", config[:username]]
45
44
  cmd.concat(["-h", config[:host]]) if config[:host].present?
46
- cmd.concat(["-p", config[:password]]) if config[:password].present?
45
+ cmd.concat(["-p#{config[:password]}"]) if config[:password].present?
47
46
  cmd << original_database_name
48
47
  cmd.concat(["|", "mysql", "-u", config[:username]])
49
48
  cmd.concat(["-h", config[:host]]) if config[:host].present?
50
- cmd.concat(["-p", config[:password]]) if config[:password].present?
49
+ cmd.concat(["-p#{config[:password]}"]) if config[:password].present?
51
50
  cmd << database_name
52
51
  system(cmd.join(" "))
53
52
  end
@@ -4,23 +4,28 @@ module Brancher
4
4
  module DatabaseRenameService
5
5
  extend self
6
6
 
7
- def rename!(configurations)
8
- configuration = configurations[env]
9
- database_extname = File.extname(configuration["database"])
10
- database_name = configuration["database"].gsub(%r{#{database_extname}$}) { "" }
11
- database_name += suffix unless database_name =~ %r{#{suffix}$}
12
- configuration["database"] = database_name + database_extname
7
+ def rename!(configurations, key = env)
8
+ configuration = configurations[key]
9
+ configuration["original_database"] = configuration["database"]
10
+ configuration["database"] = database_name_with_suffix(configuration["database"])
13
11
  configurations
14
12
  end
15
13
 
16
- def suffix
17
- return nil if current_branch.blank?
18
- return nil if Brancher.config.except_branches.include?(current_branch)
14
+ private
19
15
 
20
- "_#{current_branch}"
16
+ def database_name_with_suffix(database)
17
+ database_extname = File.extname(database)
18
+ database_name = database.gsub(%r{#{database_extname}$}) { "" }
19
+ database_name += suffix unless database_name =~ %r{#{suffix}$}
20
+ database_name += database_extname
21
+ database_name = database_name.slice(0,Brancher.config.max_database_name_length-22) + [Digest::MD5.digest(database_name)].pack("m0").slice(0,22).gsub(/[^\w]/, '_').downcase if database_name.length > Brancher.config.max_database_name_length
22
+ database_name
21
23
  end
22
24
 
23
- private
25
+ def suffix
26
+ return nil if current_branch.blank? || Brancher.config.except_branches.include?(current_branch)
27
+ "_#{current_branch}"
28
+ end
24
29
 
25
30
  def env
26
31
  Rails.env
@@ -0,0 +1,15 @@
1
+ module Brancher
2
+ module MultipleDatabaseConfigurationRenaming
3
+ module ClassMethods
4
+ def establish_connection(spec = nil)
5
+ DatabaseRenameService.rename!(configurations, spec.to_s) if spec && spec.is_a?(Hash).!
6
+
7
+ super
8
+ end
9
+ end
10
+
11
+ def self.prepended(base)
12
+ base.singleton_class.send(:prepend, ClassMethods)
13
+ end
14
+ end
15
+ end
@@ -4,15 +4,23 @@ module Brancher
4
4
  class Railtie < Rails::Railtie
5
5
  initializer "brancher.rename_database", before: "active_record.initialize_database" do
6
6
  Rails::Application::Configuration.send(:prepend, DatabaseConfigurationRenaming)
7
+ ActiveRecord::Base.send(:prepend, MultipleDatabaseConfigurationRenaming)
7
8
  ActiveRecord::ConnectionAdapters::ConnectionPool.send(:prepend, AutoCopying)
8
9
  end
9
10
 
10
11
  rake_tasks do
11
12
  namespace :db do
12
13
  task :load_config do
14
+ require_environment!
13
15
  DatabaseRenameService.rename!(ActiveRecord::Base.configurations)
14
16
  end
15
17
  end
16
18
  end
19
+
20
+ def require_environment!
21
+ return unless defined? Rails
22
+ environemnt = "#{Rails.root}/config/environments/#{Rails.env}.rb"
23
+ require environemnt if File.exists?(environemnt)
24
+ end
17
25
  end
18
26
  end
@@ -1,3 +1,3 @@
1
1
  module Brancher
2
- VERSION = "0.2.0"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -46,7 +46,8 @@ describe Brancher::DatabaseRenameService do
46
46
  "adapter" => adapter,
47
47
  "pool" => 5,
48
48
  "timeout" => 5000,
49
- "database" => new_database_name
49
+ "database" => new_database_name,
50
+ "original_database" => database_name
50
51
  }
51
52
  }
52
53
  end
@@ -80,5 +81,45 @@ describe Brancher::DatabaseRenameService do
80
81
 
81
82
  it { is_expected.to eq new_configurations }
82
83
  end
84
+
85
+ context "when the database name is longer than max_database_name_length" do
86
+ let(:adapter) do
87
+ "mysql2"
88
+ end
89
+
90
+ let(:database_name) do
91
+ "this_is_a_very_long_sample_app_development_database_name_that_exceeds_the_default_set_max_database_name_length"
92
+ end
93
+
94
+ let(:new_database_name) do
95
+ "this_is_a_very_long_sample_app_developmen#{[Digest::MD5.digest("#{database_name}_#{branch}")].pack('m0').slice(0,22).gsub(/[^\w]/, '_').downcase}"
96
+ end
97
+
98
+ it { is_expected.to eq new_configurations }
99
+ end
100
+
101
+ context "when it connect another database" do
102
+ let(:adapter) do
103
+ "mysql2"
104
+ end
105
+
106
+ let(:database_name) do
107
+ "sample_app_another_db"
108
+ end
109
+
110
+ let(:new_database_name) do
111
+ "#{database_name}_#{branch}"
112
+ end
113
+
114
+ let(:env) do
115
+ "another_db"
116
+ end
117
+
118
+ subject do
119
+ Brancher::DatabaseRenameService.rename!(configurations, env)
120
+ end
121
+
122
+ it { is_expected.to eq new_configurations }
123
+ end
83
124
  end
84
125
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: brancher
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Naoto Kaneko
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2015-05-16 00:00:00.000000000 Z
11
+ date: 2015-10-22 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -112,6 +112,7 @@ files:
112
112
  - lib/brancher/auto_copying.rb
113
113
  - lib/brancher/database_configuration_renaming.rb
114
114
  - lib/brancher/database_rename_service.rb
115
+ - lib/brancher/multiple_database_configuration_renaming.rb
115
116
  - lib/brancher/railtie.rb
116
117
  - lib/brancher/version.rb
117
118
  - spec/brancher/database_rename_service_spec.rb
@@ -143,4 +144,3 @@ summary: Switching databases connected with ActiveRecord by Git branch
143
144
  test_files:
144
145
  - spec/brancher/database_rename_service_spec.rb
145
146
  - spec/spec_helper.rb
146
- has_rdoc: