main
1//
2// KWMatchers.m
3// Kiwi
4//
5// Created by Luke Redpath on 17/06/2011.
6// Copyright 2011 Allen Ding. All rights reserved.
7//
8
9#import "KWMatchers.h"
10#import "KWUserDefinedMatcher.h"
11
12@implementation KWMatchers
13
14#pragma mark -
15#pragma mark Singleton implementation
16
17static id sharedMatchers = nil;
18
19+ (void)initialize {
20 if (self == [KWMatchers class]) {
21 sharedMatchers = [[self alloc] init];
22 }
23}
24
25+ (id)matchers {
26 return sharedMatchers;
27}
28
29- (id)init {
30 if ((self = [super init])) {
31 userDefinedMatchers = [[NSMutableDictionary alloc] init];
32 }
33 return self;
34}
35
36#pragma mark -
37#pragma mark Defining Matchers
38
39+ (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block {
40 [[self matchers] defineMatcher:selectorString as:block];
41}
42
43- (void)defineMatcher:(NSString *)selectorString as:(KWMatchersBuildingBlock)block {
44 KWUserDefinedMatcherBuilder *builder = [KWUserDefinedMatcherBuilder builderForSelector:NSSelectorFromString(selectorString)];
45 block(builder);
46 userDefinedMatchers[builder.key] = builder;
47}
48
49- (void)addUserDefinedMatcherBuilder:(KWUserDefinedMatcherBuilder *)builder {
50 userDefinedMatchers[builder.key] = builder;
51}
52
53#pragma mark -
54#pragma mark Building Matchers
55
56- (KWUserDefinedMatcher *)matcherForSelector:(SEL)selector subject:(id)subject {
57 KWUserDefinedMatcherBuilder *builder = userDefinedMatchers[NSStringFromSelector(selector)];
58
59 if (builder == nil)
60 return nil;
61
62 return [builder buildMatcherWithSubject:subject];
63}
64
65
66@end
67
68void KWDefineMatchers(NSString *selectorString, KWMatchersBuildingBlock block)
69{
70 [KWMatchers defineMatcher:selectorString as:block];
71}
72