Class: SugarCube::Anonymous
- Inherits:
-
Hash
- Object
- Hash
- SugarCube::Anonymous
show all
- Defined in:
- lib/cocoa/sugarcube-anonymous/anonymous.rb
Overview
A subclass of Hash that allows its keys to be accessed and assigned by method name. Useful to quickly mock objects. To that end, a ‘NoMethodError` is raised anytime the key doesn’t exist (getter or setter)
You can convert an existing Hash or NSDictionary into a Anonymous using the constructor ‘SugarCube::Anonymous`, or you can call `to_object` on a dictionary or hash.
Instance Method Summary
collapse
Dynamic Method Handling
This class handles dynamic methods through the method_missing method
#method_missing(symbol, *args) ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
# File 'lib/cocoa/sugarcube-anonymous/anonymous.rb', line 31
def method_missing(symbol, *args)
if args.size == 0
if symbol.to_s[-1] == '?'
symbol = symbol.to_s[0...-1].to_sym
return_bool = true
else
return_bool = false
end
key = symbol
key = symbol.to_s unless self.include? key
if self.include?(key)
self[key] = self[key].to_object
if return_bool
return !! self[key]
end
return self[key]
end
elsif args.size == 1 && /(.*)=$/ =~ symbol.to_s
key = $1.to_sym
key = key.to_s unless self.include? key
if self.include?(key)
return self[key] = args.first.to_object
end
end
return super
end
|
Instance Method Details
#anonymous_each ⇒ Object
replace enumerable methods
69
|
# File 'lib/cocoa/sugarcube-anonymous/anonymous.rb', line 69
alias :anonymous_each :each
|
71
72
73
|
# File 'lib/cocoa/sugarcube-anonymous/anonymous.rb', line 71
def each
anonymous_each {|k,v| yield k, v.to_object}
end
|
#hash_respond_to? ⇒ Object
58
|
# File 'lib/cocoa/sugarcube-anonymous/anonymous.rb', line 58
alias_method :hash_respond_to?, :respond_to?
|
#respond_to?(method_name) ⇒ Boolean
59
60
61
62
|
# File 'lib/cocoa/sugarcube-anonymous/anonymous.rb', line 59
def respond_to?(method_name)
return true if self.include?(method_name) or hash_respond_to?(method_name)
false
end
|
#to_object ⇒ Object
64
65
66
|
# File 'lib/cocoa/sugarcube-anonymous/anonymous.rb', line 64
def to_object
self
end
|