RBRouteBuilder 0.1.0

RBRouteBuilder 0.1.0

测试已测试
Lang语言 Obj-CObjective C
许可证 MIT
发布最新发布2014 年 12 月

AlexDenisov 维护。



  • Alex Denisov

RBRouteBuilder 提供了一种机制,可以在不打扰字符串的情况下制作请求的路由。

因此,而不是

NSString *path = [NSString stringWithFormat:@"users/%@/projects", userID];

可以使用

NSString *path = router().users.withID(userID).projects.path;

更实际的示例

安装

pod 'RBRouteBuilder'

注意: RBRouteBuilder 有一个相当奇怪的集成机制,因此它提供一个文件模板来简化此过程。可以从存储库根目录调用 install_templates.sh 脚本来安装它。

git clone https://github.com/railsware/RBRouteBuilder.git
cd RBRouteBuilder
sh install_templates.sh

用法

要开始使用 RBRouteBuilder,需要做几件事情。

路由定义

首先,应该添加与路由定义的协议,这个协议还可以有以下方法之一:

- (instancetype)root; - 返回带有根路径的构建器实例

- (NSString *)path; - 根据所有调用的方法生成 NSString

- (NSString *)URL - 根据所有调用的方法生成 NSURL

可能协议定义

@protocol Router

- (instancetype)root;
- (NSString *)path;
- (NSURL *)URL;

- (instancetype)users;
- (instancetype)projects;

@end

注意:不用担心实现,所有这些都将由 RBRouteBuilder 内部完成。

构建器实例化

构建器应由调用带有根路径作为参数的 rb_route_builder 方法来实例化。该方法在 RouterBulider.h 中定义,因此别忘了导入它。

以下是一个示例,说明如何完成它

static inline id<Router> routeBuilder()
{
    return rb_route_builder(@"http://api.sample.com");
}

静态方法 routeBuilder 可以有任意可能的名称,但它的返回类型必须符合新创建的协议。此规则允许使用链式调用

routeBuilder().users.path;
routeBuilder().root.projects.URL;

构建器辅助方法

RBRouteBuilder 有两个可能非常有用的辅助方法

add(NSString *) - 向构建器添加字符串

withID(NSNumber *) - 向构建器添加数字标识符

如果需要,这些方法也可以在协议中定义。它们使用块作为底层实现,并且与上一节中的 routeBuilder 方法具有相同的规则:为了允许链式调用,返回类型必须符合协议

- (id<Router> (^)(NSString *))add;
- (id<Router> (^)(NSNumber *))withID;

Xcode 模板

RBRouteBuilder 提供的 Xcode 模板可以用来避免所有这些常规操作。

RBRouteBuilder Xcode template.

示例

以下是如何处理 GitHub API 路由的示例

// GHRouter.h
#import <RBRouteBuilder/RouteBuilder.h>

@protocol GHRouter
    <NSObject>

@optional

- (instancetype)root;
- (NSString *)path;
- (NSURL *)URL;

- (id<GHRouter>(^)(NSString *))add;
- (id<GHRouter>(^)(NSNumbre *))withID;

// User-defined routes

- (instancetype)users;
- (instancetype)orgs;

@end

static id<GHRouter> router()
{
    return rb_route_builder(@"https://api.github.com");
}

// ...
// ...
// ...

NSURL *orgsURL = router().users.add(@"AlexDenisov").orgs.URL;
// NSURL: /users/AlexDenisov/orgs
NSString *fullOrgPath = router().root.orgs.add(@"Railsware").path;
// NSString: https://api.github.com/orgs/Railsware

许可证

本项目采用MIT许可证进行分发。

查看LICENSE文件获取更多详细信息。