@@ -6,32 +6,146 @@ struct Cassette {
66
77 let name : String
88 let interactions : [ Interaction ]
9-
9+ let cassetteOptions : CassetteOptions
1010
1111 // MARK: - Initializers
1212
13- init ( name: String , interactions: [ Interaction ] ) {
13+ init ( name: String , interactions: [ Interaction ] , cassetteOptions : CassetteOptions ) {
1414 self . name = name
1515 self . interactions = interactions
16+ self . cassetteOptions = cassetteOptions
1617 }
1718
18-
1919 // MARK: - Functions
2020
2121 func interactionForRequest( request: NSURLRequest ) -> Interaction ? {
2222 for interaction in interactions {
2323 let interactionRequest = interaction. request
24+
25+ if cassetteOptions. requestMatching == [ . URL, . Path, . HTTPMethod, . HTTPBody] {
26+ guard
27+ interactionRequest. URL == request. URL &&
28+ interactionRequest. URL? . relativePath == request. URL? . relativePath &&
29+ interactionRequest. HTTPMethod == request. HTTPMethod &&
30+ interactionRequest. hasHTTPBodyEqualToThatOfRequest ( request)
31+ else {
32+ continue
33+ }
34+
35+ return interaction
36+ }
37+
38+ if cassetteOptions. requestMatching == [ . URL, . Path] {
39+ guard
40+ interactionRequest. URL == request. URL &&
41+ interactionRequest. URL? . relativePath == request. URL? . relativePath
42+ else {
43+ continue
44+ }
45+
46+ return interaction
47+ }
48+
49+ if cassetteOptions. requestMatching == [ . URL, . HTTPMethod] {
50+ guard
51+ interactionRequest. URL == request. URL &&
52+ interactionRequest. HTTPMethod == request. HTTPMethod
53+ else {
54+ continue
55+ }
56+
57+ return interaction
58+ }
59+
60+ if cassetteOptions. requestMatching == [ . URL, . HTTPBody] {
61+ guard
62+ interactionRequest. URL == request. URL &&
63+ interactionRequest. hasHTTPBodyEqualToThatOfRequest ( request)
64+ else {
65+ continue
66+ }
67+
68+ return interaction
69+ }
70+
71+ if cassetteOptions. requestMatching == [ . Path, . HTTPMethod] {
72+ guard
73+ interactionRequest. URL? . relativePath == request. URL? . relativePath &&
74+ interactionRequest. HTTPMethod == request. HTTPMethod
75+ else {
76+ continue
77+ }
78+
79+ return interaction
80+ }
81+
82+ if cassetteOptions. requestMatching == [ . Path, . HTTPBody] {
83+ guard
84+ interactionRequest. URL? . relativePath == request. URL? . relativePath &&
85+ interactionRequest. hasHTTPBodyEqualToThatOfRequest ( request)
86+ else {
87+ continue
88+ }
89+
90+ return interaction
91+ }
2492
25- // Note: We don't check headers right now
26- if interactionRequest. HTTPMethod == request. HTTPMethod && interactionRequest. URL == request. URL && interactionRequest. hasHTTPBodyEqualToThatOfRequest ( request) {
93+ if cassetteOptions. requestMatching == [ . HTTPMethod, . HTTPBody] {
94+ guard
95+ interactionRequest. HTTPMethod == request. HTTPMethod &&
96+ interactionRequest. hasHTTPBodyEqualToThatOfRequest ( request)
97+ else {
98+ continue
99+ }
100+
101+ return interaction
102+ }
103+
104+ if cassetteOptions. requestMatching == [ . URL] {
105+ guard
106+ interactionRequest. URL == request. URL
107+ else {
108+ continue
109+ }
110+
111+ return interaction
112+ }
113+
114+ if cassetteOptions. requestMatching == [ . Path] {
115+ guard
116+ interactionRequest. URL? . relativePath == request. URL? . relativePath
117+ else {
118+ continue
119+ }
120+
121+ return interaction
122+ }
123+
124+ if cassetteOptions. requestMatching == [ . HTTPMethod] {
125+ guard
126+ interactionRequest. HTTPMethod == request. HTTPMethod
127+ else {
128+ continue
129+ }
130+
131+ return interaction
132+ }
133+
134+ if cassetteOptions. requestMatching == [ . HTTPBody] {
135+ guard
136+ interactionRequest. hasHTTPBodyEqualToThatOfRequest ( request)
137+ else {
138+ continue
139+ }
140+
27141 return interaction
28142 }
29143 }
144+
30145 return nil
31146 }
32147}
33148
34-
35149extension Cassette {
36150 var dictionary : [ String : AnyObject ] {
37151 return [
@@ -40,10 +154,11 @@ extension Cassette {
40154 ]
41155 }
42156
43- init ? ( dictionary: [ String : AnyObject ] ) {
157+ init ? ( dictionary: [ String : AnyObject ] , cassetteOptions : CassetteOptions ) {
44158 guard let name = dictionary [ " name " ] as? String else { return nil }
45159
46160 self . name = name
161+ self . cassetteOptions = cassetteOptions
47162
48163 if let array = dictionary [ " interactions " ] as? [ [ String : AnyObject ] ] {
49164 interactions = array. flatMap { Interaction ( dictionary: $0) }
0 commit comments