forked from RestKit/RestKit
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathRKRoute.h
More file actions
141 lines (108 loc) · 5.94 KB
/
Copy pathRKRoute.h
File metadata and controls
141 lines (108 loc) · 5.94 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
//
// RKRoute.h
// RestKit
//
// Created by Blake Watters on 5/31/12.
// Copyright (c) 2012 RestKit. All rights reserved.
//
// Licensed under the Apache License, Version 2.0 (the "License");
// you may not use this file except in compliance with the License.
// You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing, software
// distributed under the License is distributed on an "AS IS" BASIS,
// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
// See the License for the specific language governing permissions and
// limitations under the License.
//
#import "RKHTTPUtilities.h"
/**
The `RKRoute` class models a single routable path pattern in use by the application. A route can be combined with an `NSURL` base URL and interpolated with an object to produce a new fully hydrated URL object. Routes are always instantiated with a path pattern and metadata to provide for the subsequent identification of the defined route.
There are three types of routes modeled by the RKRoute class:
1. **Named Routes**: A named route represents a single path and optional request method within the application. The route is not affiliated with any particular class. For example, one might define a route with the name `@"airlines_list"` as a GET to the path '/airlines.json'.
1. **Class Routes**: An class route represents a single path that is identified by object class and request method for which it is appropriate. For example, one might define a route for the class `RKArticle` for a POST to the path '/articles.json'.
1. **Relationship Routes**: A relationship route represents a single path through which the relationship of a parent object can be manipulated. For example, given an `RKArticle` and `RKComment` class, one might define a relationship route for the `RKArticle` class's `@"comments"` relationship as pointing to a GET to the path `@"/articles/:articleID/comments".
The RKRoute class is internally implemented as a class cluster and is not to be directly instantiated via alloc and init.
@see RKRouter
@see RKRouteSet
*/
@interface RKRoute : NSObject
///---------------------------
/// @name Instantiating Routes
///---------------------------
/**
Creates and returns a new named route object with the given name, path pattern and method.
@param name A unique identifying name for the route.
@param pathPattern A SOCKit pattern describing the format of URL paths generated from the route.
@param method The request method of the route. The method given must specify a single HTTP method to be used for requests using the route.
@return A new named route object with the given name, path pattern and request method.
@raise NSInvalidArgumentException Raised if the given HTTP request method is not an exact match of the RKRequestMethod enum
*/
+ (instancetype)routeWithName:(NSString *)name pathPattern:(NSString *)pathPattern method:(RKRequestMethod)method;
/**
Creates and returns a new class route object with the given object class, path pattern and method.
@param objectClass The class that is represented by the route.
@param pathPattern A SOCKit pattern describing the format of URL paths generated from the route.
@param method The request method of the route. More than one method may be specified via a bitwise OR.
@return A new class route object with the given object class, path pattern and request method.
*/
+ (instancetype)routeWithClass:(Class)objectClass pathPattern:(NSString *)pathPattern method:(RKRequestMethod)method;
/**
Creates and returns a new relationship route object with the given relationship name, object class, path pattern and method.
@param name The name of the relationship represented by the route.
@param objectClass The class containing the relationship represented by the route.
@param pathPattern A SOCKit pattern describing the format of URL paths generated from the route.
@param method The request method of the route. More than one method may be specified via a bitwise OR.
@return A new class route object with the given object class, path pattern and request method.
*/
+ (instancetype)routeWithRelationshipName:(NSString *)name objectClass:(Class)objectClass pathPattern:(NSString *)pathPattern method:(RKRequestMethod)method;
///---------------------------------
/// @name Accessing Route Attributes
///---------------------------------
/**
The name of the receiver.
The name is used to identify named and relationship routes and is always `nil` for object routes.
*/
@property (nonatomic, strong, readonly) NSString *name;
/**
The object class of the receiver.
Defines the class for which the route is appropriate. Always returns `nil` for named routes.
*/
@property (nonatomic, strong, readonly) Class objectClass;
/**
The request method of the receiver.
Appropriate for all route types. If the route is appropriate for any HTTP request method, then the `RKRequestMethodAny` value is used.
*/
@property (nonatomic, assign, readonly) RKRequestMethod method;
/**
The path pattern of the receiver.
A SOCKit pattern that describes the format of the path portion of URL's generated from the receiver. Required and used by all route types.
@see `SOCPattern`
*/
@property (nonatomic, strong, readonly) NSString *pathPattern;
/**
A Boolean value that determines if the path pattern should be escaped when evaluated.
*Default*: `NO`
*/
@property (nonatomic, assign) BOOL shouldEscapePath;
///-----------------------------
/// @name Inspecting Route Types
///-----------------------------
/**
Determines if the receiver is a named route.
@return YES if the receiver is a named route, else NO.
*/
- (BOOL)isNamedRoute;
/**
Determines if the receiver is a class route.
@return YES if the receiver is a class route, else NO.
*/
- (BOOL)isClassRoute;
/**
Determines if the receiver is a relationship route.
@return YES if the receiver is a relationship route, else NO.
*/
- (BOOL)isRelationshipRoute;
@end