dumpdb 2.0.0 → 2.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.
@@ -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"