Class: Evva::AndroidGenerator

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

Constant Summary collapse

KOTLIN_EVENT_HEADER =
"package com.hole19golf.hole19.analytics\n\n"\
"import com.hole19golf.hole19.analytics.Event\n"\
"import com.hole19golf.hole19.analytics.MixpanelAnalyticsMask\n"\
"import org.json.JSONObject\n\n"\
"open class MixpanelEvents(private val mixpanelMask: MixpanelAnalyticsMask) {\n".freeze
KOTLIN_PEOPLE_HEADER =
"package com.hole19golf.hole19.analytics\n"\
"import com.hole19golf.hole19.analytics.Event\n\n"\
"enum class MixpanelProperties(val key: String) {\n".freeze
KOTLIN_BUNDLE_HEADER =
"package com.hole19golf.hole19.analytics\n"\
"import com.hole19golf.hole19.analytics.Event\n\n"\
"enum class MixpanelEvent(override val key: String) : Event {\n".freeze
KOTIN_PEOPLE_FUNCTIONS =
"\topen fun updateProperties(property: MixpanelProperties, value: Any) {\n"\
"\t\tmixpanelMask.updateProperties(property.key, value)"\
"\t\n} \n"\
"\topen fun incrementCounter(property: MixpanelProperties) {\n"\
"\t\tmixpanelMask.incrementCounter(property.key)"\
"\t\n} \n".freeze
NATIVE_TYPES =
%w[Long Int String Double Float Boolean].freeze

Instance Method Summary collapse

Instance Method Details

#event_enum(bundle) ⇒ Object



45
46
47
48
49
# File 'lib/evva/android_generator.rb', line 45

def event_enum(bundle)
  event_file = KOTLIN_BUNDLE_HEADER
  event_file += bundle.map { |event| "\t\t#{event.event_name.upcase}(\"#{event.event_name}\")"}.join(", \n")
  event_file += "\n}\n"
end

#events(bundle) ⇒ Object



30
31
32
33
34
35
36
37
# File 'lib/evva/android_generator.rb', line 30

def events(bundle)
  event_file = KOTLIN_EVENT_HEADER
  bundle.each do |event|
    event_file += "\n#{kotlin_function(event)}"
  end
  event_file += KOTIN_PEOPLE_FUNCTIONS
  event_file += "\n}"
end

#kotlin_function(event_data) ⇒ Object



51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
# File 'lib/evva/android_generator.rb', line 51

def kotlin_function(event_data)
  function_name = 'track' + titleize(event_data.event_name)
  function_arguments = event_data.properties.map { |name, type| "#{name}: #{type}" }.join(', ')
  if !function_arguments.empty?
    props = json_props(event_data.properties)
    function_body =
      "open fun #{function_name}(#{function_arguments}) {"\
      "#{props}"\
      "\tmixpanelMask.trackEvent(MixpanelEvent.#{event_data.event_name.upcase}, properties)\n"
  else
    function_body =
      "open fun #{function_name}() {\n"\
      "\tmixpanelMask.trackEvent(MixpanelEvent.#{event_data.event_name.upcase})\n"
  end
  function_body += "}\n"
end

#people_properties(people_bundle) ⇒ Object



39
40
41
42
43
# File 'lib/evva/android_generator.rb', line 39

def people_properties(people_bundle)
  properties = KOTLIN_PEOPLE_HEADER
  properties += people_bundle.map { |prop| "\t\t#{prop.upcase}(\"#{prop}\")" }.join(",\n")
  properties += ";\n}\n"
end

#special_property_enum(enum) ⇒ Object



68
69
70
71
72
73
# File 'lib/evva/android_generator.rb', line 68

def special_property_enum(enum)
  enum_body = "package com.hole19golf.hole19.analytics\n\n"
  enum_body += "enum class #{enum.enum_name}(val key: String) {\n"
  enum_body += enum.values.map { |vals| "\t#{vals.tr(' ', '_').upcase}(\"#{vals}\")"}.join(",\n")
  enum_body += "\n}\n"
end