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