class Evva::AndroidGenerator

Constants

IMPORT_EVENT
IMPORT_JSON
IMPORT_MASK
NATIVE_TYPES

Attributes

package_name[RW]

Public Class Methods

new(package_name) click to toggle source
# File lib/evva/android_generator.rb, line 5
def initialize(package_name)
  @package_name = package_name
end

Public Instance Methods

event_enum(bundle, file_name) click to toggle source
# File lib/evva/android_generator.rb, line 40
def event_enum(bundle, file_name)
  header_footer_wrapper([IMPORT_EVENT]) do
    body = "enum class #{file_name}(override val key: String) : Event {\n"
    body << bundle.map(&:event_name).map { |prop| "\t#{prop.upcase}(\"#{prop}\")" }.join(",\n")
    body << ";\n}"
  end
end
events(bundle, file_name) click to toggle source
# File lib/evva/android_generator.rb, line 15
    def events(bundle, file_name)
      header_footer_wrapper([IMPORT_EVENT, IMPORT_MASK, IMPORT_JSON]) do
"""open class #{file_name}(private val mask: MixpanelAnalyticsMask) {

#{bundle.map { |e| kotlin_function(e) }.join("\n\n")}

\topen fun updateProperties(property: MixpanelProperties, value: Any) {
\t\tmask.updateProperties(property.key, value)
\t}

\topen fun incrementCounter(property: MixpanelProperties) {
\t\tmask.incrementCounter(property.key)
\t}
}"""
      end
    end
people_properties(people_bundle, file_name) click to toggle source
# File lib/evva/android_generator.rb, line 32
def people_properties(people_bundle, file_name)
  header_footer_wrapper do
    body = "enum class MixpanelProperties(val key: String) {\n"
    body << people_bundle.map { |prop| "\t#{prop.upcase}(\"#{prop}\")" }.join(",\n")
    body << ";\n}"
  end
end
special_property_enums(enums) click to toggle source
# File lib/evva/android_generator.rb, line 48
def special_property_enums(enums)
  header_footer_wrapper do
    enums.map do |enum|
      body = "enum class #{enum.enum_name}(val key: String) {\n"
      body << enum.values.map { |vals| "\t#{vals.tr(' ', '_').upcase}(\"#{vals}\")"}.join(",\n")
      body << ";\n}"
    end.join("\n\n")
  end
end

Private Instance Methods

imports_header(imports = []) click to toggle source
# File lib/evva/android_generator.rb, line 60
def imports_header(imports = [])
  return unless imports.length > 0
  imports.map { |ev| ev. gsub("packagename", @package_name) }
         .join("\n") + "\n\n"
end
json_props(properties) click to toggle source
# File lib/evva/android_generator.rb, line 95
def json_props(properties)
  split_properties =
    properties
    .map do |name, type|
      if special_property?(type)
        if optional_property?(type)
          "#{name}?.let { put(\"#{name}\", it.key) }"
        else
          "put(\"#{name}\", #{name}.key)"
        end
      else
        if optional_property?(type)
          "#{name}?.let { put(\"#{name}\", it) }"
        else
          "put(\"#{name}\", #{name})"
        end
      end
    end
    .map { |line| "\t\t\t#{line}" }
    .join("\n")

  "\t\tval properties = JSONObject().apply {\n#{split_properties}\n\t\t}"
end
kotlin_function(event_data) click to toggle source
# File lib/evva/android_generator.rb, line 78
    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)
"""\topen fun #{function_name}(#{function_arguments}) {
#{props}
\t\tmask.trackEvent(MixpanelEvent.#{event_data.event_name.upcase}, properties)
\t}"""

      else
"""\topen fun #{function_name}() {
\t\tmask.trackEvent(MixpanelEvent.#{event_data.event_name.upcase})
\t}"""
      end
    end
optional_property?(type) click to toggle source
# File lib/evva/android_generator.rb, line 123
def optional_property?(type)
  type.include?('?')
end
special_property?(type) click to toggle source
# File lib/evva/android_generator.rb, line 119
def special_property?(type)
  !NATIVE_TYPES.include?(type.chomp('?'))
end
titleize(str) click to toggle source
# File lib/evva/android_generator.rb, line 127
def titleize(str)
  str.split('_').collect(&:capitalize).join
end