Skip to content

Instantly share code, notes, and snippets.

@stevegraham
Created October 29, 2013 15:40
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save stevegraham/7217103 to your computer and use it in GitHub Desktop.
Save stevegraham/7217103 to your computer and use it in GitHub Desktop.
//
// NSString+Inflections.m
// Zap
//
// Created by Stevie Graham on 28/10/2013.
//
#import "NSString+Inflections.h"
@implementation NSString (Inflections)
- (NSString *)snakeCaseString {
NSScanner * scanner = [NSScanner scannerWithString:self];
scanner.caseSensitive = YES;
NSCharacterSet * upper = [NSCharacterSet uppercaseLetterCharacterSet];
NSCharacterSet * lower = [NSCharacterSet lowercaseLetterCharacterSet];
NSString * string;
NSMutableString * output = [NSMutableString string];
while (!scanner.isAtEnd) {
if ([scanner scanCharactersFromSet:upper intoString:&string])
[output appendString:[string lowercaseString]];
if ([scanner scanCharactersFromSet:lower intoString:&string]) {
[output appendString:string];
if (!scanner.isAtEnd) [output appendString:@"_"];
}
}
return [NSString stringWithString:output];
}
- (NSString *)llamaCaseString {
NSArray * components = [self componentsSeparatedByString:@"_"];
NSMutableString * output = [[components firstObject] mutableCopy];
NSRange tail = NSMakeRange(1, [components count] - 1);
for (NSString * component in [components subarrayWithRange:tail])
[output appendString:[component capitalizedString]];
return [NSString stringWithString:output];
}
@end
//
// ZPStringTranformers.m
// Zap
//
// Created by Stevie Graham on 28/10/2013.
//
#import "ZPStringTranformers.h"
#import "NSString+Inflections.h"
#import <NSValueTransformer+TransformerKit.h>
NSString * const ZPSnakeCaseStringTransformerName = @"ZPSnakeCaseStringTransformer";
NSString * const ZPLlamaCaseStringTransformerName = @"ZPLlamaCaseStringTransformer";
@implementation ZPStringTranformers
+ (void)load {
@autoreleasepool {
[NSValueTransformer registerValueTransformerWithName:ZPSnakeCaseStringTransformerName transformedValueClass:[NSString class] returningTransformedValueWithBlock:^id(id value) {
return [value snakeCaseString];
}];
[NSValueTransformer registerValueTransformerWithName:ZPLlamaCaseStringTransformerName transformedValueClass:[NSString class] returningTransformedValueWithBlock:^id(id value) {
return [value llamaCaseString];
}];
}
}
@end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment