evva 0.1.4.4 → 0.4.1

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.
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>