Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/larryaasen/lanekit
LaneKit - an iOS Objective-C code generator for integration with RestKit.
https://github.com/larryaasen/lanekit
objective-c restkit ruby-gem
Last synced: 3 months ago
JSON representation
LaneKit - an iOS Objective-C code generator for integration with RestKit.
- Host: GitHub
- URL: https://github.com/larryaasen/lanekit
- Owner: larryaasen
- License: mit
- Created: 2013-04-19T13:12:20.000Z (almost 12 years ago)
- Default Branch: master
- Last Pushed: 2015-01-04T04:18:03.000Z (about 10 years ago)
- Last Synced: 2024-10-27T23:22:50.865Z (4 months ago)
- Topics: objective-c, restkit, ruby-gem
- Language: Ruby
- Homepage:
- Size: 410 KB
- Stars: 49
- Watchers: 6
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- Changelog: CHANGELOG
- License: LICENSE
Awesome Lists containing this project
README
## LaneKit
[![Gem Version](https://badge.fury.io/rb/lanekit.png)](http://badge.fury.io/rb/lanekit)
LaneKit is an iOS Objective-C code generator for integration with [RestKit](https://github.com/RestKit/RestKit). It generates
models, resource providers, table views, and full iOS apps with mimimal effort. There is support for unit testing with XCTest
including fixtures and tests. LaneKit is a command line app written in Ruby and packaged as a Ruby Gem.- [Source code for LaneKit](https://github.com/LarryAasen/LaneKit/zipball/master) from [GitHub](http://github.com).
- Questions? [Stack Overflow](http://stackoverflow.com/questions/tagged/lanekit) is the best place to find answers.## Benefits
* properly implemented models, resource providers, and table views
* easy integration with RestKit
* consistent Objective-C code
* unit tests with XCTest
* test fixtures in JSON and Objective-C
* iOS app creation fully integrated with [CocoaPods](https://github.com/CocoaPods/CocoaPods) and RestKit, and .gitignore file
* tested code
* rapid development
* enhanced productivity of junior developers
* reduces dependency on senior developers## How To Get Started
1. Install the LaneKit Ruby Gem from RubyGems.org on the command line:
$ gem install lanekit
Successfully installed lanekit-0.9.0
$ lanekit -v
LaneKit 0.9.0
2. LaneKit is ready to use.## Example Usage
### Add a new model called Video to an existing Xcode project:
$ lanekit generate model Video headline:string duration:string id:integer image:string itemDate:date location:string
create SportsFrames/SportsFrames/Models
create SportsFrames/SportsFramesTests/Fixtures
create SportsFrames/SportsFramesTests/Models
create SportsFrames/SportsFramesTests/Resources
create SportsFrames/SportsFrames/Models/Video.h
create SportsFrames/SportsFrames/Models/Video.m
create SportsFrames/SportsFramesTests/Fixtures/VideoFixtures.h
create SportsFrames/SportsFramesTests/Fixtures/VideoFixtures.m
create SportsFrames/SportsFramesTests/Resources/VideoFixtures.one.json
create SportsFrames/SportsFramesTests/Resources/VideoFixtures.two.json
create SportsFrames/SportsFramesTests/Models/VideoTest.h
create SportsFrames/SportsFramesTests/Models/VideoTest.m
create SportsFrames/SportsFrames/Models/LKModel.h
create SportsFrames/SportsFrames/Models/LKModel.mand here is the Objective-C header file that was generated by LaneKit:
```objective-c
//
// Video.h
//
// LaneKit is available under the MIT license. See the LICENSE file for more info.
//
// This model was created on 2014-01-11 by LaneKit v0.4.4.
//
// The following LaneKit command was used to generate this file:
// lanekit generate model Video headline:string duration:string id:integer image:string itemDate:date location:string
//#import "LKModel.h"
@interface Video : LKModel
@property (nonatomic,strong) NSString *headline;
@property (nonatomic,strong) NSString *duration;
@property (nonatomic,strong) NSNumber *id;
@property (nonatomic,strong) NSString *image;
@property (nonatomic,strong) NSDate *itemDate;
@property (nonatomic,strong) NSString *location;@end
```and here is the Objective-C .m file that was generated by LaneKit:
```objective-c
//
// Video.m
//
// LaneKit is available under the MIT license. See the LICENSE file for more info.
//
// This model was created on 2014-01-11 by LaneKit v0.4.4.
//
// The following LaneKit command was used to generate this file:
// lanekit generate model Video headline:string duration:string id:integer image:string itemDate:date location:string
//#import "Video.h"
@implementation Video
#pragma mark LKModel overrides
// Dictionary to convert self to JSON/XML. For XML mappings, add .text to the end of the destination attribute name like this: "title.text".
+ (NSDictionary *)dictionaryForRequestMappings
{
return @{
// source key path : destination attribute name
@"headline": @"headline",
@"duration": @"duration",
@"id": @"id",
@"image": @"image",
@"itemDate": @"itemDate",
@"location": @"location"
};
}// Dictionary to convert JSON/XML to self. For XML mappings, add .text to the end of the key path like this: "title.text".
+ (NSDictionary *)dictionaryForResponseMappings
{
return @{
// source key path : destination attribute name
@"headline": @"headline",
@"duration": @"duration",
@"id": @"id",
@"image": @"image",
@"itemDate": @"itemDate",
@"location": @"location"
};
}+ (NSString *)keyPath
{
return @"video";
}- (NSString *)descriptionForDisplay
{
return [NSString stringWithFormat:@"%@", self.headline];
}@end
```and here is the unit test fixtures file that was generated by LaneKit:
```objective-c
//
// VideoFixtures.m
//
// LaneKit is available under the MIT license. See the LICENSE file for more info.
//
// This model fixture was created on 2014-01-11 by LaneKit v0.4.4.
//
// The following LaneKit command was used to generate this file:
// lanekit generate model Video headline:string duration:string id:integer image:string itemDate:date location:string
//#import "VideoFixtures.h"
@implementation VideoFixtures
+ (Video *)one
{
Video *video = Video.new;video.headline = @"MyString";
video.duration = @"MyString";
video.id = [NSNumber numberWithInteger:1];
video.image = @"MyString";
video.itemDate = NSDate.new;
video.location = @"MyString";return video;
}+ (Video *)two
{
Video *video = Video.new;video.headline = @"MyString";
video.duration = @"MyString";
video.id = [NSNumber numberWithInteger:1];
video.image = @"MyString";
video.itemDate = NSDate.new;
video.location = @"MyString";return video;
}@end
```and here is a RestKit compatible JSON fixture file that was generated by LaneKit:
```json
{
"video": {
"headline": "MyString",
"duration": "MyString",
"id": "1",
"image": "MyString",
"itemDate": "03/01/2012",
"location": "MyString"
}
}
```and here is part of a unit test that was generated in Models/VideoTest.m by LaneKit:
```objective-c
- (void)testVideoNewOne
{
Video *video = VideoFixtures.one;
XCTAssertNotNil(video, @"video is nil");XCTAssertTrue([video.headline isEqualToString:@"MyString"], @"headline not correct value");
XCTAssertTrue([video.duration isEqualToString:@"MyString"], @"duration not correct value");
XCTAssertTrue(video.id.integerValue == [NSNumber numberWithInteger:1].integerValue, @"id not [NSNumber numberWithInteger:1]");
XCTAssertTrue([video.image isEqualToString:@"MyString"], @"image not correct value");
XCTAssertNotNil(video.itemDate, @"itemDate is nil");
XCTAssertTrue([video.location isEqualToString:@"MyString"], @"location not correct value");
}- (void)testVideoNewTwo
{
Video *video = VideoFixtures.two;
XCTAssertNotNil(video, @"video is nil");XCTAssertTrue([video.headline isEqualToString:@"MyString"], @"headline not correct value");
XCTAssertTrue([video.duration isEqualToString:@"MyString"], @"duration not correct value");
XCTAssertTrue(video.id.integerValue == [NSNumber numberWithInteger:1].integerValue, @"id not [NSNumber numberWithInteger:1]");
XCTAssertTrue([video.image isEqualToString:@"MyString"], @"image not correct value");
XCTAssertNotNil(video.itemDate, @"itemDate is nil");
XCTAssertTrue([video.location isEqualToString:@"MyString"], @"location not correct value");
}- (void)testMapping
{
RKObjectMapping *requestMapping = [Video requestMapping];
XCTAssertNotNil(requestMapping, @"[Video requestMapping] returned nil.");
RKObjectMapping *responseMapping = [Video responseMapping];
XCTAssertNotNil(responseMapping, @"[Video responseMapping] returned nil.");
}
```### Add a new model called Contents that contains a list of Videos and uses a relationship mapping.
$ lanekit generate model contents contents:array:Video
exist Classes/model
create Classes/model/Contents.h
create Classes/model/Contents.m### Add a new resource provider called Contents.
$ lanekit generate provider Contents Contents http://scores.espn.go.com/allsports/scorecenter/v2/videos/build?sport=top
create Classes/Controllers
create Classes/Controllers/LKResourceProvider.h
create Classes/Controllers/LKResourceProvider.m
create Classes/Controllers/ContentsProvider.h
create Classes/Controllers/ContentsProvider.m
### Create a new iOS app fully integrated with CocoaPods and RestKit.$ lanekit new SportsFrames
create SportsFrames
create SportsFrames/Podfile
create SportsFrames/lanekit-ios-project.xcworkspace/contents.xcworkspacedata
create SportsFrames/lanekit-ios-project.xcworkspace/xcshareddata/lanekit-ios-project.xccheckout
create SportsFrames/lanekit-ios-project.xcworkspace/xcuserdata/larry.xcuserdatad/UserInterfaceState.xcuserstate
create SportsFrames/lanekit-ios-project/lanekit-ios-project.xcodeproj/project.pbxproj
create SportsFrames/lanekit-ios-project/lanekit-ios-project.xcodeproj/project.xcworkspace/contents.xcworkspacedata
create SportsFrames/lanekit-ios-project/lanekit-ios-project.xcodeproj/xcuserdata/larry.xcuserdatad/xcschemes/lanekit-ios-project.xcscheme
create SportsFrames/lanekit-ios-project/lanekit-ios-project.xcodeproj/xcuserdata/larry.xcuserdatad/xcschemes/xcschememanagement.plist
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Controllers/LKAppDelegate.h
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Controllers/LKAppDelegate.m
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Controllers/LKDetailViewController.h
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Controllers/LKDetailViewController.m
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Controllers/LKMasterViewController.h
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Controllers/LKMasterViewController.m
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Resources/Base.lproj/Main_iPad.storyboard
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Resources/Base.lproj/Main_iPhone.storyboard
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Resources/Images.xcassets/AppIcon.appiconset/Contents.json
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Resources/Images.xcassets/LaunchImage.launchimage/Contents.json
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Resources/en.lproj/InfoPlist.strings
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Supporting Files/lanekit-ios-project-Info.plist
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Supporting Files/lanekit-ios-project-Prefix.pch
create SportsFrames/lanekit-ios-project/lanekit-ios-project/Supporting Files/main.m
create SportsFrames/lanekit-ios-project/lanekit-ios-projectTests/en.lproj/InfoPlist.strings
create SportsFrames/lanekit-ios-project/lanekit-ios-projectTests/lanekit-ios-projectTests-Info.plist
create SportsFrames/lanekit-ios-project/lanekit-ios-projectTests/lanekit-ios-projectTests.m
create SportsFrames/.gitignore
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFrames
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFrames/Supporting Files/SportsFrames-Info.plist
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFrames/Supporting Files/SportsFrames-Prefix.pch
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFrames.xcodeproj
update /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFrames.xcodeproj/project.pbxproj
update /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFrames.xcodeproj/project.xcworkspace/contents.xcworkspacedata
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFrames.xcodeproj/xcuserdata/larry.xcuserdatad/xcschemes/SportsFrames.xcscheme
update /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFrames.xcodeproj/xcuserdata/larry.xcuserdatad/xcschemes/SportsFrames.xcscheme
update /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFrames.xcodeproj/xcuserdata/larry.xcuserdatad/xcschemes/xcschememanagement.plist
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFramesTests
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFramesTests/SportsFramesTests-Info.plist
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames/SportsFramesTests/SportsFramesTests.m
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames.xcworkspace
update /Users/larry/Projects/lanekit/SportsFrames/SportsFrames.xcworkspace/contents.xcworkspacedata
rename /Users/larry/Projects/lanekit/SportsFrames/SportsFrames.xcworkspace/xcshareddata/SportsFrames.xccheckout
update /Users/larry/Projects/lanekit/SportsFrames/SportsFrames.xcworkspace/xcshareddata/SportsFrames.xccheckout
update /Users/larry/Projects/lanekit/SportsFrames/Podfile
Installing CocoaPods for RestKit
[in /Users/larry/Projects/lanekit/SportsFrames]
Analyzing dependencies
Downloading dependencies
Installing AFNetworking (1.3.3)
Installing RestKit (0.20.3)
Installing SOCKit (1.1)
Installing TransitionKit (1.1.1)
Generating Pods project
Integrating client project
clean /Users/larry/Projects/lanekit/SportsFrames/SportsFrames.xcworkspace### Add a new UITableViewController called ContentsViewController
This will display the Contents model that is a list of videos.$ lanekit generate tableviewcontroller Contents -r LKFeedCell
create SportsFrames/SportsFrames/Controllers/ContentsViewController.h
create SportsFrames/SportsFrames/Controllers/ContentsViewController.m
create SportsFrames/SportsFrames/Views/LKFeedCell.h
create SportsFrames/SportsFrames/Views/LKFeedCell.m### Add the [Urban Airship](https://github.com/urbanairship/ios-library) CocoaPods Pod to the project.
$ lanekit generate pod UrbanAirship-iOS-SDK
Installing UrbanAirship-iOS-SDK (3.0.1)
### Sample App
The [SportsFrames](https://github.com/larryaasen/SportsFrames) app is a fully functional iOS sample app using RestKit created to demonstrate the use of LaneKit in a real world app. It
has models and resource providers that are generated from LaneKit.
Download the code from [GitHub](https://github.com/larryaasen/SportsFrames).## Credits
LaneKit was created by [Larry Aasen](https://github.com/larryaasen). Follow Larry Aasen on Twitter [@LarryAasen](https://twitter.com/LarryAasen).
## License
LaneKit is available under the MIT license. See the [LICENSE](https://github.com/larryaasen/LaneKit/blob/master/LICENSE) file for more info.