play_doh 0.0.1
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.
- data/lib/meta.rb +35 -0
- data/lib/mock.rb +11 -0
- data/lib/play_doh.rb +56 -0
- data/lib/stub.rb +37 -0
- metadata +48 -0
data/lib/meta.rb
ADDED
@@ -0,0 +1,35 @@
|
|
1
|
+
module Meta
|
2
|
+
|
3
|
+
DATA_TYPES = [
|
4
|
+
String, Symbol, Regexp,
|
5
|
+
Float, Fixnum, Bignum,
|
6
|
+
TrueClass, FalseClass,
|
7
|
+
Array, Hash,
|
8
|
+
Exception
|
9
|
+
]
|
10
|
+
|
11
|
+
def instance_methods
|
12
|
+
@sut.public_methods(false)
|
13
|
+
.reject { |m| is_property? m }
|
14
|
+
.map &:to_sym
|
15
|
+
end
|
16
|
+
|
17
|
+
def is_dependency?(object)
|
18
|
+
object != @sut and
|
19
|
+
not DATA_TYPES.include? object.class
|
20
|
+
end
|
21
|
+
|
22
|
+
def is_property?(name)
|
23
|
+
@sut.instance_variables.
|
24
|
+
include? property_for_method name
|
25
|
+
end
|
26
|
+
|
27
|
+
def property_for_method(name)
|
28
|
+
"@#{name.to_s}".to_sym
|
29
|
+
end
|
30
|
+
|
31
|
+
def method_for_property(name)
|
32
|
+
name.to_s[1..-1].to_sym
|
33
|
+
end
|
34
|
+
|
35
|
+
end
|
data/lib/mock.rb
ADDED
data/lib/play_doh.rb
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
def play_doh(sut=nil)
|
2
|
+
return sut if sut.is_a? Playdoh
|
3
|
+
Playdoh.new sut
|
4
|
+
end
|
5
|
+
|
6
|
+
require_relative 'mock'
|
7
|
+
require_relative 'stub'
|
8
|
+
|
9
|
+
class Playdoh
|
10
|
+
|
11
|
+
include Stub
|
12
|
+
|
13
|
+
def initialize(sut=nil)
|
14
|
+
@sut = sut || Object.new
|
15
|
+
stub_methods
|
16
|
+
stub_dependencies
|
17
|
+
default_operation
|
18
|
+
end
|
19
|
+
|
20
|
+
def operation
|
21
|
+
@operation = -> method, *args { yield method, *args }
|
22
|
+
self
|
23
|
+
end
|
24
|
+
|
25
|
+
def default_operation
|
26
|
+
operation do |method, *args|
|
27
|
+
@sut.send method, *args
|
28
|
+
end
|
29
|
+
end
|
30
|
+
|
31
|
+
def method_missing(method, *args)
|
32
|
+
@operation.call method, *args
|
33
|
+
ensure
|
34
|
+
default_operation
|
35
|
+
end
|
36
|
+
|
37
|
+
def reset(method)
|
38
|
+
Mock.reset @sut, method
|
39
|
+
end
|
40
|
+
|
41
|
+
def given
|
42
|
+
Mock.stub @sut
|
43
|
+
end
|
44
|
+
|
45
|
+
def when
|
46
|
+
operation do |method, *args|
|
47
|
+
reset method
|
48
|
+
@sut.send method, *args
|
49
|
+
end
|
50
|
+
end
|
51
|
+
|
52
|
+
def verify
|
53
|
+
Mock.mock @sut
|
54
|
+
end
|
55
|
+
|
56
|
+
end
|
data/lib/stub.rb
ADDED
@@ -0,0 +1,37 @@
|
|
1
|
+
require_relative 'mock'
|
2
|
+
require_relative 'meta'
|
3
|
+
|
4
|
+
module Stub
|
5
|
+
|
6
|
+
include Meta
|
7
|
+
|
8
|
+
def stub(method, value=nil)
|
9
|
+
Mock.stub(@sut, method).returns(value)
|
10
|
+
end
|
11
|
+
|
12
|
+
def stub_methods
|
13
|
+
instance_methods.each { |m| stub m }
|
14
|
+
stub_method_missing
|
15
|
+
end
|
16
|
+
|
17
|
+
def stub_method_missing
|
18
|
+
def @sut.method_missing(method, *args)
|
19
|
+
nil
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def stub_dependencies
|
24
|
+
@sut.instance_variables.each { |v| stub_dependency v }
|
25
|
+
end
|
26
|
+
|
27
|
+
def stub_dependency(name)
|
28
|
+
current_value = @sut.instance_variable_get name
|
29
|
+
return unless is_dependency? current_value
|
30
|
+
|
31
|
+
stubbed_value = play_doh current_value
|
32
|
+
|
33
|
+
@sut.instance_variable_set name, stubbed_value
|
34
|
+
stub method_for_property(name), stubbed_value
|
35
|
+
end
|
36
|
+
|
37
|
+
end
|
metadata
ADDED
@@ -0,0 +1,48 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: play_doh
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
prerelease:
|
6
|
+
platform: ruby
|
7
|
+
authors:
|
8
|
+
- limadelic
|
9
|
+
autorequire:
|
10
|
+
bindir: bin
|
11
|
+
cert_chain: []
|
12
|
+
date: 2013-02-15 00:00:00.000000000 Z
|
13
|
+
dependencies: []
|
14
|
+
description: partial mocks on rr
|
15
|
+
email: limadelic@gmail.com
|
16
|
+
executables: []
|
17
|
+
extensions: []
|
18
|
+
extra_rdoc_files: []
|
19
|
+
files:
|
20
|
+
- lib/meta.rb
|
21
|
+
- lib/mock.rb
|
22
|
+
- lib/play_doh.rb
|
23
|
+
- lib/stub.rb
|
24
|
+
homepage: https://github.com/limadelic/play_doh
|
25
|
+
licenses: []
|
26
|
+
post_install_message:
|
27
|
+
rdoc_options: []
|
28
|
+
require_paths:
|
29
|
+
- lib
|
30
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
31
|
+
none: false
|
32
|
+
requirements:
|
33
|
+
- - ! '>='
|
34
|
+
- !ruby/object:Gem::Version
|
35
|
+
version: '0'
|
36
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
37
|
+
none: false
|
38
|
+
requirements:
|
39
|
+
- - ! '>='
|
40
|
+
- !ruby/object:Gem::Version
|
41
|
+
version: '0'
|
42
|
+
requirements: []
|
43
|
+
rubyforge_project:
|
44
|
+
rubygems_version: 1.8.24
|
45
|
+
signing_key:
|
46
|
+
specification_version: 3
|
47
|
+
summary: malleable mocks
|
48
|
+
test_files: []
|