dk 0.0.1 → 0.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.
Files changed (51) hide show
  1. checksums.yaml +5 -5
  2. data/README.md +643 -1
  3. data/bin/dk +7 -0
  4. data/dk.gemspec +7 -3
  5. data/lib/dk/ansi.rb +98 -0
  6. data/lib/dk/cli.rb +173 -0
  7. data/lib/dk/config.rb +217 -0
  8. data/lib/dk/config_runner.rb +24 -0
  9. data/lib/dk/dk_runner.rb +13 -0
  10. data/lib/dk/dry_runner.rb +43 -0
  11. data/lib/dk/has_set_param.rb +42 -0
  12. data/lib/dk/has_ssh_opts.rb +36 -0
  13. data/lib/dk/has_the_runs.rb +23 -0
  14. data/lib/dk/has_the_stubs.rb +116 -0
  15. data/lib/dk/local.rb +84 -0
  16. data/lib/dk/null_logger.rb +13 -0
  17. data/lib/dk/remote.rb +132 -0
  18. data/lib/dk/runner.rb +202 -0
  19. data/lib/dk/task.rb +266 -0
  20. data/lib/dk/task_run.rb +17 -0
  21. data/lib/dk/test_runner.rb +54 -0
  22. data/lib/dk/tree_runner.rb +64 -0
  23. data/lib/dk/version.rb +1 -1
  24. data/lib/dk.rb +23 -1
  25. data/test/helper.rb +6 -1
  26. data/test/support/config/dk.rb +7 -0
  27. data/test/support/config/task_defs.rb +10 -0
  28. data/test/support/factory.rb +38 -0
  29. data/test/support/log/.gitkeep +0 -0
  30. data/test/system/has_the_stubs_tests.rb +355 -0
  31. data/test/system/runner_tests.rb +222 -0
  32. data/test/unit/ansi_tests.rb +40 -0
  33. data/test/unit/cli_tests.rb +317 -0
  34. data/test/unit/config_runner_tests.rb +60 -0
  35. data/test/unit/config_tests.rb +427 -0
  36. data/test/unit/dk_runner_tests.rb +34 -0
  37. data/test/unit/dk_tests.rb +49 -0
  38. data/test/unit/dry_runner_tests.rb +71 -0
  39. data/test/unit/has_set_param_tests.rb +46 -0
  40. data/test/unit/has_ssh_opts_tests.rb +81 -0
  41. data/test/unit/has_the_runs_tests.rb +37 -0
  42. data/test/unit/has_the_stubs_tests.rb +279 -0
  43. data/test/unit/local_tests.rb +174 -0
  44. data/test/unit/null_logger_tests.rb +17 -0
  45. data/test/unit/remote_tests.rb +330 -0
  46. data/test/unit/runner_tests.rb +398 -0
  47. data/test/unit/task_run_tests.rb +40 -0
  48. data/test/unit/task_tests.rb +943 -0
  49. data/test/unit/test_runner_tests.rb +189 -0
  50. data/test/unit/tree_runner_tests.rb +152 -0
  51. metadata +106 -9
@@ -0,0 +1,189 @@
1
+ require 'assert'
2
+ require 'dk/test_runner'
3
+
4
+ require 'dk/has_the_runs'
5
+ require 'dk/runner'
6
+ require 'dk/task'
7
+ require 'dk/task_run'
8
+
9
+ class Dk::TestRunner
10
+
11
+ class UnitTests < Assert::Context
12
+ desc "Dk::TestRunner"
13
+ setup do
14
+ @runner_class = Dk::TestRunner
15
+ end
16
+ subject{ @runner_class }
17
+
18
+ should "be a Dk::Runner" do
19
+ assert_true subject < Dk::Runner
20
+ end
21
+
22
+ should "have the runs" do
23
+ assert_includes Dk::HasTheRuns, subject
24
+ end
25
+
26
+ should "have the stubs" do
27
+ assert_includes Dk::HasTheStubs, subject
28
+ end
29
+
30
+ end
31
+
32
+ class InitTests < UnitTests
33
+ desc "when init"
34
+ setup do
35
+ @runner = @runner_class.new
36
+ @runner.task_class = TestTask
37
+ end
38
+ subject{ @runner }
39
+
40
+ should have_accessors :task_class
41
+ should have_imeths :task
42
+
43
+ should "know how to build a task of its task class" do
44
+ params = { Factory.string => Factory.string }
45
+ task = subject.task(params)
46
+
47
+ assert_instance_of subject.task_class, task
48
+ assert_equal params, task.instance_eval{ params }
49
+ end
50
+
51
+ end
52
+
53
+ class RunTests < InitTests
54
+ desc "and run"
55
+ setup do
56
+ @params = { Factory.string => Factory.string }
57
+ @task = @runner.run(@params)
58
+ end
59
+ subject{ @task }
60
+
61
+ should "run the task with any given params" do
62
+ assert_true subject.run_called
63
+ assert_equal @params, subject.run_params
64
+ end
65
+
66
+ should "capture any sub-tasks or local/remote cmd spies that were run" do
67
+ assert_equal 5, @runner.runs.size
68
+
69
+ st, lc, lcb, rc, rcb = @runner.runs
70
+
71
+ assert_instance_of Dk::TaskRun, st
72
+ assert_instance_of Dk::Local::CmdSpy, lc
73
+ assert_instance_of Dk::Local::CmdSpy, lcb
74
+ assert_instance_of Dk::Remote::CmdSpy, rc
75
+ assert_instance_of Dk::Remote::CmdSpy, rcb
76
+
77
+ assert_same st, subject.sub_task
78
+ assert_equal TestTask::SubTask, st.task_class
79
+ assert_equal subject.sub_task_params, st.params
80
+ assert_equal [], st.runs
81
+
82
+ assert_same lc, subject.local_cmd
83
+ assert_equal subject.local_cmd_str, lc.cmd_str
84
+ assert_equal subject.local_cmd_opts, lc.cmd_opts
85
+ assert_equal subject.local_cmd_input, lc.run_input
86
+ assert_true lc.run_called?
87
+
88
+ assert_same lcb, subject.local_cmd_bang
89
+ assert_equal subject.local_cmd_str, lcb.cmd_str
90
+ assert_equal subject.local_cmd_opts, lcb.cmd_opts
91
+ assert_equal subject.local_cmd_input, lcb.run_input
92
+ assert_true lcb.run_called?
93
+
94
+ assert_same rc, subject.remote_cmd
95
+ assert_equal subject.remote_cmd_str, rc.cmd_str
96
+ assert_equal subject.remote_cmd_opts, rc.cmd_opts
97
+ assert_equal subject.remote_cmd_input, rc.run_input
98
+ assert_true rc.run_called?
99
+
100
+ assert_same rcb, subject.remote_cmd_bang
101
+ assert_equal subject.remote_cmd_str, rcb.cmd_str
102
+ assert_equal subject.remote_cmd_opts, rcb.cmd_opts
103
+ assert_equal subject.remote_cmd_input, rcb.run_input
104
+ assert_true rcb.run_called?
105
+ end
106
+
107
+ end
108
+
109
+ module TaskCmdMethods
110
+
111
+ def local_cmd_str
112
+ @local_cmd_str ||= Factory.string
113
+ end
114
+
115
+ def local_cmd_input
116
+ @local_cmd_input ||= Factory.string
117
+ end
118
+
119
+ def local_cmd_opts
120
+ @local_cmd_opts ||= { Factory.string => Factory.string }
121
+ end
122
+
123
+ def remote_cmd_str
124
+ @remote_cmd_str ||= Factory.string
125
+ end
126
+
127
+ def remote_cmd_input
128
+ @remote_cmd_input ||= Factory.string
129
+ end
130
+
131
+ def remote_cmd_opts
132
+ @remote_cmd_opts ||= {
133
+ Factory.string => Factory.string,
134
+ :hosts => Factory.hosts,
135
+ :ssh_args => Factory.string,
136
+ :host_ssh_args => { Factory.string => Factory.string }
137
+ }
138
+ end
139
+
140
+ end
141
+
142
+ class TestTask
143
+ include Dk::Task
144
+ include TaskCmdMethods
145
+
146
+ attr_reader :run_called, :run_params
147
+ attr_reader :sub_task
148
+ attr_reader :local_cmd, :local_cmd_bang
149
+ attr_reader :remote_cmd, :remote_cmd_bang
150
+ attr_reader :scmd_test_mode_run_value
151
+
152
+ def sub_task_params
153
+ @sub_task_params ||= { Factory.string => Factory.string }
154
+ end
155
+
156
+ def run!
157
+ @run_called = true
158
+ @run_params = params
159
+
160
+ @sub_task = run_task(SubTask, self.sub_task_params)
161
+ @local_cmd = cmd(self.local_cmd_str, self.local_cmd_input, self.local_cmd_opts)
162
+ @local_cmd_bang = cmd!(self.local_cmd_str, self.local_cmd_input, self.local_cmd_opts)
163
+ @remote_cmd = ssh(self.remote_cmd_str, self.remote_cmd_input, self.remote_cmd_opts)
164
+ @remote_cmd_bang = ssh!(self.remote_cmd_str, self.remote_cmd_input, self.remote_cmd_opts)
165
+ end
166
+
167
+ class SubTask
168
+ include Dk::Task
169
+
170
+ attr_reader :run_called, :run_params
171
+
172
+ def run!
173
+ @run_called = true
174
+ @run_params = params
175
+ run_task(SubSubTask)
176
+ end
177
+ end
178
+
179
+ class SubSubTask
180
+ include Dk::Task
181
+
182
+ def run!
183
+ # no-op
184
+ end
185
+ end
186
+
187
+ end
188
+
189
+ end
@@ -0,0 +1,152 @@
1
+ require 'assert'
2
+ require 'dk/tree_runner'
3
+
4
+ require 'stringio'
5
+ require 'dk/config'
6
+ require 'dk/dry_runner'
7
+ require 'dk/has_the_runs'
8
+ require 'dk/null_logger'
9
+ require 'dk/task'
10
+ require 'dk/task_run'
11
+
12
+ class Dk::TreeRunner
13
+
14
+ class UnitTests < Assert::Context
15
+ desc "Dk::TreeRunner"
16
+ setup do
17
+ @runner_class = Dk::TreeRunner
18
+ end
19
+ subject{ @runner_class }
20
+
21
+ should "be a Dk::DryRunner" do
22
+ assert_true subject < Dk::DryRunner
23
+ end
24
+
25
+ should "have the runs" do
26
+ assert_includes Dk::HasTheRuns, subject
27
+ end
28
+
29
+ should "know its output level prefix/bullet" do
30
+ assert_equal ' ', subject::LEVEL_PREFIX
31
+ assert_equal '|-- ', subject::LEVEL_BULLET
32
+ end
33
+
34
+ end
35
+
36
+ class InitTests < UnitTests
37
+ desc "when init"
38
+ setup do
39
+ @kernal_puts_output = ""
40
+ config = Dk::Config.new
41
+ @runner = @runner_class.new(config, StringIO.new(@kernal_puts_output))
42
+ end
43
+ subject{ @runner }
44
+
45
+ should "force a null logger to disable logging" do
46
+ assert_instance_of Dk::NullLogger, subject.logger
47
+ end
48
+
49
+ end
50
+
51
+ class RunTests < InitTests
52
+ desc "and run"
53
+ setup do
54
+ @params = { Factory.string => Factory.string }
55
+ @task = @runner.run(TestTask, @params)
56
+ end
57
+ subject{ @task }
58
+
59
+ should "run the task with any given params and run any sub-tasks" do
60
+ assert_true subject.run_called
61
+ assert_equal @params, subject.run_params
62
+
63
+ sub_task = subject.sub_task
64
+ assert_instance_of TestTask::SubTask, sub_task
65
+ assert_true sub_task.run_called
66
+ assert_equal subject.sub_task_params, sub_task.run_params
67
+
68
+ sub_sub_task = sub_task.sub_task
69
+ assert_instance_of TestTask::SubSubTask, sub_sub_task
70
+ assert_true sub_sub_task.run_called
71
+ assert_equal sub_task.sub_task_params, sub_sub_task.run_params
72
+ end
73
+
74
+ should "capture any sub-tasks that were run" do
75
+ assert_equal 1, @runner.runs.size
76
+
77
+ task_run = @runner.runs.first
78
+ assert_equal TestTask, task_run.task_class
79
+ assert_equal @params, task_run.params
80
+
81
+ assert_equal 1, task_run.runs.size
82
+
83
+ sub_task_run = task_run.runs.first
84
+ assert_equal TestTask::SubTask, sub_task_run.task_class
85
+ assert_equal subject.sub_task_params, sub_task_run.params
86
+
87
+ assert_equal 1, sub_task_run.runs.size
88
+
89
+ sub_sub_task_run = sub_task_run.runs.first
90
+ assert_equal TestTask::SubSubTask, sub_sub_task_run.task_class
91
+ assert_equal subject.sub_task.sub_task_params, sub_sub_task_run.params
92
+ end
93
+
94
+ should "output some info describing the tree of tasks that were run" do
95
+ exp = " 1) Dk::TreeRunner::TestTask\n" \
96
+ " |-- Dk::TreeRunner::TestTask::SubTask\n" \
97
+ " |-- Dk::TreeRunner::TestTask::SubSubTask\n"
98
+ assert_equal exp, @kernal_puts_output
99
+
100
+ @runner.run(TestTask, @params)
101
+
102
+ exp += " 2) Dk::TreeRunner::TestTask\n" \
103
+ " |-- Dk::TreeRunner::TestTask::SubTask\n" \
104
+ " |-- Dk::TreeRunner::TestTask::SubSubTask\n"
105
+ assert_equal exp, @kernal_puts_output
106
+ end
107
+
108
+ end
109
+
110
+ class TestTask
111
+ include Dk::Task
112
+
113
+ attr_reader :run_called, :run_params
114
+ attr_reader :sub_task_params, :sub_task
115
+
116
+ def run!
117
+ @run_called = true
118
+ @run_params = params
119
+
120
+ @sub_task_params = { Factory.string => Factory.string }
121
+ @sub_task = run_task(SubTask, @sub_task_params)
122
+ end
123
+
124
+ class SubTask
125
+ include Dk::Task
126
+
127
+ attr_reader :run_called, :run_params
128
+ attr_reader :sub_task_params, :sub_task
129
+
130
+ def run!
131
+ @run_called = true
132
+ @run_params = params
133
+
134
+ @sub_task_params = { Factory.string => Factory.string }
135
+ @sub_task = run_task(SubSubTask, @sub_task_params)
136
+ end
137
+ end
138
+
139
+ class SubSubTask
140
+ include Dk::Task
141
+
142
+ attr_reader :run_called, :run_params
143
+
144
+ def run!
145
+ @run_called = true
146
+ @run_params = params
147
+ end
148
+ end
149
+
150
+ end
151
+
152
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dk
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kelly Redding
@@ -10,7 +10,7 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2016-06-21 00:00:00 Z
13
+ date: 2016-08-16 00:00:00 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: assert
@@ -19,15 +19,45 @@ dependencies:
19
19
  requirements:
20
20
  - - ~>
21
21
  - !ruby/object:Gem::Version
22
- version: 2.16.1
22
+ version: 2.16.3
23
23
  type: :development
24
24
  version_requirements: *id001
25
- description: "\"Why'd you name this repo DK?\" \"Don't know\" (this is some automated task runner thingy ala cap/rake)"
25
+ - !ruby/object:Gem::Dependency
26
+ name: much-plugin
27
+ prerelease: false
28
+ requirement: &id002 !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - ~>
31
+ - !ruby/object:Gem::Version
32
+ version: 0.2.0
33
+ type: :runtime
34
+ version_requirements: *id002
35
+ - !ruby/object:Gem::Dependency
36
+ name: scmd
37
+ prerelease: false
38
+ requirement: &id003 !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - ~>
41
+ - !ruby/object:Gem::Version
42
+ version: 3.0.3
43
+ type: :runtime
44
+ version_requirements: *id003
45
+ - !ruby/object:Gem::Dependency
46
+ name: logsly
47
+ prerelease: false
48
+ requirement: &id004 !ruby/object:Gem::Requirement
49
+ requirements:
50
+ - - ~>
51
+ - !ruby/object:Gem::Version
52
+ version: 1.3.2
53
+ type: :runtime
54
+ version_requirements: *id004
55
+ description: "\"Why'd you name this repo dk?\" \"Don't know\" (this is some automated task runner thingy ala cap/rake)"
26
56
  email:
27
57
  - kelly@kellyredding.com
28
58
  - collin.redding@me.com
29
- executables: []
30
-
59
+ executables:
60
+ - dk
31
61
  extensions: []
32
62
 
33
63
  extra_rdoc_files: []
@@ -37,12 +67,55 @@ files:
37
67
  - Gemfile
38
68
  - LICENSE
39
69
  - README.md
70
+ - bin/dk
40
71
  - dk.gemspec
41
72
  - lib/dk.rb
73
+ - lib/dk/ansi.rb
74
+ - lib/dk/cli.rb
75
+ - lib/dk/config.rb
76
+ - lib/dk/config_runner.rb
77
+ - lib/dk/dk_runner.rb
78
+ - lib/dk/dry_runner.rb
79
+ - lib/dk/has_set_param.rb
80
+ - lib/dk/has_ssh_opts.rb
81
+ - lib/dk/has_the_runs.rb
82
+ - lib/dk/has_the_stubs.rb
83
+ - lib/dk/local.rb
84
+ - lib/dk/null_logger.rb
85
+ - lib/dk/remote.rb
86
+ - lib/dk/runner.rb
87
+ - lib/dk/task.rb
88
+ - lib/dk/task_run.rb
89
+ - lib/dk/test_runner.rb
90
+ - lib/dk/tree_runner.rb
42
91
  - lib/dk/version.rb
43
92
  - log/.gitkeep
44
93
  - test/helper.rb
94
+ - test/support/config/dk.rb
95
+ - test/support/config/task_defs.rb
45
96
  - test/support/factory.rb
97
+ - test/support/log/.gitkeep
98
+ - test/system/has_the_stubs_tests.rb
99
+ - test/system/runner_tests.rb
100
+ - test/unit/ansi_tests.rb
101
+ - test/unit/cli_tests.rb
102
+ - test/unit/config_runner_tests.rb
103
+ - test/unit/config_tests.rb
104
+ - test/unit/dk_runner_tests.rb
105
+ - test/unit/dk_tests.rb
106
+ - test/unit/dry_runner_tests.rb
107
+ - test/unit/has_set_param_tests.rb
108
+ - test/unit/has_ssh_opts_tests.rb
109
+ - test/unit/has_the_runs_tests.rb
110
+ - test/unit/has_the_stubs_tests.rb
111
+ - test/unit/local_tests.rb
112
+ - test/unit/null_logger_tests.rb
113
+ - test/unit/remote_tests.rb
114
+ - test/unit/runner_tests.rb
115
+ - test/unit/task_run_tests.rb
116
+ - test/unit/task_tests.rb
117
+ - test/unit/test_runner_tests.rb
118
+ - test/unit/tree_runner_tests.rb
46
119
  - tmp/.gitkeep
47
120
  homepage: https://github.com/redding/dk
48
121
  licenses:
@@ -56,20 +129,44 @@ require_paths:
56
129
  - lib
57
130
  required_ruby_version: !ruby/object:Gem::Requirement
58
131
  requirements:
59
- - &id002
132
+ - &id005
60
133
  - ">="
61
134
  - !ruby/object:Gem::Version
62
135
  version: "0"
63
136
  required_rubygems_version: !ruby/object:Gem::Requirement
64
137
  requirements:
65
- - *id002
138
+ - *id005
66
139
  requirements: []
67
140
 
68
141
  rubyforge_project:
69
142
  rubygems_version: 2.6.4
70
143
  signing_key:
71
144
  specification_version: 4
72
- summary: "\"Why'd you name this repo DK?\" \"Don't know\" (this is some automated task runner thingy ala cap/rake)"
145
+ summary: "\"Why'd you name this repo dk?\" \"Don't know\" (this is some automated task runner thingy ala cap/rake)"
73
146
  test_files:
74
147
  - test/helper.rb
148
+ - test/support/config/dk.rb
149
+ - test/support/config/task_defs.rb
75
150
  - test/support/factory.rb
151
+ - test/support/log/.gitkeep
152
+ - test/system/has_the_stubs_tests.rb
153
+ - test/system/runner_tests.rb
154
+ - test/unit/ansi_tests.rb
155
+ - test/unit/cli_tests.rb
156
+ - test/unit/config_runner_tests.rb
157
+ - test/unit/config_tests.rb
158
+ - test/unit/dk_runner_tests.rb
159
+ - test/unit/dk_tests.rb
160
+ - test/unit/dry_runner_tests.rb
161
+ - test/unit/has_set_param_tests.rb
162
+ - test/unit/has_ssh_opts_tests.rb
163
+ - test/unit/has_the_runs_tests.rb
164
+ - test/unit/has_the_stubs_tests.rb
165
+ - test/unit/local_tests.rb
166
+ - test/unit/null_logger_tests.rb
167
+ - test/unit/remote_tests.rb
168
+ - test/unit/runner_tests.rb
169
+ - test/unit/task_run_tests.rb
170
+ - test/unit/task_tests.rb
171
+ - test/unit/test_runner_tests.rb
172
+ - test/unit/tree_runner_tests.rb