evva 0.1.4.4 → 0.4.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (48) hide show
  1. checksums.yaml +5 -5
  2. data/.gitignore +1 -2
  3. data/.rspec +0 -1
  4. data/.rubocop_todo.yml +10 -10
  5. data/.travis.yml +1 -0
  6. data/Gemfile +9 -8
  7. data/Gemfile.lock +7 -11
  8. data/README.md +12 -2
  9. data/Rakefile +9 -0
  10. data/changelog.md +17 -1
  11. data/evva.gemspec +0 -3
  12. data/lib/evva/{mixpanel_enum.rb → analytics_enum.rb} +2 -1
  13. data/lib/evva/analytics_event.rb +17 -0
  14. data/lib/evva/analytics_property.rb +17 -0
  15. data/lib/evva/android_generator.rb +135 -84
  16. data/lib/evva/config.rb +15 -3
  17. data/lib/evva/google_sheet.rb +69 -44
  18. data/lib/evva/swift_generator.rb +91 -81
  19. data/lib/evva/templates/kotlin/base.kt +7 -0
  20. data/lib/evva/templates/kotlin/destinations.kt +5 -0
  21. data/lib/evva/templates/kotlin/event_enum.kt +5 -0
  22. data/lib/evva/templates/kotlin/events.kt +34 -0
  23. data/lib/evva/templates/kotlin/people_properties.kt +24 -0
  24. data/lib/evva/templates/kotlin/people_properties_enum.kt +5 -0
  25. data/lib/evva/templates/kotlin/special_property_enums.kt +10 -0
  26. data/lib/evva/templates/swift/base.swift +7 -0
  27. data/lib/evva/templates/swift/destinations.swift +5 -0
  28. data/lib/evva/templates/swift/events.swift +66 -0
  29. data/lib/evva/templates/swift/people_properties.swift +50 -0
  30. data/lib/evva/templates/swift/special_property_enums.swift +10 -0
  31. data/lib/evva/version.rb +2 -2
  32. data/lib/evva.rb +15 -5
  33. data/spec/evva_spec.rb +3 -5
  34. data/spec/fixtures/sample_public_enums.csv +3 -0
  35. data/spec/fixtures/sample_public_events.csv +4 -0
  36. data/spec/fixtures/sample_public_people_properties.csv +4 -0
  37. data/spec/fixtures/test.yml +9 -5
  38. data/spec/lib/evva/android_generator_spec.rb +131 -57
  39. data/spec/lib/evva/config_spec.rb +12 -6
  40. data/spec/lib/evva/google_sheet_spec.rb +60 -72
  41. data/spec/lib/evva/swift_generator_spec.rb +157 -40
  42. metadata +23 -39
  43. data/evva_config.yml +0 -11
  44. data/lib/evva/mixpanel_event.rb +0 -13
  45. data/spec/fixtures/sample_public_enums.html +0 -1
  46. data/spec/fixtures/sample_public_info.html +0 -1
  47. data/spec/fixtures/sample_public_people_properties.html +0 -1
  48. data/spec/fixtures/sample_public_sheet.html +0 -1
@@ -2,14 +2,14 @@ describe Evva::SwiftGenerator do
2
2
  let(:generator) { described_class.new }
3
3
 
4
4
  describe '#events' do
5
- subject { generator.events(event_bundle, "") }
5
+ subject { generator.events(event_bundle, nil, nil, nil) }
6
6
 
7
7
  let(:event_bundle) { [
8
- Evva::MixpanelEvent.new('cp_page_view'),
9
- Evva::MixpanelEvent.new('cp_page_view_a', { course_id: 'Long', course_name: 'String' }),
10
- Evva::MixpanelEvent.new('cp_page_view_b', { course_id: 'Long', course_name: 'String', from_screen: 'CourseProfileSource' }),
11
- Evva::MixpanelEvent.new('cp_page_view_c', { course_id: 'Long', course_name: 'String', from_screen: 'CourseProfileSource?' }),
12
- Evva::MixpanelEvent.new('cp_page_view_d', { course_id: 'Long?', course_name: 'String' })
8
+ Evva::AnalyticsEvent.new('cp_page_view', {}, ['firebase']),
9
+ Evva::AnalyticsEvent.new('cp_page_view_a', { course_id: 'Long', course_name: 'String' }, ['firebase', 'Custom Destination']),
10
+ Evva::AnalyticsEvent.new('cp_page_view_b', { course_id: 'Long', course_name: 'String', from_screen: 'CourseProfileSource' }, []),
11
+ Evva::AnalyticsEvent.new('cp_page_view_c', { course_id: 'Long', course_name: 'String', from_screen: 'CourseProfileSource?' }, []),
12
+ Evva::AnalyticsEvent.new('cp_page_view_d', { course_id: 'Long?', course_name: 'String' }, []),
13
13
  ] }
14
14
 
15
15
  let(:expected) {
@@ -19,6 +19,41 @@ describe Evva::SwiftGenerator do
19
19
  import Foundation
20
20
 
21
21
  extension Analytics {
22
+ struct EventData {
23
+ let name: String
24
+ var properties: [String: Any]?
25
+ let destinations: [Destination]
26
+
27
+ init(name: String, properties: [String: Any]?, destinations: [Destination]) {
28
+ self.name = name
29
+ self.properties = properties
30
+ self.destinations = destinations
31
+ }
32
+
33
+ init(type: EventType, properties: [String: Any]?) {
34
+ self.init(name: type.name, properties: properties, destinations: type.destinations)
35
+ }
36
+ }
37
+
38
+ enum EventType: String {
39
+ case cpPageView = "cp_page_view"
40
+ case cpPageViewA = "cp_page_view_a"
41
+ case cpPageViewB = "cp_page_view_b"
42
+ case cpPageViewC = "cp_page_view_c"
43
+ case cpPageViewD = "cp_page_view_d"
44
+
45
+ var name: String { return rawValue }
46
+
47
+ var destinations: [Destination] {
48
+ switch self {
49
+ case .cpPageView: return [.firebase]
50
+ case .cpPageViewA: return [.firebase, .customDestination]
51
+ case .cpPageViewB: return []
52
+ case .cpPageViewC: return []
53
+ case .cpPageViewD: return []
54
+ }
55
+ }
56
+ }
22
57
 
23
58
  enum Event {
24
59
  case cpPageView
@@ -30,33 +65,38 @@ extension Analytics {
30
65
  var data: EventData {
31
66
  switch self {
32
67
  case .cpPageView:
33
- return EventData(name: "cp_page_view")
34
-
35
- case .cpPageViewA(let course_id, let course_name):
36
- return EventData(name: "cp_page_view_a", properties: [
37
- "course_id": course_id as Any,
38
- "course_name": course_name as Any ]
39
- )
40
-
41
- case .cpPageViewB(let course_id, let course_name, let from_screen):
42
- return EventData(name: "cp_page_view_b", properties: [
43
- "course_id": course_id as Any,
44
- "course_name": course_name as Any,
45
- "from_screen": from_screen.rawValue as Any ]
46
- )
47
-
48
- case .cpPageViewC(let course_id, let course_name, let from_screen):
49
- return EventData(name: "cp_page_view_c", properties: [
50
- "course_id": course_id as Any,
51
- "course_name": course_name as Any,
52
- "from_screen": from_screen?.rawValue as Any ]
53
- )
54
-
55
- case .cpPageViewD(let course_id, let course_name):
56
- return EventData(name: "cp_page_view_d", properties: [
57
- "course_id": course_id as Any,
58
- "course_name": course_name as Any ]
59
- )
68
+ return EventData(type: .cpPageView,
69
+ properties: nil)
70
+
71
+ case let .cpPageViewA(course_id, course_name):
72
+ return EventData(type: .cpPageViewA,
73
+ properties: [
74
+ "course_id": course_id as Any,
75
+ "course_name": course_name as Any,
76
+ ])
77
+
78
+ case let .cpPageViewB(course_id, course_name, from_screen):
79
+ return EventData(type: .cpPageViewB,
80
+ properties: [
81
+ "course_id": course_id as Any,
82
+ "course_name": course_name as Any,
83
+ "from_screen": from_screen.rawValue as Any,
84
+ ])
85
+
86
+ case let .cpPageViewC(course_id, course_name, from_screen):
87
+ return EventData(type: .cpPageViewC,
88
+ properties: [
89
+ "course_id": course_id as Any,
90
+ "course_name": course_name as Any,
91
+ "from_screen": from_screen?.rawValue as Any,
92
+ ])
93
+
94
+ case let .cpPageViewD(course_id, course_name):
95
+ return EventData(type: .cpPageViewD,
96
+ properties: [
97
+ "course_id": course_id as Any,
98
+ "course_name": course_name as Any,
99
+ ])
60
100
  }
61
101
  }
62
102
  }
@@ -71,8 +111,8 @@ Swift
71
111
  subject { generator.special_property_enums(enums) }
72
112
 
73
113
  let(:enums) { [
74
- Evva::MixpanelEnum.new('CourseProfileSource', ['course_discovery', 'synced_courses']),
75
- Evva::MixpanelEnum.new('PremiumFrom', ['Course Profile', 'Round Setup'])
114
+ Evva::AnalyticsEnum.new('CourseProfileSource', ['course_discovery', 'synced_courses']),
115
+ Evva::AnalyticsEnum.new('PremiumFrom', ['Course Profile', 'Round Setup']),
76
116
  ] }
77
117
 
78
118
  let(:expected) {
@@ -82,7 +122,6 @@ Swift
82
122
  import Foundation
83
123
 
84
124
  extension Analytics {
85
-
86
125
  enum CourseProfileSource: String {
87
126
  case courseDiscovery = "course_discovery"
88
127
  case syncedCourses = "synced_courses"
@@ -100,9 +139,13 @@ Swift
100
139
  end
101
140
 
102
141
  describe "#people_properties" do
103
- subject { generator.people_properties(people_bundle, "") }
142
+ subject { generator.people_properties(people_bundle, "", "", "") }
104
143
 
105
- let(:people_bundle) { ['rounds_with_wear', 'friends_from_facebook'] }
144
+ let(:people_bundle) { [
145
+ Evva::AnalyticsProperty.new('rounds_with_wear', 'String', ["firebase"]),
146
+ Evva::AnalyticsProperty.new('wear_platform', 'WearableAppPlatform', ["firebase", "custom destination"]),
147
+ Evva::AnalyticsProperty.new('number_of_times_it_happened', 'Long', []),
148
+ ] }
106
149
 
107
150
  let(:expected) {
108
151
  <<-Swift
@@ -111,10 +154,84 @@ Swift
111
154
  import Foundation
112
155
 
113
156
  extension Analytics {
157
+ struct PropertyData {
158
+ let name: String
159
+ let value: Any
160
+ let destinations: [Destination]
161
+
162
+ init(name: String, value: Any, destinations: [Destination]) {
163
+ self.name = name
164
+ self.value = value
165
+ self.destinations = destinations
166
+ }
167
+
168
+ init(type: PropertyType, value: Any) {
169
+ self.init(name: type.name, value: value, destinations: type.destinations)
170
+ }
171
+ }
114
172
 
115
- enum Property: String {
173
+ enum PropertyType: String {
116
174
  case roundsWithWear = "rounds_with_wear"
117
- case friendsFromFacebook = "friends_from_facebook"
175
+ case wearPlatform = "wear_platform"
176
+ case numberOfTimesItHappened = "number_of_times_it_happened"
177
+
178
+ var name: String { return rawValue }
179
+
180
+ var destinations: [Destination] {
181
+ switch self {
182
+ case .roundsWithWear: return [.firebase]
183
+ case .wearPlatform: return [.firebase, .customDestination]
184
+ case .numberOfTimesItHappened: return []
185
+ }
186
+ }
187
+ }
188
+
189
+ enum Property {
190
+ case roundsWithWear(String)
191
+ case wearPlatform(WearableAppPlatform)
192
+ case numberOfTimesItHappened(Int)
193
+
194
+ var data: PropertyData {
195
+ switch self {
196
+ case let .roundsWithWear(value):
197
+ return PropertyData(type: .roundsWithWear,
198
+ value: value)
199
+
200
+ case let .wearPlatform(value):
201
+ return PropertyData(type: .wearPlatform,
202
+ value: value.rawValue)
203
+
204
+ case let .numberOfTimesItHappened(value):
205
+ return PropertyData(type: .numberOfTimesItHappened,
206
+ value: value)
207
+ }
208
+ }
209
+ }
210
+ }
211
+ Swift
212
+ }
213
+
214
+ it { should eq expected }
215
+ end
216
+
217
+ describe "#destinations" do
218
+ subject { generator.destinations(destinations, "") }
219
+
220
+ let(:destinations) { [
221
+ 'firebase',
222
+ 'whatever you want really'
223
+ ] }
224
+
225
+ let(:expected) {
226
+ <<-Swift
227
+ // This file was automatically generated by evva: https://github.com/hole19/evva
228
+
229
+ import Foundation
230
+
231
+ extension Analytics {
232
+ enum Destination {
233
+ case firebase
234
+ case whateverYouWantReally
118
235
  }
119
236
  }
120
237
  Swift
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: evva
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4.4
4
+ version: 0.4.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - RicardoTrindade
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2019-02-04 00:00:00.000000000 Z
11
+ date: 2021-12-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: safe_yaml
@@ -38,34 +38,6 @@ dependencies:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
40
  version: '0.7'
41
- - !ruby/object:Gem::Dependency
42
- name: xml-simple
43
- requirement: !ruby/object:Gem::Requirement
44
- requirements:
45
- - - "~>"
46
- - !ruby/object:Gem::Version
47
- version: '1.1'
48
- type: :runtime
49
- prerelease: false
50
- version_requirements: !ruby/object:Gem::Requirement
51
- requirements:
52
- - - "~>"
53
- - !ruby/object:Gem::Version
54
- version: '1.1'
55
- - !ruby/object:Gem::Dependency
56
- name: webmock
57
- requirement: !ruby/object:Gem::Requirement
58
- requirements:
59
- - - "~>"
60
- - !ruby/object:Gem::Version
61
- version: '1.20'
62
- type: :development
63
- prerelease: false
64
- version_requirements: !ruby/object:Gem::Requirement
65
- requirements:
66
- - - "~>"
67
- - !ruby/object:Gem::Version
68
- version: '1.20'
69
41
  description: Evva generates all the analytics event tracking functions for you
70
42
  email: ricardo.trindade743@gmail.com
71
43
  executables:
@@ -76,30 +48,43 @@ files:
76
48
  - ".gitignore"
77
49
  - ".rspec"
78
50
  - ".rubocop_todo.yml"
51
+ - ".travis.yml"
79
52
  - Gemfile
80
53
  - Gemfile.lock
81
54
  - README.md
55
+ - Rakefile
82
56
  - bin/evva
83
57
  - changelog.md
84
58
  - evva.gemspec
85
- - evva_config.yml
86
59
  - lib/evva.rb
60
+ - lib/evva/analytics_enum.rb
61
+ - lib/evva/analytics_event.rb
62
+ - lib/evva/analytics_property.rb
87
63
  - lib/evva/android_generator.rb
88
64
  - lib/evva/config.rb
89
65
  - lib/evva/file_reader.rb
90
66
  - lib/evva/google_sheet.rb
91
67
  - lib/evva/logger.rb
92
- - lib/evva/mixpanel_enum.rb
93
- - lib/evva/mixpanel_event.rb
94
68
  - lib/evva/object_extension.rb
95
69
  - lib/evva/swift_generator.rb
70
+ - lib/evva/templates/kotlin/base.kt
71
+ - lib/evva/templates/kotlin/destinations.kt
72
+ - lib/evva/templates/kotlin/event_enum.kt
73
+ - lib/evva/templates/kotlin/events.kt
74
+ - lib/evva/templates/kotlin/people_properties.kt
75
+ - lib/evva/templates/kotlin/people_properties_enum.kt
76
+ - lib/evva/templates/kotlin/special_property_enums.kt
77
+ - lib/evva/templates/swift/base.swift
78
+ - lib/evva/templates/swift/destinations.swift
79
+ - lib/evva/templates/swift/events.swift
80
+ - lib/evva/templates/swift/people_properties.swift
81
+ - lib/evva/templates/swift/special_property_enums.swift
96
82
  - lib/evva/version.rb
97
83
  - rubocop.yml
98
84
  - spec/evva_spec.rb
99
- - spec/fixtures/sample_public_enums.html
100
- - spec/fixtures/sample_public_info.html
101
- - spec/fixtures/sample_public_people_properties.html
102
- - spec/fixtures/sample_public_sheet.html
85
+ - spec/fixtures/sample_public_enums.csv
86
+ - spec/fixtures/sample_public_events.csv
87
+ - spec/fixtures/sample_public_people_properties.csv
103
88
  - spec/fixtures/test.yml
104
89
  - spec/lib/evva/android_generator_spec.rb
105
90
  - spec/lib/evva/config_spec.rb
@@ -127,8 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
112
  - !ruby/object:Gem::Version
128
113
  version: '0'
129
114
  requirements: []
130
- rubyforge_project:
131
- rubygems_version: 2.5.2
115
+ rubygems_version: 3.1.6
132
116
  signing_key:
133
117
  specification_version: 4
134
118
  summary: An event generating service
data/evva_config.yml DELETED
@@ -1,11 +0,0 @@
1
- type: iOS
2
-
3
- data_source:
4
- type: google_sheet
5
- sheet_id: 1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4
6
-
7
- out_path: analytics
8
- event_file_name: MixpanelAnalytics
9
- event_enum_file_name: MixpanelEvent
10
- people_file_name: MixpanelProperties
11
- package_name: com.hole19golf.hole19.analytics
@@ -1,13 +0,0 @@
1
- module Evva
2
- class MixpanelEvent
3
- attr_reader :event_name, :properties
4
- def initialize(event_name, properties = {})
5
- @event_name = event_name
6
- @properties = properties
7
- end
8
-
9
- def ==(other)
10
- event_name == other.event_name
11
- end
12
- end
13
- end
@@ -1 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gsx='http://schemas.google.com/spreadsheets/2006/extended'><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>Enums</title><link rel='alternate' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/pubhtml'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full'/><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full'/><author><name>ricardo.trindade</name><email>ricardo.trindade@hole19golf.com</email></author><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><entry><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full/cokwr</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>PageViewSourceScreen</title><content type='text'>possiblevalues: course_discovery,synced_courses,nearby,deal</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full/cokwr'/><gsx:enumname>PageViewSourceScreen</gsx:enumname><gsx:possiblevalues>course_discovery,synced_courses,nearby,deal</gsx:possiblevalues></entry><entry><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full/cpzh4</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>PremiumClickBuy</title><content type='text'>possiblevalues: notes,hi_res_maps,whatever</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/osju1vh/public/full/cpzh4'/><gsx:enumname>PremiumClickBuy</gsx:enumname><gsx:possiblevalues>notes,hi_res_maps,whatever</gsx:possiblevalues></entry></feed>
@@ -1 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gs='http://schemas.google.com/spreadsheets/2006'><id>https://spreadsheets.google.com/feeds/worksheets/abcdefgh/public/full</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#worksheet'/><title type='text'>TestingEvva</title><link rel='alternate' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/pubhtml'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full'/><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full'/><author><name>ricardo.trindade</name><email>ricardo.trindade@hole19golf.com</email></author><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><entry><id>https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/od6</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#worksheet'/><title type='text'>Events</title><content type='text'>Events</content><link rel='http://schemas.google.com/spreadsheets/2006#listfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full'/><link rel='http://schemas.google.com/spreadsheets/2006#cellsfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/cells/abc1234567890/od6/public/full'/><link rel='http://schemas.google.com/visualization/2008#visualizationApi' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/gviz/tq?gid=0&amp;pub=1'/><link rel='http://schemas.google.com/spreadsheets/2006#exportcsv' type='text/csv' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/export?gid=0&amp;format=csv'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/od6'/><gs:colCount>26</gs:colCount><gs:rowCount>1000</gs:rowCount></entry><entry><id>https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/ojyi830</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#worksheet'/><title type='text'>PeopleProperties</title><content type='text'>PeopleProperties</content><link rel='http://schemas.google.com/spreadsheets/2006#listfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/ojyi830/public/full'/><link rel='http://schemas.google.com/spreadsheets/2006#cellsfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/cells/abc1234567890/ojyi830/public/full'/><link rel='http://schemas.google.com/visualization/2008#visualizationApi' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/gviz/tq?gid=1206814390&amp;pub=1'/><link rel='http://schemas.google.com/spreadsheets/2006#exportcsv' type='text/csv' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/export?gid=1206814390&amp;format=csv'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/ojyi830'/><gs:colCount>26</gs:colCount><gs:rowCount>1000</gs:rowCount></entry><entry><id>https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/osju1vh</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#worksheet'/><title type='text'>Enums</title><content type='text'>Enums</content><link rel='http://schemas.google.com/spreadsheets/2006#listfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/osju1vh/public/full'/><link rel='http://schemas.google.com/spreadsheets/2006#cellsfeed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/cells/abc1234567890/osju1vh/public/full'/><link rel='http://schemas.google.com/visualization/2008#visualizationApi' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/gviz/tq?gid=1726367271&amp;pub=1'/><link rel='http://schemas.google.com/spreadsheets/2006#exportcsv' type='text/csv' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/export?gid=1726367271&amp;format=csv'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/worksheets/abc1234567890/public/full/osju1vh'/><gs:colCount>26</gs:colCount><gs:rowCount>1000</gs:rowCount></entry></feed>
@@ -1 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gsx='http://schemas.google.com/spreadsheets/2006/extended'><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full</id><updated>2017-09-06T13:27:41.023Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>PeopleProperties</title><link rel='alternate' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/pubhtml'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full'/><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full'/><author><name>ricardo.trindade</name><email>ricardo.trindade@hole19golf.com</email></author><openSearch:totalResults>2</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><entry><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full/cokwr</id><updated>2017-09-06T13:27:41.023Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>roundsWithWear</title><content type='text'>propertyname: rounds_with_wear</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full/cokwr'/><gsx:properties>roundsWithWear</gsx:properties><gsx:propertyname>rounds_with_wear</gsx:propertyname></entry><entry><id>https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full/cpzh4</id><updated>2017-09-06T13:27:41.023Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>totalFriends</title><content type='text'>propertyname: total_friends</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/1LaJd68os3g_GFlerogC64grNIlXb2iukMznOvdml7A4/ojyi830/public/full/cpzh4'/><gsx:properties>totalFriends</gsx:properties><gsx:propertyname>total_friends</gsx:propertyname></entry></feed>
@@ -1 +0,0 @@
1
- <?xml version='1.0' encoding='UTF-8'?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:gsx='http://schemas.google.com/spreadsheets/2006/extended'><id>https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>Events</title><link rel='alternate' type='application/atom+xml' href='https://docs.google.com/a/hole19golf.com/spreadsheets/d/abc1234567890/pubhtml'/><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full'/><link rel='http://schemas.google.com/g/2005#post' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full'/><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full'/><author><name>ricardo.trindade</name><email>ricardo.trindade@hole19golf.com</email></author><openSearch:totalResults>3</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><entry><id>https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cokwr</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>trackCpPageView</title><content type='text'>eventname: cp_page_view, eventproperties: course_id:Long,course_name:String</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cokwr'/><gsx:functionname>trackCpPageView</gsx:functionname><gsx:eventname>cp_page_view</gsx:eventname><gsx:eventproperties>course_id:Long,course_name:String</gsx:eventproperties></entry><entry><id>https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cpzh4</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>trackNavFeedTap</title><content type='text'>eventname: nav_feed_tap</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cpzh4'/><gsx:functionname>trackNavFeedTap</gsx:functionname><gsx:eventname>nav_feed_tap</gsx:eventname><gsx:eventproperties></gsx:eventproperties></entry><entry><id>https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cre1l</id><updated>2017-08-22T10:31:52.161Z</updated><category scheme='http://schemas.google.com/spreadsheets/2006' term='http://schemas.google.com/spreadsheets/2006#list'/><title type='text'>trackCpViewScorecard</title><content type='text'>eventname: cp_view_scorecard, eventproperties: course_id:Long,course_name:String</content><link rel='self' type='application/atom+xml' href='https://spreadsheets.google.com/feeds/list/abc1234567890/od6/public/full/cre1l'/><gsx:functionname>trackCpViewScorecard</gsx:functionname><gsx:eventname>cp_view_scorecard</gsx:eventname><gsx:eventproperties>course_id:Long,course_name:String</gsx:eventproperties></entry></feed>