Skip to content

Instantly share code, notes, and snippets.

@brianjriddle
Created April 25, 2013 06:50
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 brianjriddle/5457973 to your computer and use it in GitHub Desktop.
Save brianjriddle/5457973 to your computer and use it in GitHub Desktop.
a little boilerplate for creating objective-c classes from json data
require 'json'
require 'open-uri'
def camel_case(string)
return string.split('_').map{|e| e.capitalize}.join
end
def camel_case_lower(s) s.split('_').inject([]){ |buffer,e| buffer.push(buffer.empty? ? e : e.capitalize) }.join
end
json = JSON.load(open(ARGV[0]))
#json["results"][0]["availability"].each do |k,v|
json["results"][0].each do |k,v|
case v.class.to_s
when "TrueClass", "FalseClass"
bool_name = k.gsub(/^is/, '')
puts "@property (nonatomic, assign, getter = is#{camel_case bool_name}) BOOL #{camel_case_lower k};"
when "String"
puts "@property (nonatomic, strong) NSString *#{camel_case_lower k};"
when "Array"
puts "@property (nonatomic, strong) NSArray *#{camel_case_lower k};"
when "Fixnum"
puts "@property (nonatomic) NSInteger #{camel_case_lower k};"
when "NilClass"
puts "@property (nonatomic, strong) NSObject *#{camel_case_lower k};"
when "Hash"
puts "@property (nonatomic, strong) #{camel_case k} *#{camel_case_lower k};"
else
puts "FIX ME " + v.class.to_s + " " + k
end
end
puts "- (id)initWithDictionary:(NSDictionary *)dictionary {"
puts "if (self = [super init]) {"
json["results"][0].each do |k,v|
case v.class.to_s
when "TrueClass", "FalseClass"
puts %Q{self.#{camel_case_lower k} = [dictionary booleanForKey:@"#{k}" defaultValue:NO];}
when "String", "NilClass"
puts %Q{self.#{camel_case_lower k} = [dictionary stringForKey:@"#{k}"];}
when "Array"
puts %Q{self.#{camel_case_lower k} = [dictionary stringsForKey:@"#{k}"];}
when "Fixnum"
puts %Q{self.#{camel_case_lower k} = [dictionary integerForKey:@"#{k}" defaultValue:-1];}
when "Hash"
puts %Q{self.#{camel_case_lower k} = [dictionary mappedObjectForKey:@"#{k}" type:[#{camel_case k} class]];}
else
puts "FIX ME " + v.class.to_s + " " + k
end
end
puts "}
return self;
"
puts "}"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment