evva 0.10.0 → 0.11.0
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/Gemfile.lock +1 -1
- data/changelog.md +4 -0
- data/lib/evva/kotlin_generator.rb +11 -10
- data/lib/evva/version.rb +2 -2
- data/spec/lib/evva/kotlin_generator_spec.rb +47 -27
- metadata +6 -3
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 2ee0a5c710dfc85ab04a707bd4792bbab9a59c81aceff7394f6efe243c2deb5d
|
|
4
|
+
data.tar.gz: d53cec7c07687a96dc24c8fb65f8a32f2e523af19b51ef72f7558fb2c8068dc6
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 6b7267254416b123602b3d5f3ba7c5d0577d255b981ba9404ab28e2e02dcebc0d8f08f4373af847508502c5a0d41cb3f05733b98a98d79f0c226b871f1eae607
|
|
7
|
+
data.tar.gz: 80ee70c43aec3f46304afc0647446f25cf874acc9a60f48521adb292918936c9fba62f127079daa7a97956d279470a324f30fb3ca7fa12de654c4a166c6451ad
|
data/Gemfile.lock
CHANGED
data/changelog.md
CHANGED
|
@@ -2,6 +2,10 @@
|
|
|
2
2
|
|
|
3
3
|
## [Unreleased]
|
|
4
4
|
|
|
5
|
+
## [0.11.0] - 2026-11-09
|
|
6
|
+
|
|
7
|
+
- **Breaking:** Kotlin enum constants (events, people properties, special property enums and destinations) are now generated in PascalCase, e.g. `RoundStarted` instead of `ROUND_STARTED`. The `key` values are unchanged
|
|
8
|
+
|
|
5
9
|
## [0.10.0] - 2026-10-13
|
|
6
10
|
|
|
7
11
|
- Support optional people properties in Kotlin: `innerValue` is now `Any?` and optional special properties use `value?.key`
|
|
@@ -47,11 +47,11 @@ module Evva
|
|
|
47
47
|
}
|
|
48
48
|
end
|
|
49
49
|
|
|
50
|
-
destinations = event.destinations.map { |p|
|
|
50
|
+
destinations = event.destinations.map { |p| pascalize(p) }
|
|
51
51
|
|
|
52
52
|
{
|
|
53
53
|
class_name: camelize(event.event_name),
|
|
54
|
-
event_name:
|
|
54
|
+
event_name: pascalize(event.event_name),
|
|
55
55
|
properties: properties,
|
|
56
56
|
destinations: destinations
|
|
57
57
|
}
|
|
@@ -67,7 +67,7 @@ module Evva
|
|
|
67
67
|
|
|
68
68
|
events = bundle.map(&:event_name).map do |event_name|
|
|
69
69
|
{
|
|
70
|
-
name:
|
|
70
|
+
name: pascalize(event_name),
|
|
71
71
|
value: event_name,
|
|
72
72
|
}
|
|
73
73
|
end
|
|
@@ -96,10 +96,10 @@ module Evva
|
|
|
96
96
|
|
|
97
97
|
{
|
|
98
98
|
class_name: camelize(property.property_name),
|
|
99
|
-
property_name:
|
|
99
|
+
property_name: pascalize(property.property_name),
|
|
100
100
|
type: type,
|
|
101
101
|
value_fetcher: value_fetcher,
|
|
102
|
-
destinations: property.destinations.map { |p|
|
|
102
|
+
destinations: property.destinations.map { |p| pascalize(p) },
|
|
103
103
|
}
|
|
104
104
|
end
|
|
105
105
|
|
|
@@ -113,7 +113,7 @@ module Evva
|
|
|
113
113
|
|
|
114
114
|
properties = people_bundle.map(&:property_name).map do |property_name|
|
|
115
115
|
{
|
|
116
|
-
name:
|
|
116
|
+
name: pascalize(property_name),
|
|
117
117
|
value: property_name,
|
|
118
118
|
}
|
|
119
119
|
end
|
|
@@ -127,7 +127,7 @@ module Evva
|
|
|
127
127
|
enums = enums_bundle.map do |enum|
|
|
128
128
|
values = enum.values.map do |value|
|
|
129
129
|
{
|
|
130
|
-
name:
|
|
130
|
+
name: pascalize(value),
|
|
131
131
|
value: value,
|
|
132
132
|
}
|
|
133
133
|
end
|
|
@@ -146,7 +146,7 @@ module Evva
|
|
|
146
146
|
header_footer_wrapper do
|
|
147
147
|
class_name = file_name
|
|
148
148
|
|
|
149
|
-
destinations = bundle.map { |d|
|
|
149
|
+
destinations = bundle.map { |d| pascalize(d) }
|
|
150
150
|
|
|
151
151
|
template_from(DESTINATIONS_TEMPLATE).result(binding)
|
|
152
152
|
end
|
|
@@ -181,8 +181,9 @@ module Evva
|
|
|
181
181
|
string.gsub(/(?:_|(\/))([a-z\d]*)/) { "#{$1}#{$2.capitalize}" }.gsub("/", "::")
|
|
182
182
|
end
|
|
183
183
|
|
|
184
|
-
def
|
|
185
|
-
string.
|
|
184
|
+
def pascalize(string)
|
|
185
|
+
name = string.to_s.split(/[^\p{Alnum}]+/).map(&:capitalize).join
|
|
186
|
+
name.match?(/\A\p{L}/) ? name : "_#{name}"
|
|
186
187
|
end
|
|
187
188
|
|
|
188
189
|
def native_type(type)
|
data/lib/evva/version.rb
CHANGED
|
@@ -29,13 +29,13 @@ sealed class AnalyticsEvent(
|
|
|
29
29
|
val name = event.key
|
|
30
30
|
|
|
31
31
|
data object CpPageView : AnalyticsEvent(
|
|
32
|
-
event = AnalyticsEvents.
|
|
32
|
+
event = AnalyticsEvents.CpPageView,
|
|
33
33
|
)
|
|
34
34
|
|
|
35
35
|
data object CpPageView2 : AnalyticsEvent(
|
|
36
|
-
event = AnalyticsEvents.
|
|
36
|
+
event = AnalyticsEvents.CpPageView2,
|
|
37
37
|
destinations = arrayOf(
|
|
38
|
-
AnalyticsDestinations.
|
|
38
|
+
AnalyticsDestinations.Firebase,
|
|
39
39
|
),
|
|
40
40
|
)
|
|
41
41
|
|
|
@@ -43,14 +43,14 @@ sealed class AnalyticsEvent(
|
|
|
43
43
|
val courseId: Long,
|
|
44
44
|
val courseName: String,
|
|
45
45
|
) : AnalyticsEvent(
|
|
46
|
-
event = AnalyticsEvents.
|
|
46
|
+
event = AnalyticsEvents.CpPageViewA,
|
|
47
47
|
properties = mapOf(
|
|
48
48
|
"course_id" to courseId,
|
|
49
49
|
"course_name" to courseName,
|
|
50
50
|
),
|
|
51
51
|
destinations = arrayOf(
|
|
52
|
-
AnalyticsDestinations.
|
|
53
|
-
AnalyticsDestinations.
|
|
52
|
+
AnalyticsDestinations.Firebase,
|
|
53
|
+
AnalyticsDestinations.CustomDestination,
|
|
54
54
|
),
|
|
55
55
|
)
|
|
56
56
|
|
|
@@ -59,14 +59,14 @@ sealed class AnalyticsEvent(
|
|
|
59
59
|
val courseName: String,
|
|
60
60
|
val fromScreen: CourseProfileSource,
|
|
61
61
|
) : AnalyticsEvent(
|
|
62
|
-
event = AnalyticsEvents.
|
|
62
|
+
event = AnalyticsEvents.CpPageViewB,
|
|
63
63
|
properties = mapOf(
|
|
64
64
|
"course_id" to courseId,
|
|
65
65
|
"course_name" to courseName,
|
|
66
66
|
"from_screen" to fromScreen.key,
|
|
67
67
|
),
|
|
68
68
|
destinations = arrayOf(
|
|
69
|
-
AnalyticsDestinations.
|
|
69
|
+
AnalyticsDestinations.Firebase,
|
|
70
70
|
),
|
|
71
71
|
)
|
|
72
72
|
|
|
@@ -75,7 +75,7 @@ sealed class AnalyticsEvent(
|
|
|
75
75
|
val courseName: String,
|
|
76
76
|
val fromScreen: CourseProfileSource?,
|
|
77
77
|
) : AnalyticsEvent(
|
|
78
|
-
event = AnalyticsEvents.
|
|
78
|
+
event = AnalyticsEvents.CpPageViewC,
|
|
79
79
|
properties = mapOf(
|
|
80
80
|
"course_id" to courseId,
|
|
81
81
|
"course_name" to courseName,
|
|
@@ -88,7 +88,7 @@ sealed class AnalyticsEvent(
|
|
|
88
88
|
val courseName: String,
|
|
89
89
|
val viewedAt: String,
|
|
90
90
|
) : AnalyticsEvent(
|
|
91
|
-
event = AnalyticsEvents.
|
|
91
|
+
event = AnalyticsEvents.CpPageViewD,
|
|
92
92
|
properties = mapOf(
|
|
93
93
|
"course_id" to courseId,
|
|
94
94
|
"course_name" to courseName,
|
|
@@ -106,7 +106,7 @@ Kotlin
|
|
|
106
106
|
subject { generator.special_property_enums(enums) }
|
|
107
107
|
let(:enums) { [
|
|
108
108
|
Evva::AnalyticsEnum.new("CourseProfileSource", ["course_discovery", "synced_courses"]),
|
|
109
|
-
Evva::AnalyticsEnum.new("PremiumFrom", ["Course Profile", "Round Setup"]),
|
|
109
|
+
Evva::AnalyticsEnum.new("PremiumFrom", ["Course Profile", "Round Setup", "PAYWALL", "push-notification v2"]),
|
|
110
110
|
] }
|
|
111
111
|
let(:expected) {
|
|
112
112
|
<<-Kotlin
|
|
@@ -117,17 +117,37 @@ package com.hole19golf.hole19.analytics
|
|
|
117
117
|
*/
|
|
118
118
|
|
|
119
119
|
enum class CourseProfileSource(val key: String) {
|
|
120
|
-
|
|
121
|
-
|
|
120
|
+
CourseDiscovery("course_discovery"),
|
|
121
|
+
SyncedCourses("synced_courses"),
|
|
122
122
|
}
|
|
123
123
|
|
|
124
124
|
enum class PremiumFrom(val key: String) {
|
|
125
|
-
|
|
126
|
-
|
|
125
|
+
CourseProfile("Course Profile"),
|
|
126
|
+
RoundSetup("Round Setup"),
|
|
127
|
+
Paywall("PAYWALL"),
|
|
128
|
+
PushNotificationV2("push-notification v2"),
|
|
127
129
|
}
|
|
128
130
|
Kotlin
|
|
129
131
|
}
|
|
130
132
|
it { should eq expected }
|
|
133
|
+
|
|
134
|
+
context "when values do not start with a letter or use non-ASCII letters" do
|
|
135
|
+
let(:enums) { [
|
|
136
|
+
Evva::AnalyticsEnum.new("HoleCount", ["9 holes", "_2fa", "日本語"]),
|
|
137
|
+
] }
|
|
138
|
+
|
|
139
|
+
let(:expected_enum) {
|
|
140
|
+
<<-Kotlin
|
|
141
|
+
enum class HoleCount(val key: String) {
|
|
142
|
+
_9Holes("9 holes"),
|
|
143
|
+
_2fa("_2fa"),
|
|
144
|
+
日本語("日本語"),
|
|
145
|
+
}
|
|
146
|
+
Kotlin
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
it { should include expected_enum }
|
|
150
|
+
end
|
|
131
151
|
end
|
|
132
152
|
|
|
133
153
|
describe "#event_enum" do
|
|
@@ -145,8 +165,8 @@ package com.hole19golf.hole19.analytics
|
|
|
145
165
|
*/
|
|
146
166
|
|
|
147
167
|
enum class AnalyticsEvents(val key: String) {
|
|
148
|
-
|
|
149
|
-
|
|
168
|
+
NavFeedTap("nav_feed_tap"),
|
|
169
|
+
NavPerformanceTap("nav_performance_tap"),
|
|
150
170
|
}
|
|
151
171
|
Kotlin
|
|
152
172
|
}
|
|
@@ -179,32 +199,32 @@ sealed class AnalyticsProperty(
|
|
|
179
199
|
data class RoundsWithWear(
|
|
180
200
|
val value: String?,
|
|
181
201
|
) : AnalyticsProperty(
|
|
182
|
-
property = AnalyticsProperties.
|
|
202
|
+
property = AnalyticsProperties.RoundsWithWear,
|
|
183
203
|
innerValue = value,
|
|
184
204
|
)
|
|
185
205
|
|
|
186
206
|
data class LastActiveAt(
|
|
187
207
|
val value: String,
|
|
188
208
|
) : AnalyticsProperty(
|
|
189
|
-
property = AnalyticsProperties.
|
|
209
|
+
property = AnalyticsProperties.LastActiveAt,
|
|
190
210
|
innerValue = value,
|
|
191
211
|
)
|
|
192
212
|
|
|
193
213
|
data class UpgradeSource(
|
|
194
214
|
val value: PremiumFrom,
|
|
195
215
|
) : AnalyticsProperty(
|
|
196
|
-
property = AnalyticsProperties.
|
|
216
|
+
property = AnalyticsProperties.UpgradeSource,
|
|
197
217
|
innerValue = value.key,
|
|
198
218
|
)
|
|
199
219
|
|
|
200
220
|
data class WearPlatform(
|
|
201
221
|
val value: WearableAppPlatform?,
|
|
202
222
|
) : AnalyticsProperty(
|
|
203
|
-
property = AnalyticsProperties.
|
|
223
|
+
property = AnalyticsProperties.WearPlatform,
|
|
204
224
|
innerValue = value?.key,
|
|
205
225
|
destinations = arrayOf(
|
|
206
|
-
AnalyticsDestinations.
|
|
207
|
-
AnalyticsDestinations.
|
|
226
|
+
AnalyticsDestinations.Firebase,
|
|
227
|
+
AnalyticsDestinations.CustomDestination,
|
|
208
228
|
),
|
|
209
229
|
)
|
|
210
230
|
}
|
|
@@ -229,8 +249,8 @@ package com.hole19golf.hole19.analytics
|
|
|
229
249
|
*/
|
|
230
250
|
|
|
231
251
|
enum class AnalyticsProperties(val key: String) {
|
|
232
|
-
|
|
233
|
-
|
|
252
|
+
RoundsWithWear("rounds_with_wear"),
|
|
253
|
+
WearPlatform("wear_platform"),
|
|
234
254
|
}
|
|
235
255
|
Kotlin
|
|
236
256
|
}
|
|
@@ -252,8 +272,8 @@ package com.hole19golf.hole19.analytics
|
|
|
252
272
|
*/
|
|
253
273
|
|
|
254
274
|
enum class AnalyticsDestinations {
|
|
255
|
-
|
|
256
|
-
|
|
275
|
+
Firebase,
|
|
276
|
+
WhateverYouWantReally,
|
|
257
277
|
}
|
|
258
278
|
Kotlin
|
|
259
279
|
}
|
metadata
CHANGED
|
@@ -1,15 +1,16 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: evva
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.11.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- André Andrade
|
|
8
8
|
- João Costa
|
|
9
9
|
- Ricardo Trindade
|
|
10
|
+
autorequire:
|
|
10
11
|
bindir: bin
|
|
11
12
|
cert_chain: []
|
|
12
|
-
date: 2026-
|
|
13
|
+
date: 2026-11-09 00:00:00.000000000 Z
|
|
13
14
|
dependencies:
|
|
14
15
|
- !ruby/object:Gem::Dependency
|
|
15
16
|
name: colorize
|
|
@@ -115,6 +116,7 @@ homepage: https://github.com/hole19/
|
|
|
115
116
|
licenses:
|
|
116
117
|
- MIT
|
|
117
118
|
metadata: {}
|
|
119
|
+
post_install_message:
|
|
118
120
|
rdoc_options: []
|
|
119
121
|
require_paths:
|
|
120
122
|
- lib
|
|
@@ -129,7 +131,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
129
131
|
- !ruby/object:Gem::Version
|
|
130
132
|
version: '0'
|
|
131
133
|
requirements: []
|
|
132
|
-
rubygems_version:
|
|
134
|
+
rubygems_version: 3.5.3
|
|
135
|
+
signing_key:
|
|
133
136
|
specification_version: 4
|
|
134
137
|
summary: An event generating service
|
|
135
138
|
test_files: []
|