dumpdb 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA512:
3
+ metadata.gz: b45a5c4f8c56f6beb4b9abb1f28db750d333d73b6b2531a5fba69684d7324bf9d7be336e694831c813bb9fe5ded0fc7769b1bb350ba5f197bd96d4f88b50e25e
4
+ data.tar.gz: 43ffadbd18f646c146b1b3a4cb74907786162c8d78f0540a35d4223940b88f3e2da564b782eb8f25eb20c691ca0f6b1685bf1223c9f2f876fd54cf3528671dd0
5
+ SHA1:
6
+ metadata.gz: 8db6421ca5dfed0343dc706b65d4b924d11039b1
7
+ data.tar.gz: 97c8455c86faff07ff5c7ffbce8c9eb97eabf6e5
data/Gemfile CHANGED
@@ -2,5 +2,4 @@ source "https://rubygems.org"
2
2
 
3
3
  gemspec
4
4
 
5
- gem 'rake', "~> 10.4.0"
6
- gem 'pry', "~> 0.9.0"
5
+ gem 'pry', "~> 0.9.0"
@@ -8,17 +8,19 @@ Gem::Specification.new do |gem|
8
8
  gem.version = Dumpdb::VERSION
9
9
  gem.authors = ["Kelly Redding", "Collin Redding"]
10
10
  gem.email = ["kelly@kellyredding.com", "collin.redding@me.com"]
11
- gem.description = %q{Dump and restore your databases.}
12
11
  gem.summary = %q{Dump and restore your databases.}
12
+ gem.description = %q{Dump and restore your databases.}
13
13
  gem.homepage = "http://github.com/redding/dumpdb"
14
+ gem.license = 'MIT'
14
15
 
15
16
  gem.files = `git ls-files`.split($/)
16
17
  gem.executables = gem.files.grep(%r{^bin/}).map{ |f| File.basename(f) }
17
18
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
18
19
  gem.require_paths = ["lib"]
19
20
 
20
- gem.add_development_dependency("assert", ["~> 2.15"])
21
+ gem.add_development_dependency("assert", ["~> 2.16.1"])
22
+
23
+ gem.add_dependency("much-plugin", ["~> 0.2.0"])
24
+ gem.add_dependency("scmd", ["~> 3.0.2"])
21
25
 
22
- gem.add_dependency("scmd", ["~> 3.0"])
23
- gem.add_dependency("ns-options", ["~> 1.1", ">= 1.1.1"])
24
26
  end
@@ -1,60 +1,60 @@
1
- require 'ns-options'
1
+ require 'much-plugin'
2
2
  require 'dumpdb/version'
3
3
  require 'dumpdb/settings'
4
4
  require 'dumpdb/db'
5
5
  require 'dumpdb/runner'
6
6
 
7
7
  module Dumpdb
8
+ include MuchPlugin
8
9
 
9
- class BadDatabaseName < RuntimeError; end
10
-
11
- def self.included(receiver)
12
- receiver.class_eval do
13
- include NsOptions
14
- options :settings do
15
- option 'ssh', Settings::Ssh, :default => ''
16
- option 'dump_file', Settings::DumpFile, :default => ''
17
- option 'source', Settings::SourceTarget, :default => {}
18
- option 'target', Settings::SourceTarget, :default => {}
19
- option 'dump_cmds', Settings::CmdList, :default => []
20
- option 'restore_cmds', Settings::CmdList, :default => []
21
- end
22
-
23
- extend SettingsDslMethods
24
- include SettingsMethods
25
-
26
- def self.inherited(subclass)
27
- subclass.settings.apply(self.settings.to_hash)
28
- end
10
+ plugin_included do
11
+ extend ClassMethods
12
+ include InstanceMethods
29
13
 
14
+ def self.inherited(subclass)
15
+ subclass.settings = self.settings
30
16
  end
31
- end
32
17
 
33
- module SettingsDslMethods
18
+ end
34
19
 
35
- def ssh(&block); settings.ssh = Settings::Ssh.new(block); end
36
- def dump_file(&block); settings.dump_file = Settings::DumpFile.new(block); end
37
- def source(&block); settings.source = Settings::SourceTarget.new(block); end
38
- def target(&block); settings.target = Settings::SourceTarget.new(block); end
20
+ module ClassMethods
21
+
22
+ def ssh(&block); settings[:ssh] = Settings::Ssh.new(block); end
23
+ def dump_file(&block); settings[:dump_file] = Settings::DumpFile.new(block); end
24
+ def source(&block); settings[:source] = Settings::SourceTarget.new(block); end
25
+ def target(&block); settings[:target] = Settings::SourceTarget.new(block); end
26
+
27
+ def dump(&block); settings[:dump_cmds] << Settings::DumpCmd.new(block); end
28
+ def restore(&block); settings[:restore_cmds] << Settings::RestoreCmd.new(block); end
29
+
30
+ def settings
31
+ @settings ||= {
32
+ :ssh => Settings::Ssh.new(''),
33
+ :dump_file => Settings::DumpFile.new(''),
34
+ :source => Settings::SourceTarget.new({}),
35
+ :target => Settings::SourceTarget.new({}),
36
+ :dump_cmds => Settings::CmdList.new([]),
37
+ :restore_cmds => Settings::CmdList.new([])
38
+ }
39
+ end
39
40
 
40
- def dump(&block); settings.dump_cmds << Settings::DumpCmd.new(block); end
41
- def restore(&block); settings.restore_cmds << Settings::RestoreCmd.new(block); end
41
+ def settings=(value); @settings = value; end
42
42
 
43
43
  end
44
44
 
45
- module SettingsMethods
45
+ module InstanceMethods
46
46
 
47
- def settings; self.class.settings; end
48
-
49
- def ssh; @ssh ||= settings.ssh.value(self); end
50
- def dump_file; @dump_file ||= settings.dump_file.value(self); end
51
- def source; @source ||= settings.source.value(self); end
52
- def target; @target ||= settings.target.value(self); end
47
+ def ssh; @ssh ||= settings[:ssh].value(self); end
48
+ def dump_file; @dump_file ||= settings[:dump_file].value(self); end
49
+ def source; @source ||= settings[:source].value(self); end
50
+ def target; @target ||= settings[:target].value(self); end
53
51
 
54
- def dump_cmds; @dump_cmds ||= settings.dump_cmds.value(self); end
55
- def restore_cmds; @restore_cmds ||= settings.restore_cmds.value(self); end
52
+ def dump_cmds; @dump_cmds ||= settings[:dump_cmds].value(self); end
53
+ def restore_cmds; @restore_cmds ||= settings[:restore_cmds].value(self); end
56
54
  def copy_dump_cmd; @copy_dump_cmd ||= Settings::CopyDumpCmd.new.value(self); end
57
55
 
56
+ def settings; self.class.settings; end
57
+
58
58
  end
59
59
 
60
60
  def dump_cmd(&block); Settings::DumpCmd.new(block).value(self); end
@@ -89,4 +89,6 @@ module Dumpdb
89
89
  def before_cmd_run(*args); end
90
90
  def after_cmd_run(*args); end
91
91
 
92
+ BadDatabaseName = Class.new(RuntimeError)
93
+
92
94
  end
@@ -1,12 +1,13 @@
1
1
  require 'dumpdb/settings'
2
2
 
3
3
  module Dumpdb
4
+
4
5
  class Runner
5
6
 
6
7
  attr_reader :script, :cmd_runner
7
8
 
8
9
  def initialize(script, opts={})
9
- @script = script
10
+ @script = script
10
11
  @cmd_runner = opts[:cmd_runner] || scmd_cmd_runner
11
12
  end
12
13
 
@@ -17,22 +18,22 @@ module Dumpdb
17
18
 
18
19
  begin
19
20
  run_callback 'after_setup'
20
- [:dump, :copy_dump, :restore].each{|phase_name| run_phase phase_name}
21
+ [:dump, :copy_dump, :restore].each{ |phase_name| run_phase phase_name }
21
22
  ensure
22
23
  run_phase 'teardown'
23
24
  run_callback 'after_run'
24
25
  end
25
26
  end
26
27
 
27
- protected
28
+ private
28
29
 
29
30
  def run_setup
30
- run_cmd(@script.dump_cmd { "mkdir -p #{source.output_dir}" })
31
- run_cmd(@script.restore_cmd { "mkdir -p #{target.output_dir}" })
31
+ run_cmd(@script.dump_cmd{ "mkdir -p #{source.output_dir}" })
32
+ run_cmd(@script.restore_cmd{ "mkdir -p #{target.output_dir}" })
32
33
  end
33
34
 
34
35
  def run_dump
35
- @script.dump_cmds.each{|cmd| run_cmd(cmd)}
36
+ @script.dump_cmds.each{ |cmd| run_cmd(cmd) }
36
37
  end
37
38
 
38
39
  def run_copy_dump
@@ -40,16 +41,14 @@ module Dumpdb
40
41
  end
41
42
 
42
43
  def run_restore
43
- @script.restore_cmds.each{|cmd| run_cmd(cmd)}
44
+ @script.restore_cmds.each{ |cmd| run_cmd(cmd) }
44
45
  end
45
46
 
46
47
  def run_teardown
47
- run_cmd(@script.dump_cmd { "rm -rf #{source.output_dir}" })
48
- run_cmd(@script.restore_cmd { "rm -rf #{target.output_dir}" })
48
+ run_cmd(@script.dump_cmd{ "rm -rf #{source.output_dir}" })
49
+ run_cmd(@script.restore_cmd{ "rm -rf #{target.output_dir}" })
49
50
  end
50
51
 
51
- private
52
-
53
52
  def run_phase(phase_name)
54
53
  run_callback "before_#{phase_name}"
55
54
  self.send("run_#{phase_name}")
@@ -73,4 +72,5 @@ module Dumpdb
73
72
  end
74
73
 
75
74
  end
75
+
76
76
  end
@@ -6,7 +6,7 @@ module Dumpdb::Settings
6
6
 
7
7
  attr_reader :proc
8
8
 
9
- def initialize(proc=nil)
9
+ def initialize(proc = nil)
10
10
  @proc = proc.kind_of?(::Proc) ? proc : Proc.new { proc }
11
11
  end
12
12
 
@@ -45,7 +45,7 @@ module Dumpdb::Settings
45
45
 
46
46
  class DumpCmd < Cmd
47
47
 
48
- def value(script, placeholder_vals={})
48
+ def value(script, placeholder_vals = {})
49
49
  val = super(script, script.source.to_hash.merge(placeholder_vals))
50
50
  if script.ssh?
51
51
  val = val.gsub("\\", "\\\\\\").gsub('"', '\"')
@@ -58,7 +58,7 @@ module Dumpdb::Settings
58
58
 
59
59
  class RestoreCmd < Cmd
60
60
 
61
- def value(script, placeholder_vals={})
61
+ def value(script, placeholder_vals = {})
62
62
  super(script, script.target.to_hash.merge(placeholder_vals))
63
63
  end
64
64
 
@@ -78,7 +78,7 @@ module Dumpdb::Settings
78
78
 
79
79
  class CmdList < ::Array
80
80
 
81
- def value(script, placeholder_vals={})
81
+ def value(script, placeholder_vals = {})
82
82
  self.map{ |cmd| cmd.value(script, placeholder_vals) }
83
83
  end
84
84
 
@@ -1,3 +1,3 @@
1
1
  module Dumpdb
2
- VERSION = "2.0.0"
2
+ VERSION = "2.1.0"
3
3
  end
@@ -10,3 +10,11 @@ require 'pry'
10
10
 
11
11
  require 'test/support/factory'
12
12
 
13
+ # 1.8.7 backfills
14
+
15
+ # Array#sample
16
+ if !(a = Array.new).respond_to?(:sample) && a.respond_to?(:choice)
17
+ class Array
18
+ alias_method :sample, :choice
19
+ end
20
+ end
@@ -41,7 +41,7 @@ class Dumpdb::Db
41
41
  :custom_value => @custom_value
42
42
  })
43
43
  end
44
- subject { @db }
44
+ subject{ @db }
45
45
 
46
46
  should have_imeths :host, :port, :user, :pw, :db
47
47
  should have_imeths :output_root, :output_dir, :dump_file
@@ -54,8 +54,10 @@ class Dumpdb::Db
54
54
  assert_equal @pw, subject.pw
55
55
  assert_equal @db_name, subject.db
56
56
  assert_equal @output_root, subject.output_root
57
+
57
58
  exp = File.join(@output_root, "#{@host}__#{@db_name}__#{@current_time.to_f}")
58
59
  assert_equal exp, subject.output_dir
60
+
59
61
  exp = File.join(subject.output_dir, @dump_file_name)
60
62
  assert_equal exp, subject.dump_file
61
63
  end
@@ -75,6 +77,7 @@ class Dumpdb::Db
75
77
  assert_equal DEFAULT_VALUE, db.db
76
78
  assert_equal DEFAULT_VALUE, db.output_root
77
79
  assert_equal @current_time.to_f.to_s, db.output_dir
80
+
78
81
  exp = File.join(db.output_dir, 'dump.output')
79
82
  assert_equal exp, db.dump_file
80
83
  end
@@ -1,15 +1,22 @@
1
1
  require 'assert'
2
+ require 'dumpdb'
3
+
2
4
  require 'test/support/fake_cmd_runner'
3
5
  require 'test/support/test_scripts'
4
6
 
5
7
  module Dumpdb
6
8
 
7
- class ScriptTests < Assert::Context
8
- desc "the main script mixin"
9
+ class UnitTests < Assert::Context
10
+ desc "Dumpdb"
11
+
12
+ end
13
+
14
+ class InitTests < UnitTests
15
+ desc "when init"
9
16
  setup do
10
- @script = LocalScript.new
17
+ @script = LocalScript.new # mixes in Dumpdb
11
18
  end
12
- subject { @script }
19
+ subject{ @script }
13
20
 
14
21
  should have_cmeths :settings
15
22
  should have_imeths :settings, :dump_cmd, :restore_cmd
@@ -26,23 +33,18 @@ module Dumpdb
26
33
  should have_imeths :before_dump, :before_copy_dump, :before_restore
27
34
  should have_imeths :after_dump, :after_copy_dump, :after_restore
28
35
 
29
- should "store its settings using ns-options" do
30
- assert_kind_of NsOptions::Namespace, subject.class.settings
31
- assert_same subject.class.settings, subject.settings
32
- end
33
-
34
36
  should "store off the settings for the script" do
35
- assert_kind_of Settings::Ssh, subject.settings.ssh
36
- assert_kind_of Settings::DumpFile, subject.settings.dump_file
37
- assert_kind_of Settings::SourceTarget, subject.settings.source
38
- assert_kind_of Settings::SourceTarget, subject.settings.target
39
- assert_kind_of Settings::CmdList, subject.settings.dump_cmds
40
- assert_kind_of Settings::CmdList, subject.settings.restore_cmds
37
+ assert_kind_of Settings::Ssh, subject.settings[:ssh]
38
+ assert_kind_of Settings::DumpFile, subject.settings[:dump_file]
39
+ assert_kind_of Settings::SourceTarget, subject.settings[:source]
40
+ assert_kind_of Settings::SourceTarget, subject.settings[:target]
41
+ assert_kind_of Settings::CmdList, subject.settings[:dump_cmds]
42
+ assert_kind_of Settings::CmdList, subject.settings[:restore_cmds]
41
43
  end
42
44
 
43
45
  end
44
46
 
45
- class CmdMethsTests < ScriptTests
47
+ class CmdMethsTests < InitTests
46
48
 
47
49
  should "build dump command strings" do
48
50
  assert_equal 'echo local', subject.dump_cmd { "echo #{type}" }
@@ -54,7 +56,7 @@ module Dumpdb
54
56
 
55
57
  end
56
58
 
57
- class SshTests < ScriptTests
59
+ class SshTests < InitTests
58
60
 
59
61
  should "know if its in ssh mode or not" do
60
62
  assert RemoteScript.new.ssh?
@@ -71,27 +73,27 @@ module Dumpdb
71
73
 
72
74
  end
73
75
 
74
- class RunTests < ScriptTests
76
+ class RunTests < InitTests
75
77
  setup do
76
- FakeCmdRunner.reset
78
+ Dumpdb::FakeCmdRunner.reset
77
79
  @script = RunnerScript.new
78
80
  end
79
81
  teardown do
80
- FakeCmdRunner.reset
82
+ Dumpdb::FakeCmdRunner.reset
81
83
  end
82
84
 
83
85
  should "run the script when `run` is called" do
84
- assert_empty FakeCmdRunner.cmds
85
- @script.run(FakeCmdRunner)
86
+ assert_empty Dumpdb::FakeCmdRunner.cmds
87
+ @script.run(Dumpdb::FakeCmdRunner)
86
88
 
87
- assert_not_empty FakeCmdRunner.cmds
88
- assert_equal 7, FakeCmdRunner.cmds.size
89
- assert_equal "a restore cmd", FakeCmdRunner.cmds[-3]
89
+ assert_not_empty Dumpdb::FakeCmdRunner.cmds
90
+ assert_equal 7, Dumpdb::FakeCmdRunner.cmds.size
91
+ assert_equal "a restore cmd", Dumpdb::FakeCmdRunner.cmds[-3]
90
92
  end
91
93
 
92
94
  end
93
95
 
94
- class InheritedTests < ScriptTests
96
+ class InheritedTests < InitTests
95
97
  desc "when inherited"
96
98
  setup do
97
99
  @a_remote_script = RemoteScript.new
@@ -1,39 +1,41 @@
1
1
  require 'assert'
2
+ require 'dumpdb/runner'
3
+
2
4
  require 'test/support/fake_cmd_runner'
3
5
  require 'test/support/test_scripts'
4
- require 'dumpdb/runner'
5
6
 
6
- module Dumpdb
7
+ class Dumpdb::Runner
7
8
 
8
- class RunnerTests < Assert::Context
9
- desc "the runner"
9
+ class UnitTests < Assert::Context
10
+ desc "Dumpdb::Runner"
10
11
  setup do
11
- FakeCmdRunner.reset
12
+ @fake_cmd_runner = Dumpdb::FakeCmdRunner
13
+ @fake_cmd_runner.reset
14
+
12
15
  @script = RunnerScript.new
13
- @runner = Runner.new(@script, :cmd_runner => FakeCmdRunner)
16
+ @runner = Dumpdb::Runner.new(@script, :cmd_runner => @fake_cmd_runner)
14
17
  end
15
18
  teardown do
16
- FakeCmdRunner.reset
19
+ @fake_cmd_runner.reset
17
20
  end
18
- subject { @runner }
19
-
21
+ subject{ @runner }
20
22
 
21
23
  should have_reader :script, :cmd_runner
22
24
 
23
25
  should "run the script" do
24
- assert_empty FakeCmdRunner.cmds
26
+ assert_empty @fake_cmd_runner.cmds
25
27
  subject.run
26
28
 
27
- assert_not_empty FakeCmdRunner.cmds
28
- assert_equal 7, FakeCmdRunner.cmds.size
29
- assert_equal "a restore cmd", FakeCmdRunner.cmds[-3]
29
+ assert_not_empty @fake_cmd_runner.cmds
30
+ assert_equal 7, @fake_cmd_runner.cmds.size
31
+ assert_equal "a restore cmd", @fake_cmd_runner.cmds[-3]
30
32
  end
31
33
 
32
34
  should "call the callbacks" do
33
- assert_not @script.all_callbacks_called?
35
+ assert_false @script.all_callbacks_called?
34
36
  subject.run
35
37
 
36
- assert @script.all_callbacks_called?
38
+ assert_true @script.all_callbacks_called?
37
39
  end
38
40
 
39
41
  end
@@ -1,189 +1,162 @@
1
1
  require 'assert'
2
- require 'test/support/test_scripts'
3
2
  require 'dumpdb/settings'
4
3
 
5
- module Dumpdb
4
+ require 'dumpdb/db'
5
+ require 'test/support/test_scripts'
6
+
7
+ module Dumpdb::Settings
6
8
 
7
- class SettingsTests < Assert::Context
8
- desc "the script settings"
9
+ class UnitTests < Assert::Context
10
+ desc "Dumpdb::Settings"
9
11
  setup do
10
- @setting = Settings::Base.new
11
12
  @script = LocalScript.new
12
13
  end
13
- subject { @setting }
14
14
 
15
- should have_imeth :value
16
- should have_reader :proc
15
+ end
17
16
 
18
- should "know its value proc" do
17
+ class BaseTests < UnitTests
18
+ desc "Base"
19
+ setup do
20
+ @setting = Base.new
21
+ end
22
+ subject{ @setting }
23
+
24
+ should have_readers :proc
25
+ should have_imeths :value
26
+
27
+ should "know its proc" do
19
28
  assert_kind_of ::Proc, subject.proc
20
29
  assert_nil subject.proc.call
21
30
  end
22
31
 
23
32
  should "instance eval its proc in the scope of a script to return a value" do
24
- setting = Settings::Base.new(Proc.new { "something: #{type}"})
33
+ setting = Base.new(Proc.new{ "something: #{type}" })
25
34
 
26
- assert_equal "local", @script.type
35
+ assert_equal "local", @script.type
27
36
  assert_equal "something: local", setting.value(@script)
28
37
  end
29
38
 
30
39
  end
31
40
 
32
- class SshSettingTests < SettingsTests
33
- desc "`ssh` setting"
41
+ class SshTests < UnitTests
42
+ desc "Ssh"
34
43
 
35
- should "be available" do
36
- assert Settings::Ssh
44
+ should "be a Base setting" do
45
+ assert_true Ssh < Base
37
46
  end
38
47
 
39
48
  end
40
49
 
41
- class DumpFileSettingTests < SettingsTests
42
- desc "`dump_file` setting"
50
+ class DumpFileTests < UnitTests
51
+ desc "DumpFile"
43
52
 
44
- should "be available" do
45
- assert Settings::DumpFile
53
+ should "be a Base setting" do
54
+ assert_true DumpFile < Base
46
55
  end
47
56
 
48
57
  end
49
58
 
50
- class SourceTargetSettingTests < SettingsTests
51
- desc "`source` or `target` setting"
52
- setup do
53
- @from_hash = {'host' => 'from_hash'}
54
- end
59
+ class SourceTargetTests < UnitTests
60
+ desc "SourceTarget"
55
61
 
56
- should "be available" do
57
- assert Settings::SourceTarget
62
+ should "be a Base setting" do
63
+ assert_true SourceTarget < Base
58
64
  end
59
65
 
60
- should "come from a hash" do
61
- db = Settings::SourceTarget.new(@from_hash).value(@script)
66
+ should "have a Db value built from a hash" do
67
+ from_hash = { 'host' => 'from_hash' }
68
+ db = SourceTarget.new(from_hash).value(@script)
62
69
 
63
- assert_kind_of Db, db
70
+ assert_kind_of Dumpdb::Db, db
64
71
  assert_equal 'from_hash', db.host
65
72
  end
66
73
 
67
74
  end
68
75
 
69
- class CmdTests < SettingsTests
70
- desc "command helper class"
71
- setup do
72
- @cmd_str = Proc.new { "this is the #{type} db: :db" }
73
- end
76
+ class CmdTests < UnitTests
77
+ desc "Cmd"
74
78
 
75
- should "be available" do
76
- assert Settings::Cmd
79
+ should "be a Base setting" do
80
+ assert_true Cmd < Base
77
81
  end
78
82
 
79
83
  should "eval and apply any placeholders to the cmd string" do
80
- cmd_val = Settings::Cmd.new(@cmd_str).value(@script, @script.source.to_hash)
84
+ cmd_str = Proc.new{ "this is the #{type} db: :db" }
85
+ cmd_val = Cmd.new(cmd_str).value(@script, @script.source.to_hash)
81
86
  assert_equal "this is the local db: devdb", cmd_val
82
87
  end
83
88
 
84
89
  end
85
90
 
86
- class DumpCmdTests < CmdTests
87
- desc "for dump commands"
91
+ class DumpCmdTests < UnitTests
92
+ desc "DumpCmd"
93
+
94
+ should "be a Cmd setting" do
95
+ assert_true DumpCmd < Cmd
96
+ end
88
97
 
89
98
  should "eval and apply any source placeholders to the cmd string" do
90
- cmd_val = Settings::DumpCmd.new(@cmd_str).value(@script)
99
+ cmd_str = Proc.new{ "this is the #{type} db: :db" }
100
+ cmd_val = DumpCmd.new(cmd_str).value(@script)
91
101
  assert_equal "this is the local db: devdb", cmd_val
92
102
  end
93
103
 
94
104
  should "not escape any double-quotes in the cmds" do
95
- orig_cmd = "do_something --value=\"a_val\""
96
- cmd_val = Settings::DumpCmd.new(Proc.new { orig_cmd }).value(@script)
97
-
105
+ orig_cmd = "do_something --value=\"a_val\""
106
+ cmd_val = DumpCmd.new(Proc.new{ orig_cmd }).value(@script)
98
107
  assert_equal orig_cmd, cmd_val
99
108
  end
100
109
 
101
110
  should "not escape any backslashes in the cmds" do
102
- orig_cmd = "do \\something"
103
- cmd_val = Settings::DumpCmd.new(Proc.new { orig_cmd }).value(@script)
104
-
111
+ orig_cmd = "do \\something"
112
+ cmd_val = DumpCmd.new(Proc.new{ orig_cmd }).value(@script)
105
113
  assert_equal orig_cmd, cmd_val
106
114
  end
107
115
 
108
116
  end
109
117
 
110
- class RemoteDumpCmdTests < DumpCmdTests
111
- desc "using ssh"
112
- setup do
113
- @script = RemoteScript.new
114
- @cmd_str = Proc.new { "echo hello" }
115
- end
116
-
117
- should "build the cmds to run remtoely using ssh" do
118
- exp_cmd_str = "ssh -A #{@script.ssh_opts} #{@script.ssh} \"echo hello\""
119
- cmd_val = Settings::DumpCmd.new(@cmd_str).value(@script)
120
-
121
- assert_equal exp_cmd_str, cmd_val
122
- end
123
-
124
- should "escape any double-quotes in the cmds" do
125
- orig_cmd = "do_something --value=\"a_val\""
126
- exp_esc_cmd = "do_something --value=\\\"a_val\\\""
127
- exp_cmd_str = "ssh -A #{@script.ssh_opts} #{@script.ssh} \"#{exp_esc_cmd}\""
128
- cmd_val = Settings::DumpCmd.new(Proc.new { orig_cmd }).value(@script)
129
-
130
- assert_equal exp_cmd_str, cmd_val
131
- end
132
-
133
- should "escape any backslashes in the cmds" do
134
- orig_cmd = "do \\something"
135
- exp_esc_cmd = "do \\\\something"
136
- exp_cmd_str = "ssh -A #{@script.ssh_opts} #{@script.ssh} \"#{exp_esc_cmd}\""
137
- cmd_val = Settings::DumpCmd.new(Proc.new { orig_cmd }).value(@script)
138
-
139
- assert_equal exp_cmd_str, cmd_val
140
- end
141
-
142
- should "escape any backslashes before double-quotes in the cmds" do
143
- orig_cmd = "do \\something --value=\"a_val\""
144
- exp_esc_cmd = "do \\\\something --value=\\\"a_val\\\""
145
- exp_cmd_str = "ssh -A #{@script.ssh_opts} #{@script.ssh} \"#{exp_esc_cmd}\""
146
- cmd_val = Settings::DumpCmd.new(Proc.new { orig_cmd }).value(@script)
118
+ class RestoreCmdTests < UnitTests
119
+ desc "RestoreCmd"
147
120
 
148
- assert_equal exp_cmd_str, cmd_val
121
+ should "be a Cmd setting" do
122
+ assert_true RestoreCmd < Cmd
149
123
  end
150
124
 
151
- end
152
-
153
- class RestoreCmdTests < CmdTests
154
- desc "for restore commands"
155
-
156
125
  should "eval and apply any target placeholders to the cmd string" do
157
- cmd_val = Settings::RestoreCmd.new(@cmd_str).value(@script)
126
+ cmd_str = Proc.new{ "this is the #{type} db: :db" }
127
+ cmd_val = RestoreCmd.new(cmd_str).value(@script)
158
128
  assert_equal "this is the local db: testdb", cmd_val
159
129
  end
160
130
 
161
131
  end
162
132
 
163
- class CopyDumpCmdTests < CmdTests
133
+ class CopyDumpCmdTests < UnitTests
134
+ desc "CopyDumpCmd"
164
135
 
165
- should "be a copy cmd for non-ssh scripts" do
166
- script = @script
167
- exp_cmd = "cp #{script.source.dump_file} #{script.target.dump_file}"
136
+ should "be a Cmd setting" do
137
+ assert_true CopyDumpCmd < Cmd
138
+ end
168
139
 
169
- assert_equal exp_cmd, script.copy_dump_cmd
140
+ should "be a copy cmd for non-ssh scripts" do
141
+ exp = "cp #{@script.source.dump_file} #{@script.target.dump_file}"
142
+ assert_equal exp, @script.copy_dump_cmd
170
143
  end
171
144
 
172
145
  should "be an sftp cmd for ssh scripts" do
173
146
  script = RemoteScript.new
174
- exp_cmd = "sftp #{script.ssh_opts} #{script.ssh}:#{script.source.dump_file} #{script.target.dump_file}"
175
-
176
- assert_equal exp_cmd, script.copy_dump_cmd
147
+ exp = "sftp #{script.ssh_opts} #{script.ssh}:#{script.source.dump_file} " \
148
+ "#{script.target.dump_file}"
149
+ assert_equal exp, script.copy_dump_cmd
177
150
  end
178
151
 
179
152
  end
180
153
 
181
- class CmdListTests < SettingsTests
182
- desc "command list helper class"
154
+ class CmdListTests < UnitTests
155
+ desc "CmdList"
183
156
  setup do
184
157
  @cmds = [
185
- Settings::Cmd.new(Proc.new { "this is the #{type} target db: :db" }),
186
- Settings::Cmd.new(Proc.new { "this is the #{type} target host: :host" })
158
+ Cmd.new(Proc.new{ "this is the #{type} target db: :db" }),
159
+ Cmd.new(Proc.new{ "this is the #{type} target host: :host" })
187
160
  ]
188
161
  @exp_val_cmds = [
189
162
  "this is the local target db: testdb",
@@ -192,15 +165,52 @@ module Dumpdb
192
165
  end
193
166
 
194
167
  should "be an Array" do
195
- assert_kind_of ::Array, Settings::CmdList.new
168
+ assert_kind_of ::Array, CmdList.new
196
169
  end
197
170
 
198
171
  should "return the commands, eval'd and placeholders applied" do
199
- val_cmds = Settings::CmdList.new(@cmds).value(@script, @script.target.to_hash)
172
+ val_cmds = CmdList.new(@cmds).value(@script, @script.target.to_hash)
200
173
  assert_equal @exp_val_cmds, val_cmds
201
174
  end
202
175
 
203
176
  end
204
177
 
178
+ class RemoteDumpCmdTests < UnitTests
179
+ desc "using ssh"
180
+ setup do
181
+ @script = RemoteScript.new
182
+ @cmd_str = Proc.new{ "echo hello" }
183
+ end
184
+
185
+ should "build the cmds to run remotely using ssh" do
186
+ exp = "ssh -A #{@script.ssh_opts} #{@script.ssh} \"echo hello\""
187
+ assert_equal exp, DumpCmd.new(@cmd_str).value(@script)
188
+ end
189
+
190
+ should "escape any double-quotes in the cmds" do
191
+ orig_cmd = "do_something --value=\"a_val\""
192
+ exp_esc_cmd = "do_something --value=\\\"a_val\\\""
193
+
194
+ exp = "ssh -A #{@script.ssh_opts} #{@script.ssh} \"#{exp_esc_cmd}\""
195
+ assert_equal exp, DumpCmd.new(Proc.new{ orig_cmd }).value(@script)
196
+ end
197
+
198
+ should "escape any backslashes in the cmds" do
199
+ orig_cmd = "do \\something"
200
+ exp_esc_cmd = "do \\\\something"
201
+
202
+ exp = "ssh -A #{@script.ssh_opts} #{@script.ssh} \"#{exp_esc_cmd}\""
203
+ assert_equal exp, DumpCmd.new(Proc.new{ orig_cmd }).value(@script)
204
+ end
205
+
206
+ should "escape any backslashes before double-quotes in the cmds" do
207
+ orig_cmd = "do \\something --value=\"a_val\""
208
+ exp_esc_cmd = "do \\\\something --value=\\\"a_val\\\""
209
+
210
+ exp = "ssh -A #{@script.ssh_opts} #{@script.ssh} \"#{exp_esc_cmd}\""
211
+ assert_equal exp, DumpCmd.new(Proc.new{ orig_cmd }).value(@script)
212
+ end
213
+
214
+ end
205
215
 
206
216
  end
metadata CHANGED
@@ -1,13 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dumpdb
3
3
  version: !ruby/object:Gem::Version
4
- hash: 15
5
- prerelease:
6
- segments:
7
- - 2
8
- - 0
9
- - 0
10
- version: 2.0.0
4
+ version: 2.1.0
11
5
  platform: ruby
12
6
  authors:
13
7
  - Kelly Redding
@@ -16,61 +10,38 @@ autorequire:
16
10
  bindir: bin
17
11
  cert_chain: []
18
12
 
19
- date: 2015-12-09 00:00:00 Z
13
+ date: 2016-06-14 00:00:00 Z
20
14
  dependencies:
21
15
  - !ruby/object:Gem::Dependency
16
+ name: assert
17
+ prerelease: false
22
18
  requirement: &id001 !ruby/object:Gem::Requirement
23
- none: false
24
19
  requirements:
25
20
  - - ~>
26
21
  - !ruby/object:Gem::Version
27
- hash: 29
28
- segments:
29
- - 2
30
- - 15
31
- version: "2.15"
22
+ version: 2.16.1
32
23
  type: :development
33
- name: assert
34
24
  version_requirements: *id001
35
- prerelease: false
36
25
  - !ruby/object:Gem::Dependency
26
+ name: much-plugin
27
+ prerelease: false
37
28
  requirement: &id002 !ruby/object:Gem::Requirement
38
- none: false
39
29
  requirements:
40
30
  - - ~>
41
31
  - !ruby/object:Gem::Version
42
- hash: 7
43
- segments:
44
- - 3
45
- - 0
46
- version: "3.0"
32
+ version: 0.2.0
47
33
  type: :runtime
48
- name: scmd
49
34
  version_requirements: *id002
50
- prerelease: false
51
35
  - !ruby/object:Gem::Dependency
36
+ name: scmd
37
+ prerelease: false
52
38
  requirement: &id003 !ruby/object:Gem::Requirement
53
- none: false
54
39
  requirements:
55
40
  - - ~>
56
41
  - !ruby/object:Gem::Version
57
- hash: 13
58
- segments:
59
- - 1
60
- - 1
61
- version: "1.1"
62
- - - ">="
63
- - !ruby/object:Gem::Version
64
- hash: 17
65
- segments:
66
- - 1
67
- - 1
68
- - 1
69
- version: 1.1.1
42
+ version: 3.0.2
70
43
  type: :runtime
71
- name: ns-options
72
44
  version_requirements: *id003
73
- prerelease: false
74
45
  description: Dump and restore your databases.
75
46
  email:
76
47
  - kelly@kellyredding.com
@@ -86,7 +57,6 @@ files:
86
57
  - Gemfile
87
58
  - LICENSE
88
59
  - README.md
89
- - Rakefile
90
60
  - dumpdb.gemspec
91
61
  - lib/dumpdb.rb
92
62
  - lib/dumpdb/db.rb
@@ -99,12 +69,14 @@ files:
99
69
  - test/support/fake_cmd_runner.rb
100
70
  - test/support/test_scripts.rb
101
71
  - test/unit/db_tests.rb
72
+ - test/unit/dumpdb_tests.rb
102
73
  - test/unit/runner_tests.rb
103
- - test/unit/script_tests.rb
104
74
  - test/unit/settings_tests.rb
105
75
  - tmp/.gitkeep
106
76
  homepage: http://github.com/redding/dumpdb
107
- licenses: []
77
+ licenses:
78
+ - MIT
79
+ metadata: {}
108
80
 
109
81
  post_install_message:
110
82
  rdoc_options: []
@@ -112,29 +84,20 @@ rdoc_options: []
112
84
  require_paths:
113
85
  - lib
114
86
  required_ruby_version: !ruby/object:Gem::Requirement
115
- none: false
116
87
  requirements:
117
- - - ">="
88
+ - &id004
89
+ - ">="
118
90
  - !ruby/object:Gem::Version
119
- hash: 3
120
- segments:
121
- - 0
122
91
  version: "0"
123
92
  required_rubygems_version: !ruby/object:Gem::Requirement
124
- none: false
125
93
  requirements:
126
- - - ">="
127
- - !ruby/object:Gem::Version
128
- hash: 3
129
- segments:
130
- - 0
131
- version: "0"
94
+ - *id004
132
95
  requirements: []
133
96
 
134
97
  rubyforge_project:
135
- rubygems_version: 1.8.25
98
+ rubygems_version: 2.6.4
136
99
  signing_key:
137
- specification_version: 3
100
+ specification_version: 4
138
101
  summary: Dump and restore your databases.
139
102
  test_files:
140
103
  - test/helper.rb
@@ -142,6 +105,6 @@ test_files:
142
105
  - test/support/fake_cmd_runner.rb
143
106
  - test/support/test_scripts.rb
144
107
  - test/unit/db_tests.rb
108
+ - test/unit/dumpdb_tests.rb
145
109
  - test/unit/runner_tests.rb
146
- - test/unit/script_tests.rb
147
110
  - test/unit/settings_tests.rb
data/Rakefile DELETED
@@ -1 +0,0 @@
1
- require "bundler/gem_tasks"