class Udgenerator::Core

Public Class Methods

new() click to toggle source
# File lib/udgenerator.rb, line 20
def initialize
end

Public Instance Methods

capitalize(str) click to toggle source
# File lib/udgenerator/type.rb, line 3
def capitalize(str)
        str[0,1].capitalize + str[1..-1]
end
define(str) click to toggle source
# File lib/udgenerator/type.rb, line 6
def define(str)
        "k" + capitalize(str)
end
exchange(arrStr) click to toggle source
# File lib/udgenerator/type.rb, line 58
def exchange(arrStr)
        Objective.new().parse(arrStr)
end
fileRead(fileName) click to toggle source
# File lib/udgenerator.rb, line 23
def fileRead(fileName)
        if (File.exist?(fileName)) then
                File.open(fileName, :encoding => Encoding::UTF_8).read.scan(/(.*)\n/).flatten
        else
                []
        end
end
generator(options) click to toggle source
# File lib/udgenerator.rb, line 8
def generator(options)
        FileUtils.mkdir_p(options[:output]) unless FileTest.exist?(options[:output])

        if options[:swift] then
                arrType = swift_exchange(self.fileRead(options[:input]))
                File.open("#{options[:output]}#{options[:file_name]}.swift", "w:UTF-8").write swift(arrType, options[:file_name], options[:auto_init])
        else
                arrType = exchange(self.fileRead(options[:input]))
                File.open("#{options[:output]}#{options[:file_name]}.h", "w:UTF-8").write header(arrType, options[:file_name], options[:auto_init])
                File.open("#{options[:output]}#{options[:file_name]}.m", "w:UTF-8").write method(arrType, options[:file_name], options[:auto_init])
        end
end
getter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 12
def getter(key, value)
        "- (#{value.type_name})#{key}"
end
header(arrType, fileName, register) click to toggle source
# File lib/udgenerator.rb, line 37
def header(arrType, fileName, register)
        result = ""
        arrType.each_pair{|k, v| result += interface(k, v) + "\n"}
        "\#import <Foundation/Foundation.h>\n\n" +
                imp_defines(arrType) +
                "\n\@interface #{fileName} : NSObject\n\n+ (instancetype)sharedManager;\n#{self.registHeader(register)}\n" + result +
                "\@end\n"
end
impGetter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 40
def impGetter(key, value)
        "#{getter(key, value)} \{\n#{in_imp_getter(key, value)}\}\n"
end
impSetter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 46
def impSetter(key, value)
        "#{setter(key, value)} \{\n#{in_imp_setter(key, value)}\}\n"
end
imp_define(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 27
def imp_define(key, value)
        "\#define #{define(key)} #{to_nsstring(key)}\n"
end
imp_defines(arrType) click to toggle source
# File lib/udgenerator.rb, line 60
def imp_defines(arrType)
        result = ""
        arrType.each_pair{|s, d| result += imp_define(s, d)}
        result
end
implementation(arrType) click to toggle source
# File lib/udgenerator.rb, line 65
def implementation(arrType)
        result = ""
        arrType.each_pair{|s, d| result += impGetter(s, d) + impSetter(s, d) + "\n"}
        result
end
in_imp_getter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 37
def in_imp_getter(key, value)
        "    return [defaults #{value.imp_get_message}:#{define(key)}];\n"
end
in_imp_setter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 43
def in_imp_setter(key, value)
        "    [defaults #{value.imp_set_message}:#{key} forKey:#{define(key)}];\n    [defaults synchronize];\n"
end
init(arrType, register) click to toggle source
# File lib/udgenerator.rb, line 53
def init(arrType, register)
        if (register)
                "- (id)init {\n    self = [super init];\n    if (self != nil) {\n        defaults = [NSUserDefaults standardUserDefaults];\n#{registerDefaults(arrType)}    }\n\n    return self;\n}\n"
        else
                "- (id)init {\n    self = [super init];\n    if (self != nil) {\n        defaults = [NSUserDefaults standardUserDefaults];\n    }\n\n    return self;\n}\n- (void)registerDefaults:(NSDictionary *)dict {\n    [defaults registerDefaults:dict];\n}\n"
        end
end
interface(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 24
def interface(key, value)
        interface_getter(key, value) + interface_setter(key, value)
end
interface_getter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 15
def interface_getter(key, value)
        getter(key, value) + ";\n"
end
interface_setter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 21
def interface_setter(key, value)
        setter(key, value) + ";\n"
end
method(arrType, fileName, register) click to toggle source
# File lib/udgenerator.rb, line 70
def method(arrType, fileName, register)
        "\#import \"#{fileName}.h\"\n\n" +
                "\@implementation #{fileName} {\n    NSUserDefaults *defaults;\n}\n\n+ (instancetype)sharedManager {\n    static #{fileName} *sharedManager_ = nil;\n    static dispatch_once_t onceToken;\n    dispatch_once(&onceToken, ^{\n        sharedManager_ = #{fileName}.new;\n    });\n\n    return sharedManager_;\n}\n\n" +
                self.init(arrType, register) + "\n" +
                self.implementation(arrType) +
                "@end\n"
end
registHeader(register) click to toggle source
# File lib/udgenerator.rb, line 30
def registHeader(register)
        if (register)
                ""
        else
                "- (void)registerDefaults:(NSDictionary *)dict;\n"
        end
end
registerDefaults(arrType) click to toggle source
# File lib/udgenerator.rb, line 45
def registerDefaults(arrType)
        result = ""
        arrType.each_pair{|k, v|
                d = register_default(k, v)
                result += " "*12 + d + ",\n" if d != ""
        }
        "        [defaults registerDefaults:@{\n" + result + "        }];\n"
end
register_default(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 30
def register_default(key, value)
        if (0 < value.defaultValue.length ) then
                "#{define(key)} : #{value.defaultValue}"
        else
                ""
        end
end
registers(arrType, fileName) click to toggle source
# File lib/udgenerator.rb, line 107
def registers(arrType, fileName)
        if (arrType.count == 0) then
                "[:]"
        else
                result = ""
                arrType.each_pair{|k, v| result += swift_register_default(k, v, fileName)}
                "[\n#{result}        ]"
        end
end
setter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 18
def setter(key, value)
        "- (void)set#{capitalize(key)}:(#{value.type_name})#{key}"
end
struct(key) click to toggle source
# File lib/udgenerator/type.rb, line 49
def struct(key)
        "    static let #{key} = \"#{key}\""
end
structs(arrType) click to toggle source
# File lib/udgenerator.rb, line 116
def structs(arrType)
        result = ""
        arrType.each_pair{|s, d| result += struct(s) + "\n"}
        result
end
swift(arrType, fileName, register) click to toggle source
# File lib/udgenerator.rb, line 77
                def swift(arrType, fileName, register)
                        "import Foundation\n\nstruct #{fileName}Register {\n#{structs(arrType)}}\n\nclass #{fileName} {" + '
    class func sharedManager() -> UserDefaults {
        struct Static {
            static let instance = UserDefaults()
        }
        return Static.instance
    }
    init() {
' + swift_register_defaults(arrType, fileName, register) + '
    }
    func defaults() -> NSUserDefaults {
        return NSUserDefaults.standardUserDefaults()
    }
    func set(value: AnyObject?, forKey: String) {
        defaults().setObject(value, forKey: forKey)
        defaults().synchronize()
    }
    func get(key: String) -> AnyObject? {
        return defaults().objectForKey(key)
    }
' + swift_get_sets(arrType, fileName) + "}\n"
                end
swift_exchange(arrStr) click to toggle source
# File lib/udgenerator/type.rb, line 61
def swift_exchange(arrStr)
        Swift.new().parse(arrStr)
end
swift_get_sets(arrType, fileName) click to toggle source
# File lib/udgenerator.rb, line 121
def swift_get_sets(arrType, fileName)
        result = ""
        arrType.each_pair{|s, d| result += "\n    #{swift_getter(s, d)} {\n        return get(#{fileName}Register.#{s}) as! #{d.swift_type_name}\n    }\n    #{swift_setter(s, d)} {\n        set(#{s}, forKey: #{fileName}Register.#{s})\n    }\n"}
        result
end
swift_getter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 52
def swift_getter(key, value)
        "func #{key}() -> #{value.swift_type_name}"
end
swift_register_default(key, value, fileName) click to toggle source
# File lib/udgenerator/type.rb, line 64
def swift_register_default(key, value, fileName)
        if (0 < value.swift_default_value.length) then
                " "*12 + "#{fileName}Register.#{key}: #{value.swift_default_value},\n"
        else
                ""
        end
end
swift_register_defaults(arrType, fileName, register) click to toggle source
# File lib/udgenerator.rb, line 100
def swift_register_defaults(arrType, fileName, register)
        if register then
                "        defaults().registerDefaults(" + registers(arrType, fileName) + ")"
        else
                "    }\n    func registerDefaults(dict: [String: AnyObject]) {\n        defaults().registerDefaults(dict)"
        end
end
swift_setter(key, value) click to toggle source
# File lib/udgenerator/type.rb, line 55
def swift_setter(key, value)
        "func set#{capitalize(key)}(#{key}: #{value.swift_type_name})"
end
to_nsstring(str) click to toggle source
# File lib/udgenerator/type.rb, line 9
def to_nsstring(str)
        '@"' + str + '"'
end