Skip to content
This repository has been archived by the owner on Jul 15, 2023. It is now read-only.

Added an API method to retrieve groups #7

Open
wants to merge 2 commits into
base: master
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
10 changes: 9 additions & 1 deletion OAuthSDK/YMAPIClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
#import <Foundation/Foundation.h>
#import "AFNetworking.h"

extern NSString * const YMBaseURL;
FOUNDATION_EXPORT NSString * const YMBaseURL;

/**
Represents an object that contains a queue of HTTP operations.
Expand Down Expand Up @@ -40,4 +40,12 @@ extern NSString * const YMBaseURL;
*/
- (void)postPath:(NSString *)path parameters:(NSDictionary *)parameters success:(void (^)(id responseObject))success failure:(void (^)(NSInteger statusCode, NSError *error))failure;

/**
Retrieves the currently logged in user's groups
@param page Which page of 50 groups to return
@param success The success block
@param failure The failure block
*/
- (void)groupsForCurrentUserWithPage:(NSUInteger)page success:(void (^)(NSArray *groups))success failure:(void (^)(NSError *error))failure;

@end
22 changes: 22 additions & 0 deletions OAuthSDK/YMAPIClient.m
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,7 @@
#import "YMLoginClient.h"
#import "YMAPIClient.h"
#import "NSURL+YMQueryParameters.h"
#import "YMGroup.h"
#import <sys/utsname.h>

NSString * const YMBaseURL = @"https://www.yammer.com";
Expand Down Expand Up @@ -122,4 +123,25 @@ - (void)postPath:(NSString *)path
}];
}

- (void)groupsForCurrentUserWithPage:(NSUInteger)page
success:(void (^)(NSArray *groups))success
failure:(void (^)(NSError *error))failure
{
NSString *path = @"/api/v1/groups";

NSDictionary *parameters = @{
@"mine" : @YES,
@"page" : @(page)
};

[self.sessionManager GET:path parameters:parameters success:^(NSURLSessionDataTask *task, NSArray *responseObject) {
NSError *error;
NSArray *groups = [MTLJSONAdapter modelsOfClass:YMGroup.class fromJSONArray:responseObject error:&error];

success(groups);
} failure:^(NSURLSessionDataTask *task, NSError *error) {
failure(error);
}];
}

@end
39 changes: 39 additions & 0 deletions OAuthSDK/YMGroup.h
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
//
// YMGroup.h
// Pods
//
// Created by Peter Willsey on 6/3/15.
//
//

#import <Foundation/Foundation.h>
#import <Mantle/MTLModel.h>
#import <Mantle/MTLJSONAdapter.h>

@interface YMGroup : MTLModel <MTLJSONSerializing>

@property (nonatomic, strong, readonly) NSDate *createdAt;
@property (nonatomic, assign, readonly) NSUInteger creatorID;
@property (nonatomic, copy, readonly) NSString *creatorType;
@property (nonatomic, copy, readonly) NSString *groupDescription;
@property (nonatomic, copy, readonly) NSString *fullName;
@property (nonatomic, assign, readonly) NSUInteger groupID;
@property (nonatomic, copy, readonly) NSString *mugshotID;
@property (nonatomic, strong, readonly) NSURL *mugshotURL;
@property (nonatomic, copy, readonly) NSString *mugshotURLTemplate;
@property (nonatomic, copy, readonly) NSString *name;
@property (nonatomic, assign, readonly) NSUInteger networkID;
@property (nonatomic, strong, readonly) NSURL *office365URL;
@property (nonatomic, copy, readonly) NSString *privacy;
@property (nonatomic, assign, readonly) BOOL showInDirectory;
@property (nonatomic, copy, readonly) NSString *state;
@property (nonatomic, strong, readonly) NSDate *lastMessageAt;
@property (nonatomic, assign, readonly) NSUInteger lastMessageID;
@property (nonatomic, assign, readonly) NSUInteger members;
@property (nonatomic, assign, readonly) NSUInteger updates;
@property (nonatomic, strong, readonly) NSURL *URL;
@property (nonatomic, strong, readonly) NSURL *webURL;

- (id)objectForKeyedSubscript:(NSString *)key;

@end
107 changes: 107 additions & 0 deletions OAuthSDK/YMGroup.m
Original file line number Diff line number Diff line change
@@ -0,0 +1,107 @@
//
// YMGroup.m
// Pods
//
// Created by Peter Willsey on 6/3/15.
//
//

#import "YMGroup.h"
#import <Mantle/MTLValueTransformer.h>
#import <Mantle/NSValueTransformer+MTLPredefinedTransformerAdditions.h>

@implementation YMGroup

+ (NSDateFormatter *)dateFormatter {
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
dateFormatter.dateFormat = @"yyyy/MM/dd HH:mm:ss Z ";
return dateFormatter;
}

+ (NSDictionary *)JSONKeyPathsByPropertyKey
{
return @{
@"createdAt" : @"created_at",
@"creatorID" : @"creator_id",
@"creatorType" : @"creator_type",
@"groupDescription" : @"description",
@"fullName" : @"full_name",
@"groupID" : @"id",
@"mugshotID" : @"mugshot_id",
@"mugshotURL" : @"mugshot_url",
@"mugshotURLTemplate" : @"mugshot_url_template",
@"name" : @"name",
@"networkID" : @"network_id",
@"office365URL" : @"office365_url",
@"privacy" : @"privacy",
@"showInDirectory" : @"show_in_directory",
@"state" : @"state",
@"lastMessageAt" : @"stats.last_message_at",
@"lastMessageID" : @"stats.last_message_id",
@"members" : @"stats.members",
@"updates" : @"stats.updates",
@"URL" : @"url",
@"webURL" : @"web_url"
};
}

+ (NSValueTransformer *)standardDateJSONTransformer
{
return [MTLValueTransformer transformerUsingForwardBlock:^id(NSString *value, BOOL *success, NSError *__autoreleasing *error) {
return [self.dateFormatter dateFromString:value];
} reverseBlock:^id(NSDate *value, BOOL *success, NSError *__autoreleasing *error) {
return [self.dateFormatter stringFromDate:value];
}];
}

+ (NSValueTransformer *)createdAtJSONTransformer
{
return [self.class standardDateJSONTransformer];
}

+ (NSValueTransformer *)mugshotURLJSONTransformer
{
return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName];
}

+ (NSValueTransformer *)office365URLJSONTransformer
{
return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName];
}

+ (NSValueTransformer *)showInDirectoryJSONTransformer
{
return [MTLValueTransformer transformerUsingForwardBlock:^id(NSString *value, BOOL *success, NSError *__autoreleasing *error) {
if ([value isKindOfClass:[NSString class]]) {
return ([value isEqualToString:@"true"]) ? @YES : @NO;
} else {
*success = NO;
return nil;
}
} reverseBlock:^id(NSNumber *value, BOOL *success, NSError *__autoreleasing *error) {
return ([value boolValue]) ? @"true" : @"false";
}];
}

+ (NSValueTransformer *)lastMessageAtJSONTransformer
{
return [self.class standardDateJSONTransformer];
}

+ (NSValueTransformer *)URLJSONTransformer
{
return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName];
}

+ (NSValueTransformer *)webURLJSONTransformer
{
return [NSValueTransformer valueTransformerForName:MTLURLValueTransformerName];
}

- (id)objectForKeyedSubscript:(NSString *)key
{
return key ? self.dictionaryValue[key] : nil;
}

@end
8 changes: 4 additions & 4 deletions OAuthSDK/YMLoginClient.h
Original file line number Diff line number Diff line change
Expand Up @@ -5,11 +5,11 @@

#import <Foundation/Foundation.h>

extern NSString * const YMYammerSDKLoginDidCompleteNotification;
extern NSString * const YMYammerSDKLoginDidFailNotification;
FOUNDATION_EXPORT NSString * const YMYammerSDKLoginDidCompleteNotification;
FOUNDATION_EXPORT NSString * const YMYammerSDKLoginDidFailNotification;

extern NSString * const YMYammerSDKAuthTokenUserInfoKey;
extern NSString * const YMYammerSDKErrorUserInfoKey;
FOUNDATION_EXPORT NSString * const YMYammerSDKAuthTokenUserInfoKey;
FOUNDATION_EXPORT NSString * const YMYammerSDKErrorUserInfoKey;

@protocol YMLoginClientDelegate;

Expand Down
1 change: 1 addition & 0 deletions YammerSDK.podspec
Original file line number Diff line number Diff line change
Expand Up @@ -13,4 +13,5 @@ Pod::Spec.new do |s|

s.dependency 'AFNetworking', '~> 2.0'
s.dependency 'PDKeychainBindingsController'
s.dependency 'Mantle'
end