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