database_fork 0.0.1 → 0.0.2

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
  SHA1:
3
- metadata.gz: c2481e3d19c6e65d915b9d101e2f278f6142ca4d
4
- data.tar.gz: bc6f79626eeb8d59ddff470d97bcdb77e3e788bd
3
+ metadata.gz: fd8885a83edb2df3957725d5e5640cbb203fb355
4
+ data.tar.gz: 74c890ff847f6f13fc720eeeeb64e906de7d99dd
5
5
  SHA512:
6
- metadata.gz: 9cd6ba6d808ec148e4e8ad151c590cb4d2b283c85e35df54d13e3184c3c646eaf512d005cec453fd0a79fa2679157c22355428759080fbc0aefdf9842312fdce
7
- data.tar.gz: f1115ca6776bc93c8fb322e318cd8daa20a72612e6e4a65f6de85c64cfaab95e3d9199d96172bfa451e9eb018fbb8c2d079f6ee4829572b0f4af6e9fbc373df1
6
+ metadata.gz: f427ee23fbf2c4734074a7bf8f20d796ce899745758c5d90e3cbab70b40edd3cf44fdf0b599af1efbf3ac42bc8a4bcf12cdffb4e16025a1a4258267e832c0f9b
7
+ data.tar.gz: d8d326fdcdf9d7f6cb4928b6aeb460c6cd3716fa53525eb890ae404dc2f47c5cc40b48691f757fb2fd98f800be723bb81c35dd5bb22d48c3cc73fd80f97bcfc9
@@ -4,7 +4,7 @@ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
4
 
5
5
  Gem::Specification.new do |spec|
6
6
  spec.name = "database_fork"
7
- spec.version = '0.0.1'
7
+ spec.version = '0.0.2'
8
8
  spec.authors = ["the-architect"]
9
9
  spec.email = ["marcel.scherf@epicteams.com"]
10
10
  spec.summary = %q{Fork your database}
data/lib/database_fork.rb CHANGED
@@ -16,11 +16,14 @@ class DatabaseFork
16
16
  end
17
17
 
18
18
  # use DatabaseFork.new.run in your post-checkout hook
19
- def initialize(config_file = '.db_forks.yml', logger = Logger.new(STDOUT))
20
- @config_file = config_file
19
+ def initialize(root_dir, logger = Logger.new(STDOUT))
20
+ @root_dir = root_dir
21
+ @config_file = File.join(@root_dir, '.db_forks.yml')
21
22
  @logger = logger
23
+ @commands = []
22
24
  end
23
25
 
26
+ # TODO: simplify this somehow
24
27
  def run
25
28
  if config['ignore'].include?(current_branch)
26
29
  log_info 'This branch name is ignored in .db_fork.yml config. Skipping along.'
@@ -32,12 +35,7 @@ class DatabaseFork
32
35
  log_info 'database fork already exists'
33
36
  export_env
34
37
  else
35
- log_info "Create a database fork '#{fork_db_name}'? [y|n|enter=ignore]"
36
-
37
- # trick to read user input:
38
- decision = IO.new(IO.sysopen('/dev/tty'), 'r').gets.chomp
39
-
40
- case decision
38
+ case ask_user("Create database: '#{fork_db_name}'? (y(es), n(no), enter=ignore)")
41
39
  when 'y'
42
40
  create_database_fork!
43
41
  export_env
@@ -50,13 +48,18 @@ class DatabaseFork
50
48
  end
51
49
  end
52
50
  else
53
- log_info 'not a feature branch. not creating database fork.'
54
51
  reset_env
55
52
  end
56
53
 
57
54
  save_config
58
55
  end
59
56
 
57
+
58
+ def ask_user(question)
59
+ log_info question
60
+ IO.new(IO.sysopen('/dev/tty'), 'r').gets.chomp
61
+ end
62
+
60
63
  def create_database_fork!
61
64
  config['environments'].each do |env|
62
65
  log_info "creating database fork '#{fork_db_name(env)}' from #{source_db(env)}"
@@ -68,14 +71,17 @@ class DatabaseFork
68
71
  end
69
72
  end
70
73
 
74
+ # TODO: refactor to adapter
71
75
  def create_dump(env = 'development')
72
76
  run_command %Q{mysqldump #{connection_params(env)} --routines --triggers -C #{source_db(env)} > #{dump_file_path(env)}}, "dumping #{source_db(env)}"
73
77
  end
74
78
 
79
+ # TODO: refactor to adapter
75
80
  def create_database(env = 'development')
76
81
  run_command %Q{mysql #{connection_params(env)} -e "CREATE DATABASE IF NOT EXISTS #{fork_db_name(env)} CHARACTER SET '#{character_set}' COLLATE '#{collation}';"}, "create database #{fork_db_name(env)}"
77
82
  end
78
83
 
84
+ # TODO: refactor to adapter
79
85
  def import_dump(env = 'development')
80
86
  run_command %Q{mysql #{connection_params(env)} -C -A -D#{fork_db_name(env)} < #{dump_file_path(env)}}, 'importing dump'
81
87
  end
@@ -85,6 +91,7 @@ class DatabaseFork
85
91
  end
86
92
 
87
93
  def reset_env
94
+ log_info 'Resetting fork information'
88
95
  run_command "rm ./tmp/DATABASE_FORK_DEVELOPMENT", 'rm DATABASE_FORK_DEVELOPMENT'
89
96
  run_command "rm ./tmp/DATABASE_FORK_TEST", 'rm DATABASE_FORK_TEST'
90
97
  end
@@ -94,14 +101,15 @@ class DatabaseFork
94
101
  run_command "echo #{fork_db_name('test')} > ./tmp/DATABASE_FORK_TEST", 'setting DATABASE_FORK_TEST'
95
102
  end
96
103
 
97
- def run_command(command, message)
104
+ def run_command(command, message, dry_run = false)
98
105
  log_info message
99
106
  log_debug command
100
- `#{command}`
107
+ @commands << [command, message]
108
+ `#{command}` unless dry_run
101
109
  end
102
110
 
103
111
  def dump_file_path(env = 'development')
104
- "./tmp/dump_#{env}.sql"
112
+ File.join(@root_dir, 'tmp', "dump_#{env}.sql")
105
113
  end
106
114
 
107
115
  # could be queried from source_db:
@@ -146,23 +154,21 @@ class DatabaseFork
146
154
  end
147
155
 
148
156
  def app_connection
149
- @app_connection ||= YAML.load(ERB.new(open(File.join(File.dirname(__FILE__), '..', '..', 'config', 'database.yml')).read).result)
157
+ @app_connection ||= YAML.load(ERB.new(open(File.join(@root_dir, '..', '..', 'config', 'database.yml')).read).result)
150
158
  end
151
159
 
152
160
  def current_branch
153
161
  @current_branch ||= `git rev-parse --abbrev-ref HEAD`.strip.gsub('/', '_')
154
162
  end
155
163
 
164
+ DEFAULTS = {
165
+ 'check_branch_name_regex' => '^feature_',
166
+ 'ignore' => [],
167
+ 'environments' => %w(development test)
168
+ }
169
+
156
170
  def config
157
- @config ||= begin
158
- config = {
159
- 'check_branch_name_regex' => '^feature_',
160
- 'ignore' => [],
161
- 'environments' => %w(development test)
162
- }
163
- config.merge! YAML.load(open(@config_file).read) if File.exists?(@config_file)
164
- config
165
- end
171
+ @config ||= DEFAULTS.merge(YAML.load(open(@config_file).read)) rescue DEFAULTS
166
172
  end
167
173
 
168
174
  def save_config
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: database_fork
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - the-architect
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-07-16 00:00:00.000000000 Z
11
+ date: 2014-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler