class Stronglyboards::SourceGeneratorSwift
Public Class Methods
new(prefix, output_file_name)
click to toggle source
Calls superclass method
Stronglyboards::AbstractSourceGenerator::new
# File lib/stronglyboards/source_generator_swift.rb, line 8 def initialize(prefix, output_file_name) @implementation_file_path = output_file_name + '.swift' super(prefix, @implementation_file_path) end
Public Instance Methods
parse_storyboards()
click to toggle source
# File lib/stronglyboards/source_generator_swift.rb, line 14 def parse_storyboards puts "Source file: #{@implementation_file_path}" # Generate framework imports @implementation_file.write("import UIKit\n\n") # Generate the base storyboard class base_class_name = create_base_storyboard_class # Generate classes for each storyboard @storyboards.each { |s| create_storyboard_class(s, base_class_name) } # Generate the storyboard category create_storyboard_category output_files end
Private Instance Methods
create_base_storyboard_class()
click to toggle source
# File lib/stronglyboards/source_generator_swift.rb, line 34 def create_base_storyboard_class class_name = "#{@prefix}Stronglyboard" output = Array.new(1, "class #{class_name} {") output.push "\tlet storyboard: UIStoryboard" output.push "\tinit(name: String, bundle: NSBundle?) {" output.push "\t\tstoryboard = UIStoryboard(name: name, bundle: bundle)" output.push "\t}" output.push '}' # Convert to string and write to file output = output.join("\n") @implementation_file.write(output + "\n\n") class_name end
create_storyboard_category()
click to toggle source
Generate the category for UIStoryboard with methods for each storyboard that has been provided
# File lib/stronglyboards/source_generator_swift.rb, line 85 def create_storyboard_category output = Array.new(1, 'extension UIStoryboard {') @storyboards.each do |storyboard| class_name = storyboard.class_name(@prefix) func_name = "#{storyboard.lowercase_name(@prefix)}Storyboard" output.push "\tclass func #{func_name}() -> #{class_name} {" output.push "\t\treturn #{class_name}(name: \"#{storyboard.name}\", bundle: nil)" output.push "\t}" end output.push '}' # Convert to a string output = output.join("\n") # Output to file puts 'Writing UIStoryboard category.' @implementation_file.write(output) end
create_storyboard_class(storyboard, base_class_name)
click to toggle source
Generate the class for the provided storyboard
# File lib/stronglyboards/source_generator_swift.rb, line 52 def create_storyboard_class(storyboard, base_class_name) class_name = storyboard.class_name(@prefix) puts "Processing storyboard class #{class_name}." output = Array.new(1, "class #{class_name} : #{base_class_name} {") storyboard.view_controllers.each do |vc| cast = " as! #{vc.class_name}" unless vc.class_name == ViewController::UIVIEWCONTROLLER if vc.initial_view_controller? cast = '!' if vc.class_name == ViewController::UIVIEWCONTROLLER output.push "\tfunc instantiateInitialViewController() -> #{vc.class_name} {" output.push "\t\treturn self.storyboard.instantiateInitialViewController()#{cast}" else output.push "\tfunc instantiate#{vc.storyboard_identifier}ViewController() -> #{vc.class_name} {" output.push "\t\treturn self.storyboard.instantiateViewControllerWithIdentifier(\"#{vc.storyboard_identifier}\") #{cast}" end output.push "\t}" end # view controller iterator # End the storyboard subclass output.push '}' # Convert to string output = output.join("\n") # Output to files @implementation_file.write(output) @implementation_file.write("\n\n") end