$definition_file = nil
require 'fileutils' require “swift_generator/version” require “swift_generator/code_generation/swift_class_generation”
module SwiftGenerator
def write_files_for_definition_set( definition_set )
for _, f in definition_set.output_files SwiftGenerator::writeGeneratedFile( f ) end
end
module_function :write_files_for_definition_set
# files = YAML::load(File.open(ARGV))
# Templated Output Methods def write_element( element )
if( element.kind_of? SwiftCategory ) SwiftGenerator::write_category( element ) elsif( element.kind_of? SwiftProtocol ) SwiftGenerator::write_protocol( element ) elsif( element.kind_of? SwiftEnum ) SwiftGenerator::write_enum( element ) elsif( element.kind_of? SwiftClass ) # Must be last as it is the superclass SwiftGenerator::write_class( element ) end
end
module_function :write_element
def writeGeneratedFile( f )
return if ( f.is_user_file && File.exist?( f.file_path )) Pathname.new( f.file_path ).parent().mkpath()
./!output( f.file_path )
.// .// @{ Pathname.new( f.file_name ).basename } .// @{f.company_name} if $definition_file .// .// Generated from @{$definition_file} on @{Time.now.strftime(“%d/%m/%Y %H:%M”)} end if f.include_editing_warnings
if !f.is_user_file
.// .// WARNING: This entire file is generated. DO NOT EDIT.
else
.// .// This is a user-editable generated file. Delete or rename this file to have a new empty file generated
end
end .// .// Copyright © @{Time.now.strftime(“”)} @{f.company_name}, Inc. All rights reserved. .//
for import_statement in f.import_statements.sort
.&{import_statement}
end for element in f.elements SwiftGenerator::write_element(element) end
end
module_function :writeGeneratedFile
def write_enum( e ) . . .&{e.access_control_modifier}enum @{e.type_name}
if e.inheritance_list.count > 0
. /+ : @{e.inheritance_list.join( “, ” )}
end
. /+ {
e.enum_cases.each_with_index do |enum_case, _| enum_case.declaration_lines().each do |declLine|
. &{declLine}
end end e.properties.each_with_index do |prop, i|
.
prop.declaration_lines().each do |declLine|
. &{declLine}
end end SwiftGenerator::write_methods( e.methods )
. } end module_function :write_enum
def write_class( c ) . . .&{c.access_control_modifier}class @{c.type_name}
if c.inheritance_list.count > 0
. /+ : @{c.inheritance_list.join( “, ” )}
end
. /+ {
SwiftGenerator::write_class_body( c )
.} end module_function :write_class
def write_category( c ) . . .&{c.access_control_modifier}extension @{c.categorized_class_name} /*@{c.type_name || ' '}*/ {
SwiftGenerator::write_class_body( c )
.} end module_function :write_category
def write_class_body( c )
c.top_inner_comment_block().each do |line|
. &{line}
end # SwiftGenerator::write_property_declarations( c.transient_properties, "Transient" ) # SwiftGenerator::write_property_declarations( c.persistent_properties, "Persistent" ) SwiftGenerator::write_property_declarations( c.transient_properties ) SwiftGenerator::write_property_declarations( c.persistent_properties ) SwiftGenerator::write_methods( c.initializers ) SwiftGenerator::write_methods( c.methods )
end module_function :write_class_body
def write_protocol( p ) . . .&{p.access_control_modifier}protocol @{p.type_name}
if p.inheritance_list.count > 0
. /+ : @{p.inheritance_list.join( “, ” )}
end
. /+ {
# SwiftGenerator::write_property_declarations( c.transient_properties, "Transient" ) # SwiftGenerator::write_property_declarations( c.persistent_properties, "Persistent" ) SwiftGenerator::write_property_declarations( p.transient_properties ) SwiftGenerator::write_property_declarations( p.persistent_properties ) SwiftGenerator::write_methods( p.initializers, for_protocol=true ) SwiftGenerator::write_methods( p.methods, for_protocol=true )
.} end module_function :write_protocol
def write_property_declarations( properties, property_type_label=nil )
properties.each_with_index do |prop, i| if i == 0 && ! property_type_label.nil?
. . // MARK: @{property_type_label} Properties
end prop.declaration_lines().each do |declLine|
. &{declLine}
end end
end
module_function :write_property_declarations
def write_methods( methods, for_protocol=false )
methods.each_with_index do |m, i| overrideString = m.override ? 'override ' : ''
.
if ! m.comment.nil?
. &{m.comment}
end args = m.argStr.nil? || m.argStr.empty? ? m.argStr : ' ' + m.argStr + ' ' access_control_modifier_str = m.access_control_modifiers.length > 0 ? m.access_control_modifiers.join( ", " ) + " " : ""
. &{overrideString}&{access_control_modifier_str}&{m.func_fragment + “ ” unless m.func_fragment.length == 0}@{m.name}(&{args})
if ! (m.returns.nil? || m.returns.length == 0 )
. /+ -> @{m.returns}
end unless for_protocol
. /+ {
m.bodyLines.each do |line|
. &{line}
end
. }
end end
end
module_function :write_methods
end