require_relative 'languages_serializer' module PolyglotIos module Serializer module Language class ObjC < Base def render() h_file = ERB.new(h_template, nil, '-').result(binding) m_file = ERB.new(m_template, nil, '-').result(binding) return h_file, m_file end def save(sources_path) FileUtils.mkdir_p sources_path unless File.exist? sources_path h_file, m_file = render() File.write(File.join(sources_path, "Language.h"), h_file) File.write(File.join(sources_path, "Language.m"), m_file) end def h_template() <<-H_TEMPLATE #import @interface Language : NSObject @property (nonatomic, strong, readonly) NSString *name; @property (nonatomic, strong, readonly) NSString *localName; @property (nonatomic, strong, readonly) NSString *locale; @property (nonatomic, strong, readonly) NSString *languageCode; @property (readonly, class) NSArray *allLanguages; <% @languages.each do |language| -%> @property (readonly, class) Language *<%= language.clean_name %>; <% end -%> @end H_TEMPLATE end def m_template() <<-M_TEMPLATE #import "Language.h" @interface Language() @property (nonatomic, strong) NSString *name; @property (nonatomic, strong) NSString *localName; @property (nonatomic, strong) NSString *locale; @property (nonatomic, strong) NSString *languageCode; @end @implementation Language - (instancetype)initWithName:(NSString *)name localName:(NSString *)localName locale:(NSString *)locale languageCode:(NSString *)languageCode { if (self = [super init]) { _name = name; _localName = localName; _locale = locale; _languageCode = languageCode; } return self; } <% @languages.each do |language| -%> + (Language *)<%= language.clean_name %> { return [[Language alloc] initWithName:@"<%= language.name %>" localName:@"<%= language.local_name %>" locale:@"<%= language.locale %>" languageCode:@"<%= language.code %>"]; } <% end -%> + (NSArray *)allLanguages { return @[ <% @languages.each_with_index do |language, i| -%> Language.<%= language.clean_name %><%= i == (@languages.size - 1) ? "" : "," %> <% end -%> ]; } @end M_TEMPLATE end end end end end