shell_mock 0.3.3 → 0.4.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: 25b8d6ab592753360667373eb0864fcdf8717299
4
- data.tar.gz: c6927a9111c84a6cfb60354ea7538694901e56eb
3
+ metadata.gz: 0774052a9e5d9c22ec4c25344e620d68cddc8604
4
+ data.tar.gz: 76f022bcb48ff0558e5f4e4564a9a0ff63ddc30c
5
5
  SHA512:
6
- metadata.gz: cada1b891f0d799db477929e60991353e27d9b6e289ee9b781962b1f8bcba49f0f6c25347f00f2710c8ca4808025ea72a7aeea5a50765f6a1ac0c49d3353bd4f
7
- data.tar.gz: dcc0f0a6a7c59f6bf7067c08553d36db785ec0f6165bfeaef623e40487993190d2e6b27552ceaea38e7d5cd5242c5225407c31a14195c2cf84c1a950ffe78448
6
+ metadata.gz: 5ce25833d01a646e100d285ce32f9810e15f348d760db2dacd669c8f045c600a16475026429226d6e10b7086c79485bfe73b0c48e2217bc272960c8eea6c479b
7
+ data.tar.gz: 1f0547eb74bbfd0296a5ad37e07b66eb15ce5f516ff78ad2c2f1abb4acbe792d4fb51a3d3c5614b294a8d164cf0c7ca8066ce8a128ac10078c6fa1fba494bd46
data/CHANGELOG.md CHANGED
@@ -1,6 +1,12 @@
1
1
  ## ROADMAP 1.0.0
2
2
 
3
- * add `with_side_effect(&blk)` for specifying desired side effects
3
+ * add `CommandStub#with_side_effect(&blk)` for specifying desired side effects
4
+ * add `CommandStub#with_stdout(str)` & `CommandStub#with_stderr(str)`. these will work differently for backtick than it will for system & exec.
5
+ * maybe add `CommandStub#with_stdin(str)` for `spawn`?
6
+
7
+ ## RELEASE 0.4.0
8
+
9
+ * FEATURE: `Kernel#spawn` and `Kernel.spawn` are now supported, which means all of Open3 is, as all of that library eventually results in a `spawn` call.
4
10
 
5
11
  ## RELEASE 0.3.3
6
12
 
@@ -4,10 +4,10 @@ module ShellMock
4
4
  class MonkeyPatch
5
5
  attr_reader :original, :alias_for_original
6
6
 
7
- def initialize(original_name, interpolable_name = original_name, &block)
7
+ def initialize(original_name, interpolatable_name = original_name, &block)
8
8
  @original = original_name
9
- @alias_for_original = "__un_shell_mocked_#{interpolable_name}"
10
- @replacement = "__shell_mocked_#{interpolable_name}"
9
+ @alias_for_original = "__un_shell_mocked_#{interpolatable_name}"
10
+ @replacement = "__shell_mocked_#{interpolatable_name}"
11
11
  @block = block
12
12
  end
13
13
 
@@ -19,7 +19,8 @@ module ShellMock
19
19
  class_or_module.send(:alias_method, alias_for_original, original)
20
20
 
21
21
  begin
22
- class_or_module.send(:remove_method, original) # for warnings
22
+ # so we don't have to see method redefinition warnings
23
+ class_or_module.send(:remove_method, original)
23
24
  rescue NameError
24
25
  end
25
26
 
@@ -28,7 +29,8 @@ module ShellMock
28
29
 
29
30
  def disable_for(class_or_module)
30
31
  begin
31
- class_or_module.send(:remove_method, original) # for warnings
32
+ # so we don't have to see method redefinition warnings
33
+ class_or_module.send(:remove_method, original)
32
34
  rescue NameError
33
35
  end
34
36
 
@@ -40,69 +42,4 @@ module ShellMock
40
42
  end
41
43
  end
42
44
  end
43
-
44
- SystemMonkeyPatch = MonkeyPatch.new(:system) do |env, command = nil, **options|
45
- env, command = {}, env if command.nil?
46
-
47
- # other arg manipulation
48
-
49
- stub = ShellMock::StubRegistry.stub_matching(env, command, options)
50
-
51
- if stub
52
- stub.side_effect.call
53
- stub.called_with(env, command, options)
54
- __un_shell_mocked_backtick("exit #{stub.exitstatus}")
55
-
56
- return stub.exitstatus == 0
57
- else
58
- if ShellMock.let_commands_run?
59
- __un_shell_mocked_system(env, command, **options)
60
- else
61
- raise ShellMock::NoStubSpecified.new(env, command, options)
62
- end
63
- end
64
- end
65
-
66
- # This feels very boilerplatey because Kernel::system and Kernel::exec
67
- # have very similar if not identical method signatures. I'm not sure
68
- # whether extracting the commonalities would be worth it or just
69
- # confuse.
70
- ExecMonkeyPatch = MonkeyPatch.new(:exec) do |env, command = nil, **options|
71
- env, command = {}, env if command.nil?
72
-
73
- # other arg manipulation
74
-
75
- stub = ShellMock::StubRegistry.stub_matching(env, command, options)
76
-
77
- if stub
78
- stub.side_effect.call
79
- stub.called_with(env, command, options)
80
-
81
- exit stub.exitstatus
82
- else
83
- if ShellMock.let_commands_run?
84
- __un_shell_mocked_exec(env, command, **options)
85
- else
86
- raise ShellMock::NoStubSpecified.new(env, command, options)
87
- end
88
- end
89
- end
90
-
91
- BacktickMonkeyPatch = MonkeyPatch.new(:`, :backtick) do |command|
92
- stub = ShellMock::StubRegistry.stub_matching({}, command, {})
93
-
94
- if stub
95
- stub.side_effect.call
96
- __un_shell_mocked_backtick("exit #{stub.exitstatus}")
97
- stub.called_with({}, command, {})
98
-
99
- return stub.expected_output
100
- else
101
- if ShellMock.let_commands_run?
102
- __un_shell_mocked_backtick(command)
103
- else
104
- raise ShellMock::NoStubSpecified.new({}, command, {})
105
- end
106
- end
107
- end
108
45
  end
@@ -0,0 +1,91 @@
1
+ require 'shell_mock/monkey_patch'
2
+ require 'shell_mock/stub_registry'
3
+ require 'shell_mock/no_stub_specified'
4
+
5
+ module ShellMock
6
+ SpawnMonkeyPatch = MonkeyPatch.new(:spawn) do |env, command = nil, **options|
7
+ env, command = {}, env if command.nil?
8
+
9
+ # other arg manipulation can go here if necessary
10
+
11
+ stub = StubRegistry.stub_matching(env, command, options)
12
+
13
+ if stub
14
+ stub.side_effect.call
15
+ stub.called_with(env, command, options)
16
+
17
+ __un_shell_mocked_spawn("exit #{stub.exitstatus}")
18
+ else
19
+ if ShellMock.let_commands_run?
20
+ __un_shell_mocked_spawn(env, command, **options)
21
+ else
22
+ raise NoStubSpecified.new(env, command, options)
23
+ end
24
+ end
25
+ end
26
+
27
+ SystemMonkeyPatch = MonkeyPatch.new(:system) do |env, command = nil, **options|
28
+ env, command = {}, env if command.nil?
29
+
30
+ # other arg manipulation can go here if necessary
31
+
32
+ stub = StubRegistry.stub_matching(env, command, options)
33
+
34
+ if stub
35
+ stub.side_effect.call
36
+ stub.called_with(env, command, options)
37
+ __un_shell_mocked_backtick("exit #{stub.exitstatus}")
38
+
39
+ return stub.exitstatus == 0
40
+ else
41
+ if ShellMock.let_commands_run?
42
+ __un_shell_mocked_system(env, command, **options)
43
+ else
44
+ raise NoStubSpecified.new(env, command, options)
45
+ end
46
+ end
47
+ end
48
+
49
+ # This feels very boilerplatey because Kernel::system and Kernel::exec
50
+ # have very similar if not identical method signatures. I'm not sure
51
+ # whether extracting the commonalities would be worth it or would just
52
+ # confuse.
53
+ ExecMonkeyPatch = MonkeyPatch.new(:exec) do |env, command = nil, **options|
54
+ env, command = {}, env if command.nil?
55
+
56
+ # other arg manipulation can go here if necessary
57
+
58
+ stub = StubRegistry.stub_matching(env, command, options)
59
+
60
+ if stub
61
+ stub.side_effect.call
62
+ stub.called_with(env, command, options)
63
+
64
+ exit stub.exitstatus
65
+ else
66
+ if ShellMock.let_commands_run?
67
+ __un_shell_mocked_exec(env, command, **options)
68
+ else
69
+ raise NoStubSpecified.new(env, command, options)
70
+ end
71
+ end
72
+ end
73
+
74
+ BacktickMonkeyPatch = MonkeyPatch.new('`', :backtick) do |command|
75
+ stub = StubRegistry.stub_matching({}, command, {})
76
+
77
+ if stub
78
+ stub.side_effect.call
79
+ stub.called_with({}, command, {})
80
+ __un_shell_mocked_backtick("exit #{stub.exitstatus}")
81
+
82
+ return stub.expected_output
83
+ else
84
+ if ShellMock.let_commands_run?
85
+ __un_shell_mocked_backtick(command)
86
+ else
87
+ raise NoStubSpecified.new({}, command, {})
88
+ end
89
+ end
90
+ end
91
+ end
@@ -1,3 +1,3 @@
1
1
  module ShellMock
2
- VERSION = "0.3.3"
2
+ VERSION = "0.4.0"
3
3
  end
data/lib/shell_mock.rb CHANGED
@@ -1,7 +1,7 @@
1
1
  require "shell_mock/version"
2
2
  require 'shell_mock/stub_registry'
3
3
  require 'shell_mock/command_stub'
4
- require 'shell_mock/monkey_patch'
4
+ require 'shell_mock/monkey_patches'
5
5
  require 'shell_mock/core_ext/module'
6
6
 
7
7
  module ShellMock
@@ -45,6 +45,11 @@ module ShellMock
45
45
  end
46
46
 
47
47
  def self.monkey_patches
48
- [SystemMonkeyPatch, ExecMonkeyPatch, BacktickMonkeyPatch]
48
+ [
49
+ SpawnMonkeyPatch,
50
+ SystemMonkeyPatch,
51
+ ExecMonkeyPatch,
52
+ BacktickMonkeyPatch
53
+ ]
49
54
  end
50
55
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shell_mock
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.3
4
+ version: 0.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Hoffman
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-04-11 00:00:00.000000000 Z
11
+ date: 2018-09-18 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -118,6 +118,7 @@ files:
118
118
  - lib/shell_mock/command_stub.rb
119
119
  - lib/shell_mock/core_ext/module.rb
120
120
  - lib/shell_mock/monkey_patch.rb
121
+ - lib/shell_mock/monkey_patches.rb
121
122
  - lib/shell_mock/no_stub_specified.rb
122
123
  - lib/shell_mock/rspec.rb
123
124
  - lib/shell_mock/rspec/matchers.rb