require_relative '../base' module Analytics module Serializer class ObjC < Base class Screen def initialize(src) @src = src end def save(path) @class_name = 'AnalyticsScreen' @file_name = @class_name + '.h' output_path = File.join(path, @file_name) File.write(output_path, render_h) @file_name = @class_name + '.m' output_path = File.join(path, @file_name) File.write(output_path, render_m) end private def render_h ERB.new(template_h, nil, '-').result(binding) end def template_h <<~TEMPLATE <%= ERB.new(Analytics::Templates.tmpl_at('header.erb')).result(binding) %> #import NS_ASSUME_NONNULL_BEGIN __swift_unavailable("This class is only available in ObjC.") @interface <%= @class_name %> : NSObject @property (nonatomic, strong, readonly) NSString *name; - (instancetype)init NS_UNAVAILABLE; + (instancetype)new NS_UNAVAILABLE; #pragma mark - Screens <% @src['screens'].each do |screen| %> /// <%= screen['description'] %> + (instancetype)<%= screen['name'].camel_case %>; <% end %> @end NS_ASSUME_NONNULL_END TEMPLATE end def render_m ERB.new(template_m, nil, '-').result(binding) end def template_m <<~TEMPLATE <%= ERB.new(Analytics::Templates.tmpl_at('header.erb')).result(binding) %> #import "<%= @class_name + '.h' %>" @implementation <%= @class_name %> - (instancetype)initWithName:(NSString *)name { if (self = [super init]) { _name = name; } return self; } #pragma mark - Screens <% @src['screens'].each do |screen| %> + (instancetype)<%= screen['name'].camel_case %> { return [[self alloc] initWithName:@"<%= screen['name'] %>"]; } <% end -%> @end TEMPLATE end end end end end