Sha256: 1de3084fea81f0fac1b3f40b2a60e65dddfe4d891a632c394644054999730b20

Contents?: true

Size: 1.65 KB

Versions: 5

Compression:

Stored size: 1.65 KB

Contents

class IB::Generator
  def write files, dest
    files = IB::Parser.new.find_all(files)

    FileUtils.mkpath dest

    File.open("#{dest}/Stubs.h", 'w') do |f|
      f.write <<-OBJC
// Generated by IB v#{IB::VERSION} gem. Do not edit it manually
// Run `rake ib:open` to refresh

#import <Foundation/Foundation.h>
#import <CoreData/CoreData.h>
#import <UIKit/UIKit.h>

#{generate_objc(files)}
OBJC
    end

    File.open("#{dest}/Stubs.m", 'w') do |f|
      f.write <<-OBJC
// Generated by IB v#{IB::VERSION} gem. Do not edit it manually
// Run `rake ib:open` to refresh

#import "Stubs.h"

#{generate_objc_impl(files)}
OBJC
    end

  end

  def generate_objc files
    output = ""
    files.map do |path, infos|
      infos.each do |info|
        output << <<-OBJC
@interface #{info[:class][0][0]}#{info[:class][0][1] ? ": #{info[:class][0][1]}" : ""}

#{info[:outlets].map {|name, type| "@property IBOutlet #{generate_type(type)} #{name};" }.join("\n")}

#{info[:outlet_collections].map {|name, type| "@property IBOutletCollection(#{type}) NSArray * #{name};" }.join("\n")}

#{info[:actions].map {|action| "-(IBAction) #{generate_action(action)};" }.join("\n")}

@end
OBJC
        output << "\n\n"
      end
    end
    output
  end

  def generate_objc_impl files
    output = ""
    files.map do |path, infos|
      infos.each do |info|
        output << <<-OBJC
@implementation #{info[:class][0][0]}

@end
OBJC
        output << "\n\n"
      end
    end
    output
  end

  def generate_type type
    type == "id" ? type : "#{type} *"
  end

  def generate_action action
    action[1] ? "#{action[0]}:(#{action[2] ? "#{action[2]}*" : 'id'}) #{action[1]}" : "#{action[0]}"
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
ib-0.3.4 lib/ib/generator.rb
ib-0.3.3 lib/ib/generator.rb
ib-0.3.2 lib/ib/generator.rb
ib-0.3.1 lib/ib/generator.rb
ib-0.3.0 lib/ib/generator.rb