evva 0.2.0 → 0.4.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.rubocop_todo.yml +10 -10
- data/Gemfile +0 -1
- data/Gemfile.lock +3 -6
- data/README.md +3 -2
- data/changelog.md +18 -2
- data/lib/evva/{mixpanel_enum.rb → analytics_enum.rb} +2 -1
- data/lib/evva/analytics_event.rb +17 -0
- data/lib/evva/analytics_property.rb +17 -0
- data/lib/evva/android_generator.rb +142 -84
- data/lib/evva/config.rb +12 -2
- data/lib/evva/google_sheet.rb +43 -25
- data/lib/evva/swift_generator.rb +91 -81
- data/lib/evva/templates/kotlin/base.kt +7 -0
- data/lib/evva/templates/kotlin/destinations.kt +5 -0
- data/lib/evva/templates/kotlin/event_enum.kt +5 -0
- data/lib/evva/templates/kotlin/events.kt +36 -0
- data/lib/evva/templates/kotlin/people_properties.kt +26 -0
- data/lib/evva/templates/kotlin/people_properties_enum.kt +5 -0
- data/lib/evva/templates/kotlin/special_property_enums.kt +10 -0
- data/lib/evva/templates/swift/base.swift +7 -0
- data/lib/evva/templates/swift/destinations.swift +5 -0
- data/lib/evva/templates/swift/events.swift +66 -0
- data/lib/evva/templates/swift/people_properties.swift +50 -0
- data/lib/evva/templates/swift/special_property_enums.swift +10 -0
- data/lib/evva/version.rb +2 -2
- data/lib/evva.rb +14 -4
- data/spec/evva_spec.rb +3 -5
- data/spec/fixtures/sample_public_events.csv +4 -4
- data/spec/fixtures/sample_public_people_properties.csv +4 -3
- data/spec/fixtures/test.yml +5 -3
- data/spec/lib/evva/android_generator_spec.rb +163 -69
- data/spec/lib/evva/config_spec.rb +7 -3
- data/spec/lib/evva/google_sheet_spec.rb +25 -7
- data/spec/lib/evva/swift_generator_spec.rb +157 -40
- metadata +17 -6
- data/.ruby-version +0 -1
- data/evva_config.yml +0 -14
- data/lib/evva/mixpanel_event.rb +0 -13
data/lib/evva/swift_generator.rb
CHANGED
@@ -1,121 +1,132 @@
|
|
1
|
+
require 'erb'
|
2
|
+
|
1
3
|
module Evva
|
2
4
|
class SwiftGenerator
|
3
|
-
|
4
|
-
|
5
|
-
|
5
|
+
BASE_TEMPLATE = File.expand_path("./templates/swift/base.swift", __dir__)
|
6
|
+
EVENTS_TEMPLATE = File.expand_path("./templates/swift/events.swift", __dir__)
|
7
|
+
PEOPLE_PROPERTIES_TEMPLATE = File.expand_path("./templates/swift/people_properties.swift", __dir__)
|
8
|
+
SPECIAL_PROPERTY_ENUMS_TEMPLATE = File.expand_path("./templates/swift/special_property_enums.swift", __dir__)
|
9
|
+
DESTINATIONS_TEMPLATE = File.expand_path("./templates/swift/destinations.swift", __dir__)
|
6
10
|
|
7
|
-
|
8
|
-
"\n\n}\n"
|
11
|
+
TAB_SIZE = " " # \t -> 4 spaces
|
9
12
|
|
10
|
-
NATIVE_TYPES = %w[Int String Double Float Bool].freeze
|
13
|
+
NATIVE_TYPES = %w[Int String Double Float Bool Date].freeze
|
11
14
|
|
12
|
-
def events(bundle,
|
15
|
+
def events(bundle, _file_name, _enums_file_name, _destinations_file_name)
|
13
16
|
header_footer_wrapper do
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
17
|
+
events = bundle.map do |event|
|
18
|
+
properties = event.properties.map { |k, v|
|
19
|
+
type = native_type(v)
|
20
|
+
|
21
|
+
value_fetcher = k.to_s
|
22
|
+
|
23
|
+
if is_special_property?(type)
|
24
|
+
if type.end_with?('?')
|
25
|
+
# optional value, we need ? to access a parameter
|
26
|
+
value_fetcher += "?"
|
27
|
+
end
|
28
|
+
value_fetcher += ".rawValue"
|
29
|
+
end
|
30
|
+
|
31
|
+
{
|
32
|
+
name: k.to_s,
|
33
|
+
type: type,
|
34
|
+
value: value_fetcher,
|
35
|
+
}
|
36
|
+
}
|
37
|
+
|
38
|
+
{
|
39
|
+
case_name: camelize(event.event_name),
|
40
|
+
event_name: event.event_name,
|
41
|
+
properties: properties,
|
42
|
+
destinations: event.destinations.map { |p| camelize(p) },
|
43
|
+
}
|
44
|
+
end
|
45
|
+
|
46
|
+
template_from(EVENTS_TEMPLATE).result(binding)
|
23
47
|
end
|
24
48
|
end
|
25
49
|
|
26
|
-
def
|
27
|
-
|
28
|
-
if event_data.properties.empty?
|
29
|
-
"\t\tcase #{function_name}"
|
30
|
-
else
|
31
|
-
trimmed_properties = event_data.properties.map { |k, v| k.to_s + ': ' + native_type(v) }.join(", ")
|
32
|
-
"\t\tcase #{function_name}(#{trimmed_properties})"
|
33
|
-
end
|
50
|
+
def event_enum
|
51
|
+
# empty
|
34
52
|
end
|
35
53
|
|
36
|
-
def
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
54
|
+
def people_properties(people_bundle, _file_name, _enums_file_name, _destinations_file_name)
|
55
|
+
header_footer_wrapper do
|
56
|
+
properties = people_bundle.map do |p|
|
57
|
+
type = native_type(p.type)
|
58
|
+
{
|
59
|
+
case_name: camelize(p.property_name),
|
60
|
+
property_name: p.property_name,
|
61
|
+
type: type,
|
62
|
+
is_special_property: is_special_property?(type),
|
63
|
+
destinations: p.destinations.map { |p| camelize(p) },
|
64
|
+
}
|
65
|
+
end
|
66
|
+
|
67
|
+
template_from(PEOPLE_PROPERTIES_TEMPLATE).result(binding)
|
48
68
|
end
|
49
|
-
function_body
|
50
69
|
end
|
51
70
|
|
52
|
-
def
|
71
|
+
def people_properties_enum
|
53
72
|
# empty
|
54
73
|
end
|
55
74
|
|
56
|
-
def
|
75
|
+
def special_property_enums(enums_bundle)
|
57
76
|
header_footer_wrapper do
|
58
|
-
|
59
|
-
|
60
|
-
|
77
|
+
enums = enums_bundle.map do |enum|
|
78
|
+
values = enum.values.map do |value|
|
79
|
+
{
|
80
|
+
case_name: camelize(value),
|
81
|
+
value: value
|
82
|
+
}
|
83
|
+
end
|
84
|
+
|
85
|
+
{
|
86
|
+
name: enum.enum_name,
|
87
|
+
values: values
|
88
|
+
}
|
61
89
|
end
|
62
|
-
|
90
|
+
|
91
|
+
template_from(SPECIAL_PROPERTY_ENUMS_TEMPLATE).result(binding)
|
63
92
|
end
|
64
93
|
end
|
65
94
|
|
66
|
-
def
|
95
|
+
def destinations(destinations_bundle, _file_name)
|
67
96
|
header_footer_wrapper do
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
body << "\t\tcase #{camelize(value)} = \"#{value}\"\n"
|
72
|
-
end
|
73
|
-
body << "\t}"
|
74
|
-
end.join("\n\n")
|
97
|
+
destinations = destinations_bundle.map { |p| camelize(p) }
|
98
|
+
|
99
|
+
template_from(DESTINATIONS_TEMPLATE).result(binding)
|
75
100
|
end
|
76
101
|
end
|
77
102
|
|
78
103
|
private
|
79
104
|
|
80
105
|
def header_footer_wrapper
|
81
|
-
|
82
|
-
|
83
|
-
|
106
|
+
content = yield
|
107
|
+
.gsub(/^/, "\t").gsub(/^\t+$/, "") # add tabs, unless it's an empty line
|
108
|
+
.chop # trim trailing newlines created by sublime
|
84
109
|
|
85
|
-
|
86
|
-
|
87
|
-
#{yield.gsub("\t", " ")}
|
88
|
-
}
|
89
|
-
"""
|
110
|
+
template_from(BASE_TEMPLATE).result(binding).gsub("\t", TAB_SIZE)
|
90
111
|
end
|
91
112
|
|
92
|
-
def
|
93
|
-
|
94
|
-
pair = "\"#{name}\": #{name}"
|
95
|
-
if is_raw_representable_property?(type)
|
96
|
-
if is_optional_property?(type)
|
97
|
-
pair += "?"
|
98
|
-
end
|
99
|
-
pair += ".rawValue"
|
100
|
-
end
|
101
|
-
pair += " as Any"
|
102
|
-
end
|
103
|
-
end
|
113
|
+
def template_from(path)
|
114
|
+
file = File.read(path)
|
104
115
|
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
def is_optional_property?(type)
|
110
|
-
type.end_with?('?')
|
116
|
+
# - 2nd argument (nil) changes nothing
|
117
|
+
# - 3rd argument activates trim mode using "-" so that you can decide to
|
118
|
+
# not include a line (useful on loops and if statements)
|
119
|
+
ERB.new(file, nil, '-')
|
111
120
|
end
|
112
121
|
|
113
122
|
def native_type(type)
|
114
|
-
type
|
123
|
+
type
|
124
|
+
.gsub('Boolean','Bool')
|
125
|
+
.gsub('Long', 'Int')
|
115
126
|
end
|
116
127
|
|
117
|
-
def
|
118
|
-
|
128
|
+
def is_special_property?(type)
|
129
|
+
!NATIVE_TYPES.include?(type.chomp('?'))
|
119
130
|
end
|
120
131
|
|
121
132
|
def camelize(term)
|
@@ -125,6 +136,5 @@ extension Analytics {
|
|
125
136
|
string.gsub!("/".freeze, "::".freeze)
|
126
137
|
string
|
127
138
|
end
|
128
|
-
|
129
139
|
end
|
130
140
|
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
sealed class <%= class_name %>(
|
2
|
+
event: <%= enums_class_name %>,
|
3
|
+
val properties: Map<String, Any?>? = null,
|
4
|
+
val destinations: Array<<%= destinations_class_name %>> = emptyArray()
|
5
|
+
) {
|
6
|
+
val name = event.key
|
7
|
+
|
8
|
+
<%- events.each_with_index do |e, index| -%>
|
9
|
+
<%- if e[:properties].count == 0 -%>
|
10
|
+
object <%= e[:class_name] %> : <%= class_name %>(
|
11
|
+
<%- else -%>
|
12
|
+
data class <%= e[:class_name] %>(
|
13
|
+
<%= e[:properties].map { |p| "val #{p[:param_name]}: #{p[:type]}" }.join(", ") %>
|
14
|
+
) : <%= class_name %>(
|
15
|
+
<%- end -%>
|
16
|
+
event = <%= enums_class_name %>.<%= e[:event_name] %>,
|
17
|
+
<%- if e[:properties].count > 0 -%>
|
18
|
+
properties = mapOf(
|
19
|
+
<%- e[:properties].each_with_index do |p, index| -%>
|
20
|
+
"<%= p[:name] %>" to <%= p[:value_fetcher] %><% if index < e[:properties].count - 1 %>,<% end %>
|
21
|
+
<%- end -%>
|
22
|
+
),
|
23
|
+
<%- end -%>
|
24
|
+
<%- if e[:destinations].count > 0 -%>
|
25
|
+
destinations = arrayOf(
|
26
|
+
<%- e[:destinations].each_with_index do |d, index| -%>
|
27
|
+
<%= destinations_class_name %>.<%= d %><% if index < e[:destinations].count - 1 %>,<% end %>
|
28
|
+
<%- end -%>
|
29
|
+
)
|
30
|
+
<%- end -%>
|
31
|
+
)
|
32
|
+
<%- unless index == events.count - 1 -%>
|
33
|
+
|
34
|
+
<%- end -%>
|
35
|
+
<%- end -%>
|
36
|
+
}
|
@@ -0,0 +1,26 @@
|
|
1
|
+
sealed class <%= class_name %>(
|
2
|
+
property: <%= enums_class_name %>,
|
3
|
+
val innerValue: Any,
|
4
|
+
val destinations: Array<<%= destinations_class_name %>> = emptyArray()
|
5
|
+
) {
|
6
|
+
val name = property.key
|
7
|
+
|
8
|
+
<%- properties.each_with_index do |property, index| -%>
|
9
|
+
data class <%= property[:class_name] %>(
|
10
|
+
val value: <%= property[:type] %>
|
11
|
+
) : <%= class_name %>(
|
12
|
+
property = <%= enums_class_name %>.<%= property[:property_name] %>,
|
13
|
+
innerValue = value<% if property[:is_special_property] %>.key<% end %>,
|
14
|
+
<%- if property[:destinations].count > 0 -%>
|
15
|
+
destinations = arrayOf(
|
16
|
+
<%- property[:destinations].each_with_index do |d, index| -%>
|
17
|
+
<%= destinations_class_name %>.<%= d %><% if index < property[:destinations].count - 1 %>,<% end %>
|
18
|
+
<%- end -%>
|
19
|
+
)
|
20
|
+
<%- end -%>
|
21
|
+
)
|
22
|
+
<%- unless index == properties.count - 1 -%>
|
23
|
+
|
24
|
+
<%- end -%>
|
25
|
+
<%- end -%>
|
26
|
+
}
|
@@ -0,0 +1,10 @@
|
|
1
|
+
<%- enums.each_with_index do |enum, index| -%>
|
2
|
+
enum class <%= enum[:class_name] %>(val key: String) {
|
3
|
+
<%- enum[:values].each_with_index do |v, index| -%>
|
4
|
+
<%= v[:name] %>("<%= v[:value] %>")<%= index == enum[:values].count - 1 ? ";" : "," %>
|
5
|
+
<%- end -%>
|
6
|
+
}
|
7
|
+
<%- unless index == enums.count - 1 -%>
|
8
|
+
|
9
|
+
<%- end -%>
|
10
|
+
<%- end -%>
|
@@ -0,0 +1,66 @@
|
|
1
|
+
struct EventData {
|
2
|
+
let name: String
|
3
|
+
var properties: [String: Any]?
|
4
|
+
let destinations: [Destination]
|
5
|
+
|
6
|
+
init(name: String, properties: [String: Any]?, destinations: [Destination]) {
|
7
|
+
self.name = name
|
8
|
+
self.properties = properties
|
9
|
+
self.destinations = destinations
|
10
|
+
}
|
11
|
+
|
12
|
+
init(type: EventType, properties: [String: Any]?) {
|
13
|
+
self.init(name: type.name, properties: properties, destinations: type.destinations)
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
enum EventType: String {
|
18
|
+
<%- events.each do |e| -%>
|
19
|
+
case <%= e[:case_name] %> = "<%= e[:event_name] %>"
|
20
|
+
<%- end -%>
|
21
|
+
|
22
|
+
var name: String { return rawValue }
|
23
|
+
|
24
|
+
var destinations: [Destination] {
|
25
|
+
switch self {
|
26
|
+
<%- events.each do |e| -%>
|
27
|
+
case .<%= e[:case_name] %>: return [<%= e[:destinations].map { |d| ".#{d}" }.join(", ") %>]
|
28
|
+
<%- end -%>
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
enum Event {
|
34
|
+
<%- events.each do |e| -%>
|
35
|
+
<%- if e[:properties].count == 0 -%>
|
36
|
+
case <%= e[:case_name] %>
|
37
|
+
<%- else -%>
|
38
|
+
case <%= e[:case_name] %>(<%= e[:properties].map { |p| "#{p[:name]}: #{p[:type]}" }.join(", ") %>)
|
39
|
+
<%- end -%>
|
40
|
+
<%- end -%>
|
41
|
+
|
42
|
+
var data: EventData {
|
43
|
+
switch self {
|
44
|
+
<%- events.each_with_index do |e, index| -%>
|
45
|
+
<%- if e[:properties].count == 0 -%>
|
46
|
+
case .<%= e[:case_name] %>:
|
47
|
+
<%- else -%>
|
48
|
+
case let .<%= e[:case_name] %>(<%= e[:properties].map { |p| p[:name] }.join(", ") %>):
|
49
|
+
<%- end -%>
|
50
|
+
return EventData(type: .<%= e[:case_name] %>,
|
51
|
+
<%- if e[:properties].count == 0 -%>
|
52
|
+
properties: nil)
|
53
|
+
<%- else -%>
|
54
|
+
properties: [
|
55
|
+
<%- e[:properties].each do |p| -%>
|
56
|
+
"<%= p[:name] %>": <%= p[:value] %> as Any,
|
57
|
+
<%- end -%>
|
58
|
+
])
|
59
|
+
<%- end -%>
|
60
|
+
<%- unless index == events.count - 1 -%>
|
61
|
+
|
62
|
+
<%- end -%>
|
63
|
+
<%- end -%>
|
64
|
+
}
|
65
|
+
}
|
66
|
+
}
|
@@ -0,0 +1,50 @@
|
|
1
|
+
struct PropertyData {
|
2
|
+
let name: String
|
3
|
+
let value: Any
|
4
|
+
let destinations: [Destination]
|
5
|
+
|
6
|
+
init(name: String, value: Any, destinations: [Destination]) {
|
7
|
+
self.name = name
|
8
|
+
self.value = value
|
9
|
+
self.destinations = destinations
|
10
|
+
}
|
11
|
+
|
12
|
+
init(type: PropertyType, value: Any) {
|
13
|
+
self.init(name: type.name, value: value, destinations: type.destinations)
|
14
|
+
}
|
15
|
+
}
|
16
|
+
|
17
|
+
enum PropertyType: String {
|
18
|
+
<%- properties.each do |p| -%>
|
19
|
+
case <%= p[:case_name] %> = "<%= p[:property_name ] %>"
|
20
|
+
<%- end -%>
|
21
|
+
|
22
|
+
var name: String { return rawValue }
|
23
|
+
|
24
|
+
var destinations: [Destination] {
|
25
|
+
switch self {
|
26
|
+
<%- properties.each_with_index do |p, index| -%>
|
27
|
+
case .<%= p[:case_name] %>: return [<%= p[:destinations].map { |d| ".#{d}" }.join(", ") %>]
|
28
|
+
<%- end -%>
|
29
|
+
}
|
30
|
+
}
|
31
|
+
}
|
32
|
+
|
33
|
+
enum Property {
|
34
|
+
<%- properties.each do |p| -%>
|
35
|
+
case <%= p[:case_name] %>(<%= p[:type] %>)
|
36
|
+
<%- end -%>
|
37
|
+
|
38
|
+
var data: PropertyData {
|
39
|
+
switch self {
|
40
|
+
<%- properties.each_with_index do |p, index| -%>
|
41
|
+
case let .<%= p[:case_name] %>(value):
|
42
|
+
return PropertyData(type: .<%= p[:case_name] %>,
|
43
|
+
value: value<% if p[:is_special_property] %>.rawValue<% end %>)
|
44
|
+
<%- unless index == properties.count - 1 -%>
|
45
|
+
|
46
|
+
<%- end -%>
|
47
|
+
<%- end -%>
|
48
|
+
}
|
49
|
+
}
|
50
|
+
}
|
data/lib/evva/version.rb
CHANGED
data/lib/evva.rb
CHANGED
@@ -5,8 +5,9 @@ require 'evva/logger'
|
|
5
5
|
require 'evva/google_sheet'
|
6
6
|
require 'evva/config'
|
7
7
|
require 'evva/file_reader'
|
8
|
-
require 'evva/
|
9
|
-
require 'evva/
|
8
|
+
require 'evva/analytics_event'
|
9
|
+
require 'evva/analytics_enum'
|
10
|
+
require 'evva/analytics_property'
|
10
11
|
require 'evva/object_extension'
|
11
12
|
require 'evva/version'
|
12
13
|
require 'evva/android_generator'
|
@@ -37,7 +38,7 @@ module Evva
|
|
37
38
|
|
38
39
|
def evva_write(bundle, generator, configuration, extension)
|
39
40
|
path = "#{configuration.out_path}/#{configuration.event_file_name}.#{extension}"
|
40
|
-
write_to_file(path, generator.events(bundle[:events], configuration.event_file_name))
|
41
|
+
write_to_file(path, generator.events(bundle[:events], configuration.event_file_name, configuration.event_enum_file_name, configuration.destinations_file_name))
|
41
42
|
|
42
43
|
unless configuration.type.downcase == 'ios'
|
43
44
|
path = "#{configuration.out_path}/#{configuration.event_enum_file_name}.#{extension}"
|
@@ -45,10 +46,18 @@ module Evva
|
|
45
46
|
end
|
46
47
|
|
47
48
|
path = "#{configuration.out_path}/#{configuration.people_file_name}.#{extension}"
|
48
|
-
write_to_file(path, generator.people_properties(bundle[:people], configuration.people_file_name))
|
49
|
+
write_to_file(path, generator.people_properties(bundle[:people], configuration.people_file_name, configuration.people_enum_file_name, configuration.destinations_file_name))
|
50
|
+
|
51
|
+
unless configuration.type.downcase == 'ios'
|
52
|
+
path = "#{configuration.out_path}/#{configuration.people_enum_file_name}.#{extension}"
|
53
|
+
write_to_file(path, generator.people_properties_enum(bundle[:people], configuration.people_enum_file_name))
|
54
|
+
end
|
49
55
|
|
50
56
|
path = "#{configuration.out_path}/#{configuration.special_enum_file_name}.#{extension}"
|
51
57
|
write_to_file(path, generator.special_property_enums(bundle[:enums]))
|
58
|
+
|
59
|
+
path = "#{configuration.out_path}/#{configuration.destinations_file_name}.#{extension}"
|
60
|
+
write_to_file(path, generator.destinations(bundle[:destinations], configuration.destinations_file_name))
|
52
61
|
end
|
53
62
|
|
54
63
|
def analytics_data(config:)
|
@@ -61,6 +70,7 @@ module Evva
|
|
61
70
|
events_bundle[:events] = source.events
|
62
71
|
events_bundle[:people] = source.people_properties
|
63
72
|
events_bundle[:enums] = source.enum_classes
|
73
|
+
events_bundle[:destinations] = source.destinations
|
64
74
|
events_bundle
|
65
75
|
end
|
66
76
|
|
data/spec/evva_spec.rb
CHANGED
@@ -6,12 +6,10 @@ describe Evva do
|
|
6
6
|
|
7
7
|
before do
|
8
8
|
allow_any_instance_of(Evva::FileReader).to receive(:open_file).and_return(file)
|
9
|
-
allow_any_instance_of(Evva::GoogleSheet).to receive(:events).and_return(
|
10
|
-
[Evva::MixpanelEvent.new('trackEvent',[])])
|
11
|
-
|
9
|
+
allow_any_instance_of(Evva::GoogleSheet).to receive(:events).and_return([])
|
12
10
|
allow_any_instance_of(Evva::GoogleSheet).to receive(:people_properties).and_return([])
|
13
11
|
allow_any_instance_of(Evva::GoogleSheet).to receive(:enum_classes).and_return([])
|
14
|
-
|
12
|
+
allow_any_instance_of(Evva::GoogleSheet).to receive(:destinations).and_return([])
|
15
13
|
allow(Evva).to receive(:write_to_file)
|
16
14
|
end
|
17
15
|
|
@@ -37,4 +35,4 @@ describe Evva do
|
|
37
35
|
.and change { Evva::Logger.summary[:error] }.by(1)
|
38
36
|
end
|
39
37
|
end
|
40
|
-
end
|
38
|
+
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
Event Name,Event Properties
|
2
|
-
cp_page_view,"course_id:Long,course_name:String"
|
3
|
-
nav_feed_tap
|
4
|
-
cp_view_scorecard,"course_id:Long,course_name:String"
|
1
|
+
Event Name,Event Properties,Event Destination
|
2
|
+
cp_page_view,"course_id:Long,course_name:String","firebase,custom destination"
|
3
|
+
nav_feed_tap,,
|
4
|
+
cp_view_scorecard,"course_id:Long,course_name:String","custom destination"
|
@@ -1,3 +1,4 @@
|
|
1
|
-
Property Name,
|
2
|
-
rounds_with_wear,
|
3
|
-
total_friends,
|
1
|
+
Property Name,Property Type,Property Destination
|
2
|
+
rounds_with_wear,String,"firebase,custom destination"
|
3
|
+
total_friends,Int,
|
4
|
+
wearable_platform,WearableAppPlatform,firebase
|
data/spec/fixtures/test.yml
CHANGED
@@ -7,7 +7,9 @@ data_source:
|
|
7
7
|
enum_classes_url: https://path-to-csv
|
8
8
|
|
9
9
|
out_path: analytics
|
10
|
-
event_file_name:
|
11
|
-
event_enum_file_name:
|
12
|
-
people_file_name:
|
10
|
+
event_file_name: AnalyticsEvent
|
11
|
+
event_enum_file_name: AnalyticsEvents
|
12
|
+
people_file_name: AnalyticsProperty
|
13
|
+
people_enum_file_name: AnalyticsProperties
|
14
|
+
destinations_file_name: AnalyticsDestinations
|
13
15
|
package_name: com.package.name.analytics
|