play_doh 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- 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: []
|