fakecmd 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.
Files changed (4) hide show
  1. data/README.md +108 -3
  2. data/lib/fakecmd.rb +25 -25
  3. data/lib/fakecmd/version.rb +3 -3
  4. metadata +23 -29
data/README.md CHANGED
@@ -1,7 +1,112 @@
1
1
  fakecmd
2
2
  =======
3
3
 
4
- Fakes system commands. Intended for use in tests. Inspired by
5
- [FakeFS](http://github.com/defunkt/fakefs).
4
+ * [Homepage](http://github.com/blom/fakecmd)
5
+ * [Documentation](http://rdoc.info/github/blom/fakecmd)
6
6
 
7
- Undocumented and undone.
7
+ Fakes system commands. Intended for use in tests. If your code relies heavily
8
+ on system commands and verifies their exit status, you may not want to rely on
9
+ the OS to be able to run your tests. That's the basic idea.
10
+
11
+ Originally inspired by [FakeFS](http://github.com/defunkt/fakefs).
12
+
13
+ Installation
14
+ ------------
15
+
16
+ gem install fakecmd
17
+
18
+ Usage
19
+ -----
20
+
21
+ ### Require
22
+
23
+ require "fakecmd"
24
+
25
+ ### Add some commands
26
+
27
+ FakeCmd.add "bar", 0, "pork"
28
+ FakeCmd.add :foo, 1, "chop"
29
+ FakeCmd.add /hat/, 2, "good"
30
+
31
+ *Command*, *exit status*, and *output*.
32
+
33
+ #### Everything is a regular expression internally
34
+
35
+ "hi"
36
+ :hi
37
+ /hi/
38
+
39
+ All equal.
40
+
41
+ ### Enable
42
+
43
+ Faking only happens between `on!` and `off!`, or in a block.
44
+
45
+ #### `on!` and `off!`
46
+
47
+ FakeCmd.on!
48
+ # ...
49
+ FakeCmd.off!
50
+
51
+ #### Block
52
+
53
+ FakeCmd do
54
+ # ...
55
+ end
56
+
57
+ ### Run
58
+
59
+ #### Using the examples above
60
+
61
+ `bar mitzva` # => "pork"
62
+ $?.exitstatus # => 0
63
+
64
+ %x(fool) # => "chop"
65
+ $?.exitstatus # => 1
66
+
67
+ %x(nice hat) # => "good"
68
+ $?.exitstatus # => 2
69
+
70
+ #### No match
71
+
72
+ `nope` # => false
73
+ $?.exitstatus # => 127
74
+
75
+ ### Which calls are faked
76
+
77
+ ``
78
+ %x
79
+
80
+ For now.
81
+
82
+ ### Clear the collection
83
+
84
+ FakeCmd.clear!
85
+
86
+ A simple example
87
+ ----------------
88
+
89
+ module Users
90
+ def self.count
91
+ c = %x(users).split.size
92
+ c if $?.exitstatus == 0
93
+ end
94
+ end
95
+
96
+ class UsersTest < Test::Unit::TestCase
97
+ def setup
98
+ FakeCmd.clear!
99
+ end
100
+
101
+ def test_count_success
102
+ FakeCmd.add :users, 0, "a b c"
103
+ assert_equal 3, FakeCmd { Users.count }
104
+ assert_equal 0, $?.exitstatus
105
+ end
106
+
107
+ def test_count_failure
108
+ FakeCmd.add :users, 1
109
+ assert_nil FakeCmd { Users.count }
110
+ assert_equal 1, $?.exitstatus
111
+ end
112
+ end
data/lib/fakecmd.rb CHANGED
@@ -5,16 +5,21 @@ module FakeCmd
5
5
  module_function
6
6
  @@enabled = false
7
7
 
8
- def on!
9
- unless @@enabled
10
- Kernel.class_eval do
11
- alias_method :fakecmd_backquote, :`
12
- def `(cmd)
13
- FakeCmd.process_command(cmd)
14
- end
15
- end
16
- @@enabled = true
17
- end
8
+ def add(cmd, status = 0, output = "", &block)
9
+ cmd = cmd.to_s if cmd.is_a?(Symbol)
10
+ commands << {
11
+ :regexp => Regexp.new(cmd),
12
+ :output => block ? block.call : output,
13
+ :status => status
14
+ }
15
+ end
16
+
17
+ def clear!
18
+ commands.clear
19
+ end
20
+
21
+ def commands
22
+ @_commands ||= Set.new
18
23
  end
19
24
 
20
25
  def off!
@@ -27,12 +32,16 @@ module FakeCmd
27
32
  end
28
33
  end
29
34
 
30
- def clear!
31
- commands.clear
32
- end
33
-
34
- def commands
35
- @_commands ||= Set.new
35
+ def on!
36
+ unless @@enabled
37
+ Kernel.class_eval do
38
+ alias_method :fakecmd_backquote, :`
39
+ def `(cmd)
40
+ FakeCmd.process_command(cmd)
41
+ end
42
+ end
43
+ @@enabled = true
44
+ end
36
45
  end
37
46
 
38
47
  def process_command(cmd)
@@ -44,15 +53,6 @@ module FakeCmd
44
53
  end
45
54
  system ""
46
55
  end
47
-
48
- def add(cmd, status = 0, output = "", &block)
49
- cmd = cmd.to_s if cmd.is_a?(Symbol)
50
- commands << {
51
- :regexp => Regexp.new(cmd),
52
- :output => block ? block.call : output,
53
- :status => status
54
- }
55
- end
56
56
  end
57
57
 
58
58
  def FakeCmd
@@ -1,8 +1,8 @@
1
1
  module FakeCmd
2
2
  module VERSION
3
- const_defined?(:MAJOR) || MAJOR = 0
4
- const_defined?(:MINOR) || MINOR = 0
5
- const_defined?(:PATCH) || PATCH = 1
3
+ MAJOR = 0
4
+ MINOR = 0
5
+ PATCH = 2
6
6
 
7
7
  def self.to_s
8
8
  [MAJOR, MINOR, PATCH] * "."
metadata CHANGED
@@ -1,13 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fakecmd
3
3
  version: !ruby/object:Gem::Version
4
- hash: 29
5
4
  prerelease: false
6
5
  segments:
7
6
  - 0
8
7
  - 0
9
- - 1
10
- version: 0.0.1
8
+ - 2
9
+ version: 0.0.2
11
10
  platform: ruby
12
11
  authors:
13
12
  - "\xC3\x98rjan Blom"
@@ -15,79 +14,74 @@ autorequire:
15
14
  bindir: bin
16
15
  cert_chain: []
17
16
 
18
- date: 2010-09-27 00:00:00 +02:00
17
+ date: 2010-11-06 00:00:00 +01:00
19
18
  default_executable:
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
- version_requirements: &id001 !ruby/object:Gem::Requirement
21
+ name: bluecloth
22
+ requirement: &id001 !ruby/object:Gem::Requirement
23
23
  none: false
24
24
  requirements:
25
25
  - - ">="
26
26
  - !ruby/object:Gem::Version
27
- hash: 3
28
27
  segments:
29
28
  - 0
30
29
  version: "0"
31
- requirement: *id001
32
30
  type: :development
33
- name: bluecloth
34
31
  prerelease: false
32
+ version_requirements: *id001
35
33
  - !ruby/object:Gem::Dependency
36
- version_requirements: &id002 !ruby/object:Gem::Requirement
34
+ name: mg
35
+ requirement: &id002 !ruby/object:Gem::Requirement
37
36
  none: false
38
37
  requirements:
39
38
  - - ">="
40
39
  - !ruby/object:Gem::Version
41
- hash: 3
42
40
  segments:
43
41
  - 0
44
42
  version: "0"
45
- requirement: *id002
46
43
  type: :development
47
- name: mg
48
44
  prerelease: false
45
+ version_requirements: *id002
49
46
  - !ruby/object:Gem::Dependency
50
- version_requirements: &id003 !ruby/object:Gem::Requirement
47
+ name: rcov
48
+ requirement: &id003 !ruby/object:Gem::Requirement
51
49
  none: false
52
50
  requirements:
53
51
  - - ">="
54
52
  - !ruby/object:Gem::Version
55
- hash: 3
56
53
  segments:
57
54
  - 0
58
55
  version: "0"
59
- requirement: *id003
60
56
  type: :development
61
- name: rcov
62
57
  prerelease: false
58
+ version_requirements: *id003
63
59
  - !ruby/object:Gem::Dependency
64
- version_requirements: &id004 !ruby/object:Gem::Requirement
60
+ name: rspec
61
+ requirement: &id004 !ruby/object:Gem::Requirement
65
62
  none: false
66
63
  requirements:
67
- - - ">="
64
+ - - ~>
68
65
  - !ruby/object:Gem::Version
69
- hash: 3
70
66
  segments:
71
- - 0
72
- version: "0"
73
- requirement: *id004
67
+ - 2
68
+ version: "2"
74
69
  type: :development
75
- name: rspec
76
70
  prerelease: false
71
+ version_requirements: *id004
77
72
  - !ruby/object:Gem::Dependency
78
- version_requirements: &id005 !ruby/object:Gem::Requirement
73
+ name: yard
74
+ requirement: &id005 !ruby/object:Gem::Requirement
79
75
  none: false
80
76
  requirements:
81
77
  - - ">="
82
78
  - !ruby/object:Gem::Version
83
- hash: 3
84
79
  segments:
85
80
  - 0
86
81
  version: "0"
87
- requirement: *id005
88
82
  type: :development
89
- name: yard
90
83
  prerelease: false
84
+ version_requirements: *id005
91
85
  description: Fakes system commands. Intended for use in tests.
92
86
  email: blom@blom.tv
93
87
  executables: []
@@ -115,7 +109,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
115
109
  requirements:
116
110
  - - ">="
117
111
  - !ruby/object:Gem::Version
118
- hash: 3
112
+ hash: 2149922095191616200
119
113
  segments:
120
114
  - 0
121
115
  version: "0"
@@ -124,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
124
118
  requirements:
125
119
  - - ">="
126
120
  - !ruby/object:Gem::Version
127
- hash: 3
121
+ hash: 2149922095191616200
128
122
  segments:
129
123
  - 0
130
124
  version: "0"