Class: Evva::SwiftGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/evva/swift_generator.rb

Constant Summary collapse

EXTENSION_HEADER =
"\nimport Foundation\n\n"\
"extension Analytics {\n\n".freeze
"\n\n}\n"
NATIVE_TYPES =
%w[Int String Double Float Bool].freeze

Instance Method Summary collapse

Instance Method Details

#event_case(event_data) ⇒ Object



26
27
28
29
30
31
32
33
34
# File 'lib/evva/swift_generator.rb', line 26

def event_case(event_data)
  function_name = camelize(event_data.event_name)
  if event_data.properties.empty?
    "\t\tcase #{function_name}"
  else
    trimmed_properties = event_data.properties.map { |k, v| k.to_s + ': ' + native_type(v) }.join(", ")
    "\t\tcase #{function_name}(#{trimmed_properties})"
  end
end

#event_data(event_data) ⇒ Object



36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/evva/swift_generator.rb', line 36

def event_data(event_data)
  function_name = camelize(event_data.event_name)
  if event_data.properties.empty?
    function_body = "\t\t\tcase .#{function_name}:\n" \
                    "\t\t\t\treturn EventData(name: \"#{event_data.event_name}\")"
  else
    function_header = prepend_let(event_data.properties)
    function_arguments = dictionary_pairs(event_data.properties)
    function_body = "\t\t\tcase .#{function_name}(#{function_header}):\n"\
                    "\t\t\t\treturn EventData(name: \"#{event_data.event_name}\", properties: [\n"\
                    "\t\t\t\t\t#{function_arguments.join(",\n\t\t\t\t\t")} ]\n"\
                    "\t\t\t\t)"
  end
  function_body
end

#event_enum(enum, file_name) ⇒ Object



52
53
54
# File 'lib/evva/swift_generator.rb', line 52

def event_enum(enum, file_name)
  # empty
end

#events(bundle, file_name) ⇒ Object



12
13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/evva/swift_generator.rb', line 12

def events(bundle, file_name)
  header_footer_wrapper do
"""\tenum Event {
#{bundle.map { |e| event_case(e) }.join("\n")}

\t\tvar data: EventData {
\t\t\tswitch self {
#{bundle.map { |e| event_data(e) }.join("\n\n")}
\t\t\t}
\t\t}
\t}"""
  end
end

#people_properties(people_bundle, file_name) ⇒ Object



56
57
58
59
60
61
62
63
64
# File 'lib/evva/swift_generator.rb', line 56

def people_properties(people_bundle, file_name)
  header_footer_wrapper do
    props = "\tenum Property: String {\n"
    people_bundle.each do |prop|
      props << "\t\tcase #{camelize(prop)} = \"#{prop}\"\n"
    end
    props << "\t}"
  end
end

#special_property_enums(enums) ⇒ Object



66
67
68
69
70
71
72
73
74
75
76
# File 'lib/evva/swift_generator.rb', line 66

def special_property_enums(enums)
  header_footer_wrapper do
    enums.map do |enum|
      body = "\tenum #{enum.enum_name}: String {\n"
      enum.values.each do |value|
        body << "\t\tcase #{camelize(value)} = \"#{value}\"\n"
      end
      body << "\t}"
    end.join("\n\n")
  end
end