voucher 0.2.1 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,8 +10,8 @@ module Voucher
10
10
  end
11
11
 
12
12
  class RootHashNotFound < VoucherError
13
- def initialize(shard)
14
- super("Root hash from shard #{shard} was not found.")
13
+ def initialize(block_height, shard)
14
+ super("Root hash from blockHeight #{block_height}, shard #{shard} was not found.")
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,339 @@
1
+ # frozen_string_literal: true
2
+
3
+ Config.aggregated_metric_types = %w(
4
+ click
5
+ conversion
6
+ impression
7
+ video_25
8
+ video_50
9
+ video_75
10
+ video_100
11
+ ).freeze
12
+
13
+ Config.non_aggregated_metric_types = %w(
14
+ bot
15
+ decision
16
+ non_bot
17
+ non_viewable
18
+ viewable
19
+ win
20
+ render
21
+ ).freeze
22
+
23
+ Config.cost_metrics = %w(
24
+ win_cost
25
+ decision_cost
26
+ ).freeze
27
+
28
+ Config.compound_metrics = {
29
+ 'bot_click' => %w(bot click),
30
+ 'bot_decision_win_click' => %w(bot decision win click),
31
+ 'bot_decision_win_impression' => %w(bot decision win impression),
32
+ 'bot_decision_win_render_click' => %w(bot decision win click render),
33
+ 'bot_decision_win_render_impression' => %w(bot decision win render impression),
34
+ 'bot_impression' => %w(impression bot),
35
+ 'bot_loaded_impression' => %w(impression win bot),
36
+ 'bot_loaded_click' => %w(bot click win),
37
+ 'bot_loaded_render_impression' => %w(impression win bot render),
38
+ 'bot_render_impression' => %w(impression bot render),
39
+ 'decision_win_click' => %w(decision win click),
40
+ 'decision_win_impression' => %w(impression decision win),
41
+ 'decision_win_render_click' => %w(decision win click render),
42
+ 'decision_win_render_impression' => %w(decision win render impression),
43
+ 'loaded_click' => %w(click win),
44
+ 'loaded_impression' => %w(impression win),
45
+ 'loaded_render_click' => %w(click win render),
46
+ 'loaded_render_impression' => %w(impression render win),
47
+ 'non_bot_decision_win_click' => %w(non_bot decision win click),
48
+ 'non_bot_decision_win_impression' => %w(non_bot decision win impression),
49
+ 'non_bot_decision_win_render_click' => %w(non_bot decision win click render),
50
+ 'non_bot_decision_win_render_impression' => %w(non_bot decision win render impression),
51
+ 'non_bot_impression' => %w(impression non_bot),
52
+ 'non_bot_click' => %w(non_bot click),
53
+ 'non_bot_loaded_impression' => %w(impression win non_bot),
54
+ 'non_bot_loaded_click' => %w(non_bot win click),
55
+ 'non_bot_loaded_render_impression' => %w(impression win non_bot render),
56
+ 'non_bot_render_impression' => %w(impression non_bot render),
57
+ 'non_viewable_bot_decision_win_click' => %w(non_viewable bot decision win click),
58
+ 'non_viewable_bot_decision_win_impression' => %w(non_viewable bot decision win impression),
59
+ 'non_viewable_bot_decision_win_render_click' => %w(non_viewable bot decision win click render),
60
+ 'non_viewable_bot_decision_win_render_impression' => %w(non_viewable bot decision win render impression),
61
+ 'non_viewable_bot_loaded_click' => %w(non_viewable bot win click),
62
+ 'non_viewable_bot_loaded_impression' => %w(non_viewable bot win impression),
63
+ 'non_viewable_bot_loaded_render_click' => %w(non_viewable bot win click render),
64
+ 'non_viewable_bot_loaded_render_impression' => %w(non_viewable bot win render impression),
65
+ 'non_viewable_click' => %w(click non_viewable),
66
+ 'non_viewable_decision_win_click' => %w(non_viewable decision win click),
67
+ 'non_viewable_decision_win_impression' => %w(non_viewable decision win impression),
68
+ 'non_viewable_decision_win_render_click' => %w(non_viewable decision win click render),
69
+ 'non_viewable_decision_win_render_impression' => %w(non_viewable decision win render impression),
70
+ 'non_viewable_impression' => %w(impression non_viewable),
71
+ 'non_viewable_loaded_click' => %w(non_viewable click win),
72
+ 'non_viewable_loaded_impression' => %w(non_viewable impression win),
73
+ 'non_viewable_loaded_render_click' => %w(non_viewable click win render),
74
+ 'non_viewable_loaded_render_impression' => %w(non_viewable impression win render),
75
+ 'non_viewable_non_bot_impression' => %w(non_viewable non_bot impression),
76
+ 'non_viewable_non_bot_click' => %w(non_viewable non_bot click),
77
+ 'non_viewable_non_bot_decision_win_click' => %w(non_viewable non_bot decision win click),
78
+ 'non_viewable_non_bot_decision_win_impression' => %w(non_viewable non_bot decision win impression),
79
+ 'non_viewable_non_bot_decision_win_render_click' => %w(non_viewable non_bot decision win click render),
80
+ 'non_viewable_non_bot_decision_win_render_impression' => %w(non_viewable non_bot decision win render impression),
81
+ 'non_viewable_non_bot_loaded_click' => %w(non_viewable non_bot win click),
82
+ 'non_viewable_non_bot_loaded_impression' => %w(non_viewable non_bot win impression),
83
+ 'non_viewable_non_bot_loaded_render_click' => %w(non_viewable non_bot win click render),
84
+ 'non_viewable_non_bot_loaded_render_impression' => %w(non_viewable non_bot win render impression),
85
+ 'non_viewable_render_click' => %w(click non_viewable render),
86
+ 'non_viewable_render_impression' => %w(impression non_viewable render),
87
+ 'render_click' => %w(click render),
88
+ 'render_impression' => %w(impression render),
89
+ 'viewable_bot_impression' => %w(viewable bot impression),
90
+ 'viewable_bot_click' => %w(viewable bot click),
91
+ 'viewable_bot_decision_win_click' => %w(viewable bot decision win click),
92
+ 'viewable_bot_decision_win_impression' => %w(viewable bot decision win impression),
93
+ 'viewable_bot_decision_win_render_click' => %w(viewable bot decision win click render),
94
+ 'viewable_bot_decision_win_render_impression' => %w(viewable bot decision win render impression),
95
+ 'viewable_bot_loaded_click' => %w(viewable bot click win),
96
+ 'viewable_bot_loaded_impression' => %w(viewable bot impression win),
97
+ 'viewable_bot_loaded_render_click' => %w(viewable bot click win render),
98
+ 'viewable_bot_loaded_render_impression' => %w(viewable bot impression win render),
99
+ 'viewable_click' => %w(click viewable),
100
+ 'viewable_decision_win_click' => %w(viewable decision click win),
101
+ 'viewable_decision_win_impression' => %w(viewable decision impression win),
102
+ 'viewable_decision_win_render_click' => %w(viewable decision click win render),
103
+ 'viewable_decision_win_render_impression' => %w(viewable decision win render impression),
104
+ 'viewable_impression' => %w(impression viewable),
105
+ 'viewable_loaded_click' => %w(viewable click win),
106
+ 'viewable_loaded_impression' => %w(viewable impression win),
107
+ 'viewable_loaded_render_click' => %w(viewable click win render),
108
+ 'viewable_loaded_render_impression' => %w(viewable impression win render),
109
+ 'viewable_non_bot_impression' => %w(viewable non_bot impression),
110
+ 'viewable_non_bot_click' => %w(viewable non_bot click),
111
+ 'viewable_non_bot_decision_win_click' => %w(viewable non_bot decision win click),
112
+ 'viewable_non_bot_decision_win_impression' => %w(viewable non_bot decision win impression),
113
+ 'viewable_non_bot_decision_win_render_click' => %w(viewable non_bot decision win click render),
114
+ 'viewable_non_bot_decision_win_render_impression' => %w(viewable non_bot decision win render impression),
115
+ 'viewable_non_bot_loaded_click' => %w(viewable non_bot win click),
116
+ 'viewable_non_bot_loaded_impression' => %w(viewable non_bot win impression),
117
+ 'viewable_non_bot_loaded_render_click' => %w(viewable non_bot win click render),
118
+ 'viewable_non_bot_loaded_render_impression' => %w(viewable non_bot win render impression),
119
+ 'viewable_render_click' => %w(click viewable render),
120
+ 'viewable_render_impression' => %w(impression viewable render),
121
+ 'loaded_video_25' => %w(video_25 win),
122
+ 'decision_win_video_25' => %w(video_25 decision win),
123
+ 'bot_video_25' => %w(video_25 bot),
124
+ 'loaded_bot_video_25' => %w(video_25 bot win),
125
+ 'bot_decision_win_video_25' => %w(bot video_25 decision win),
126
+ 'non_bot_video_25' => %w(video_25 non_bot),
127
+ 'non_bot_loaded_video_25' => %w(video_25 non_bot win),
128
+ 'non_bot_decision_win_video_25' => %w(video_25 non_bot decision win),
129
+ 'viewable_video_25' => %w(viewable video_25),
130
+ 'viewable_loaded_video_25' => %w(viewable video_25 win),
131
+ 'viewable_decision_win_video_25' => %w(viewable video_25 decision win),
132
+ 'non_viewable_video_25' => %w(non_viewable video_25),
133
+ 'non_viewable_loaded_video_25' => %w(non_viewable video_25 win),
134
+ 'non_viewable_decision_win_video_25' => %w(non_viewable video_25 decision win),
135
+ 'render_video_25' => %w(render video_25),
136
+ 'loaded_render_video_25' => %w(render win video_25),
137
+ 'decision_win_render_video_25' => %w(render decision win video_25),
138
+ 'viewable_bot_video_25' => %w(viewable bot video_25),
139
+ 'viewable_bot_loaded_video_25' => %w(viewable bot win video_25),
140
+ 'viewable_bot_decision_win_video_25' => %w(viewable bot decision win video_25),
141
+ 'viewable_non_bot_video_25' => %w(viewable non_bot video_25),
142
+ 'viewable_non_bot_loaded_video_25' => %w(viewable non_bot win video_25),
143
+ 'viewable_non_bot_decision_win_video_25' => %w(viewable non_bot decision win video_25),
144
+ 'viewable_render_video_25' => %w(viewable render video_25),
145
+ 'viewable_loaded_render_video_25' => %w(viewable render win video_25),
146
+ 'viewable_decision_win_render_video_25' => %w(viewable render decision win video_25),
147
+ 'vieawable_bot_render_video_25' => %w(viewable bot render video_25),
148
+ 'viewable_bot_loaded_render_video_25' => %w(viewable bot render win video_25),
149
+ 'viewable_bot_decision_win_render_video_25' => %w(viewable bot render decision win video_25),
150
+ 'viewable_non_bot_render_video_25' => %w(viewable non_bot render video_25),
151
+ 'viewable_non_bot_loaded_render_video_25' => %w(viewable non_bot render win video_25),
152
+ 'viewable_non_bot_decision_win_render_video_25' => %w(viewable non_bot render decision win video_25),
153
+ 'non_viewable_bot_video_25' => %w(non_viewable bot video_25),
154
+ 'non_viewable_bot_loaded_video_25' => %w(non_viewable bot win video_25),
155
+ 'non_viewable_bot_decision_win_video_25' => %w(non_viewable bot decision win video_25),
156
+ 'non_viewable_non_bot_video_25' => %w(non_viewable non_bot video_25),
157
+ 'non_viewable_non_bot_loaded_video_25' => %w(non_viewable non_bot win video_25),
158
+ 'non_viewable_non_bot_decision_win_video_25' => %w(non_viewable non_bot decision win video_25),
159
+ 'non_viewable_render_video_25' => %w(non_viewable render video_25),
160
+ 'non_viewable_loaded_render_video_25' => %w(non_viewable render win video_25),
161
+ 'non_viewable_decision_win_render_video_25' => %w(non_viewable render decision win video_25),
162
+ 'non_viewable_bot_render_video_25' => %w(non_viewable bot render video_25),
163
+ 'non_viewable_bot_loaded_render_video_25' => %w(non_viewable bot render win video_25),
164
+ 'non_viewable_bot_decision_win_render_video_25' => %w(non_viewable bot render decision win video_25),
165
+ 'non_viewable_non_bot_render_video_25' => %w(non_viewable non_bot render video_25),
166
+ 'non_viewable_non_bot_loaded_render_video_25' => %w(non_viewable non_bot render win video_25),
167
+ 'non_viewable_non_bot_decision_win_render_video_25' => %w(non_viewable non_bot render decision win video_25),
168
+ 'bot_render_video_25' => %w(bot render video_25),
169
+ 'bot_loaded_render_video_25' => %w(bot render video_25 win),
170
+ 'bot_decision_win_render_video_25' => %w(bot render video_25 decision win),
171
+ 'non_bot_render_video_25' => %w(non_bot render video_25),
172
+ 'non_bot_loaded_render_video_25' => %w(non_bot render win video_25),
173
+ 'non_bot_decision_win_render_video_25' => %w(non_bot render decision win video_25),
174
+ 'loaded_video_50' => %w(video_50 win),
175
+ 'decision_win_video_50' => %w(video_50 decision win),
176
+ 'bot_video_50' => %w(video_50 bot),
177
+ 'loaded_bot_video_50' => %w(video_50 bot win),
178
+ 'bot_decision_win_video_50' => %w(bot video_50 decision win),
179
+ 'non_bot_video_50' => %w(video_50 non_bot),
180
+ 'non_bot_loaded_video_50' => %w(video_50 non_bot win),
181
+ 'non_bot_decision_win_video_50' => %w(video_50 non_bot decision win),
182
+ 'viewable_video_50' => %w(viewable video_50),
183
+ 'viewable_loaded_video_50' => %w(viewable video_50 win),
184
+ 'viewable_decision_win_video_50' => %w(viewable video_50 decision win),
185
+ 'non_viewable_video_50' => %w(non_viewable video_50),
186
+ 'non_viewable_loaded_video_50' => %w(non_viewable video_50 win),
187
+ 'non_viewable_decision_win_video_50' => %w(non_viewable video_50 decision win),
188
+ 'render_video_50' => %w(render video_50),
189
+ 'loaded_render_video_50' => %w(render win video_50),
190
+ 'decision_win_render_video_50' => %w(render decision win video_50),
191
+ 'viewable_bot_video_50' => %w(viewable bot video_50),
192
+ 'viewable_bot_loaded_video_50' => %w(viewable bot win video_50),
193
+ 'viewable_bot_decision_win_video_50' => %w(viewable bot decision win video_50),
194
+ 'viewable_non_bot_video_50' => %w(viewable non_bot video_50),
195
+ 'viewable_non_bot_loaded_video_50' => %w(viewable non_bot win video_50),
196
+ 'viewable_non_bot_decision_win_video_50' => %w(viewable non_bot decision win video_50),
197
+ 'viewable_render_video_50' => %w(viewable render video_50),
198
+ 'viewable_loaded_render_video_50' => %w(viewable render win video_50),
199
+ 'viewable_decision_win_render_video_50' => %w(viewable render decision win video_50),
200
+ 'vieawable_bot_render_video_50' => %w(viewable bot render video_50),
201
+ 'viewable_bot_loaded_render_video_50' => %w(viewable bot render win video_50),
202
+ 'viewable_bot_decision_win_render_video_50' => %w(viewable bot render decision win video_50),
203
+ 'viewable_non_bot_render_video_50' => %w(viewable non_bot render video_50),
204
+ 'viewable_non_bot_loaded_render_video_50' => %w(viewable non_bot render win video_50),
205
+ 'viewable_non_bot_decision_win_render_video_50' => %w(viewable non_bot render decision win video_50),
206
+ 'non_viewable_bot_video_50' => %w(non_viewable bot video_50),
207
+ 'non_viewable_bot_loaded_video_50' => %w(non_viewable bot win video_50),
208
+ 'non_viewable_bot_decision_win_video_50' => %w(non_viewable bot decision win video_50),
209
+ 'non_viewable_non_bot_video_50' => %w(non_viewable non_bot video_50),
210
+ 'non_viewable_non_bot_loaded_video_50' => %w(non_viewable non_bot win video_50),
211
+ 'non_viewable_non_bot_decision_win_video_50' => %w(non_viewable non_bot decision win video_50),
212
+ 'non_viewable_render_video_50' => %w(non_viewable render video_50),
213
+ 'non_viewable_loaded_render_video_50' => %w(non_viewable render win video_50),
214
+ 'non_viewable_decision_win_render_video_50' => %w(non_viewable render decision win video_50),
215
+ 'non_viewable_bot_render_video_50' => %w(non_viewable bot render video_50),
216
+ 'non_viewable_bot_loaded_render_video_50' => %w(non_viewable bot render win video_50),
217
+ 'non_viewable_bot_decision_win_render_video_50' => %w(non_viewable bot render decision win video_50),
218
+ 'non_viewable_non_bot_render_video_50' => %w(non_viewable non_bot render video_50),
219
+ 'non_viewable_non_bot_loaded_render_video_50' => %w(non_viewable non_bot render win video_50),
220
+ 'non_viewable_non_bot_decision_win_render_video_50' => %w(non_viewable non_bot render decision win video_50),
221
+ 'bot_render_video_50' => %w(bot render video_50),
222
+ 'bot_loaded_render_video_50' => %w(bot render video_50 win),
223
+ 'bot_decision_win_render_video_50' => %w(bot render video_50 decision win),
224
+ 'non_bot_render_video_50' => %w(non_bot render video_50),
225
+ 'non_bot_loaded_render_video_50' => %w(non_bot render win video_50),
226
+ 'non_bot_decision_win_render_video_50' => %w(non_bot render decision win video_50),
227
+ 'loaded_video_75' => %w(video_75 win),
228
+ 'decision_win_video_75' => %w(video_75 decision win),
229
+ 'bot_video_75' => %w(video_75 bot),
230
+ 'loaded_bot_video_75' => %w(video_75 bot win),
231
+ 'bot_decision_win_video_75' => %w(bot video_75 decision win),
232
+ 'non_bot_video_75' => %w(video_75 non_bot),
233
+ 'non_bot_loaded_video_75' => %w(video_75 non_bot win),
234
+ 'non_bot_decision_win_video_75' => %w(video_75 non_bot decision win),
235
+ 'viewable_video_75' => %w(viewable video_75),
236
+ 'viewable_loaded_video_75' => %w(viewable video_75 win),
237
+ 'viewable_decision_win_video_75' => %w(viewable video_75 decision win),
238
+ 'non_viewable_video_75' => %w(non_viewable video_75),
239
+ 'non_viewable_loaded_video_75' => %w(non_viewable video_75 win),
240
+ 'non_viewable_decision_win_video_75' => %w(non_viewable video_75 decision win),
241
+ 'render_video_75' => %w(render video_75),
242
+ 'loaded_render_video_75' => %w(render win video_75),
243
+ 'decision_win_render_video_75' => %w(render decision win video_75),
244
+ 'viewable_bot_video_75' => %w(viewable bot video_75),
245
+ 'viewable_bot_loaded_video_75' => %w(viewable bot win video_75),
246
+ 'viewable_bot_decision_win_video_75' => %w(viewable bot decision win video_75),
247
+ 'viewable_non_bot_video_75' => %w(viewable non_bot video_75),
248
+ 'viewable_non_bot_loaded_video_75' => %w(viewable non_bot win video_75),
249
+ 'viewable_non_bot_decision_win_video_75' => %w(viewable non_bot decision win video_75),
250
+ 'viewable_render_video_75' => %w(viewable render video_75),
251
+ 'viewable_loaded_render_video_75' => %w(viewable render win video_75),
252
+ 'viewable_decision_win_render_video_75' => %w(viewable render decision win video_75),
253
+ 'vieawable_bot_render_video_75' => %w(viewable bot render video_75),
254
+ 'viewable_bot_loaded_render_video_75' => %w(viewable bot render win video_75),
255
+ 'viewable_bot_decision_win_render_video_75' => %w(viewable bot render decision win video_75),
256
+ 'viewable_non_bot_render_video_75' => %w(viewable non_bot render video_75),
257
+ 'viewable_non_bot_loaded_render_video_75' => %w(viewable non_bot render win video_75),
258
+ 'viewable_non_bot_decision_win_render_video_75' => %w(viewable non_bot render decision win video_75),
259
+ 'non_viewable_bot_video_75' => %w(non_viewable bot video_75),
260
+ 'non_viewable_bot_loaded_video_75' => %w(non_viewable bot win video_75),
261
+ 'non_viewable_bot_decision_win_video_75' => %w(non_viewable bot decision win video_75),
262
+ 'non_viewable_non_bot_video_75' => %w(non_viewable non_bot video_75),
263
+ 'non_viewable_non_bot_loaded_video_75' => %w(non_viewable non_bot win video_75),
264
+ 'non_viewable_non_bot_decision_win_video_75' => %w(non_viewable non_bot decision win video_75),
265
+ 'non_viewable_render_video_75' => %w(non_viewable render video_75),
266
+ 'non_viewable_loaded_render_video_75' => %w(non_viewable render win video_75),
267
+ 'non_viewable_decision_win_render_video_75' => %w(non_viewable render decision win video_75),
268
+ 'non_viewable_bot_render_video_75' => %w(non_viewable bot render video_75),
269
+ 'non_viewable_bot_loaded_render_video_75' => %w(non_viewable bot render win video_75),
270
+ 'non_viewable_bot_decision_win_render_video_75' => %w(non_viewable bot render decision win video_75),
271
+ 'non_viewable_non_bot_render_video_75' => %w(non_viewable non_bot render video_75),
272
+ 'non_viewable_non_bot_loaded_render_video_75' => %w(non_viewable non_bot render win video_75),
273
+ 'non_viewable_non_bot_decision_win_render_video_75' => %w(non_viewable non_bot render decision win video_75),
274
+ 'bot_render_video_75' => %w(bot render video_75),
275
+ 'bot_loaded_render_video_75' => %w(bot render video_75 win),
276
+ 'bot_decision_win_render_video_75' => %w(bot render video_75 decision win),
277
+ 'non_bot_render_video_75' => %w(non_bot render video_75),
278
+ 'non_bot_loaded_render_video_75' => %w(non_bot render win video_75),
279
+ 'non_bot_decision_win_render_video_75' => %w(non_bot render decision win video_75),
280
+ 'loaded_video_100' => %w(video_100 win),
281
+ 'decision_win_video_100' => %w(video_100 decision win),
282
+ 'bot_video_100' => %w(video_100 bot),
283
+ 'loaded_bot_video_100' => %w(video_100 bot win),
284
+ 'bot_decision_win_video_100' => %w(bot video_100 decision win),
285
+ 'non_bot_video_100' => %w(video_100 non_bot),
286
+ 'non_bot_loaded_video_100' => %w(video_100 non_bot win),
287
+ 'non_bot_decision_win_video_100' => %w(video_100 non_bot decision win),
288
+ 'viewable_video_100' => %w(viewable video_100),
289
+ 'viewable_loaded_video_100' => %w(viewable video_100 win),
290
+ 'viewable_decision_win_video_100' => %w(viewable video_100 decision win),
291
+ 'non_viewable_video_100' => %w(non_viewable video_100),
292
+ 'non_viewable_loaded_video_100' => %w(non_viewable video_100 win),
293
+ 'non_viewable_decision_win_video_100' => %w(non_viewable video_100 decision win),
294
+ 'render_video_100' => %w(render video_100),
295
+ 'loaded_render_video_100' => %w(render win video_100),
296
+ 'decision_win_render_video_100' => %w(render decision win video_100),
297
+ 'viewable_bot_video_100' => %w(viewable bot video_100),
298
+ 'viewable_bot_loaded_video_100' => %w(viewable bot win video_100),
299
+ 'viewable_bot_decision_win_video_100' => %w(viewable bot decision win video_100),
300
+ 'viewable_non_bot_video_100' => %w(viewable non_bot video_100),
301
+ 'viewable_non_bot_loaded_video_100' => %w(viewable non_bot win video_100),
302
+ 'viewable_non_bot_decision_win_video_100' => %w(viewable non_bot decision win video_100),
303
+ 'viewable_render_video_100' => %w(viewable render video_100),
304
+ 'viewable_loaded_render_video_100' => %w(viewable render win video_100),
305
+ 'viewable_decision_win_render_video_100' => %w(viewable render decision win video_100),
306
+ 'vieawable_bot_render_video_100' => %w(viewable bot render video_100),
307
+ 'viewable_bot_loaded_render_video_100' => %w(viewable bot render win video_100),
308
+ 'viewable_bot_decision_win_render_video_100' => %w(viewable bot render decision win video_100),
309
+ 'viewable_non_bot_render_video_100' => %w(viewable non_bot render video_100),
310
+ 'viewable_non_bot_loaded_render_video_100' => %w(viewable non_bot render win video_100),
311
+ 'viewable_non_bot_decision_win_render_video_100' => %w(viewable non_bot render decision win video_100),
312
+ 'non_viewable_bot_video_100' => %w(non_viewable bot video_100),
313
+ 'non_viewable_bot_loaded_video_100' => %w(non_viewable bot win video_100),
314
+ 'non_viewable_bot_decision_win_video_100' => %w(non_viewable bot decision win video_100),
315
+ 'non_viewable_non_bot_video_100' => %w(non_viewable non_bot video_100),
316
+ 'non_viewable_non_bot_loaded_video_100' => %w(non_viewable non_bot win video_100),
317
+ 'non_viewable_non_bot_decision_win_video_100' => %w(non_viewable non_bot decision win video_100),
318
+ 'non_viewable_render_video_100' => %w(non_viewable render video_100),
319
+ 'non_viewable_loaded_render_video_100' => %w(non_viewable render win video_100),
320
+ 'non_viewable_decision_win_render_video_100' => %w(non_viewable render decision win video_100),
321
+ 'non_viewable_bot_render_video_100' => %w(non_viewable bot render video_100),
322
+ 'non_viewable_bot_loaded_render_video_100' => %w(non_viewable bot render win video_100),
323
+ 'non_viewable_bot_decision_win_render_video_100' => %w(non_viewable bot render decision win video_100),
324
+ 'non_viewable_non_bot_render_video_100' => %w(non_viewable non_bot render video_100),
325
+ 'non_viewable_non_bot_loaded_render_video_100' => %w(non_viewable non_bot render win video_100),
326
+ 'non_viewable_non_bot_decision_win_render_video_100' => %w(non_viewable non_bot render decision win video_100),
327
+ 'bot_render_video_100' => %w(bot render video_100),
328
+ 'bot_loaded_render_video_100' => %w(bot render video_100 win),
329
+ 'bot_decision_win_render_video_100' => %w(bot render video_100 decision win),
330
+ 'non_bot_render_video_100' => %w(non_bot render video_100),
331
+ 'non_bot_loaded_render_video_100' => %w(non_bot render win video_100),
332
+ 'non_bot_decision_win_render_video_100' => %w(non_bot render decision win video_100)
333
+ }.freeze
334
+
335
+ Config.compound_metric_types = Config.compound_metrics.keys
336
+
337
+ Config.metrics = (Config.aggregated_metric_types + Config.non_aggregated_metric_types).freeze
338
+
339
+ Config.metric_types = (Config.metrics + Config.compound_metrics.keys)
@@ -1,104 +1,54 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module Voucher
4
- class Segment
5
- include Virtus.model
3
+ class Segment
4
+ include Virtus.model
6
5
 
7
- COMPOUND_METRICS = %w(
8
- bot_clicks
9
- bot_decision_win_clicks
10
- bot_decision_win_impressions
11
- bot_impressions
12
- bot_loaded_clicks
13
- bot_loaded_impressions
14
- decision_win_clicks
15
- decision_win_impressions
16
- loaded_clicks
17
- loaded_impressions
18
- non_bot_clicks
19
- non_bot_decision_win_clicks
20
- non_bot_decision_win_impressions
21
- non_bot_impressions
22
- non_bot_loaded_clicks
23
- non_bot_loaded_impressions
24
- non_viewable_bot_decision_win_clicks
25
- non_viewable_bot_decision_win_impressions
26
- non_viewable_bot_loaded_clicks
27
- non_viewable_bot_loaded_impressions
28
- non_viewable_clicks
29
- non_viewable_decision_win_clicks
30
- non_viewable_decision_win_impressions
31
- non_viewable_impressions
32
- non_viewable_loaded_clicks
33
- non_viewable_loaded_impressions
34
- non_viewable_non_bot_clicks
35
- non_viewable_non_bot_decision_win_clicks
36
- non_viewable_non_bot_decision_win_impressions
37
- non_viewable_non_bot_impressions
38
- non_viewable_non_bot_loaded_clicks
39
- non_viewable_non_bot_loaded_impressions
40
- viewable_bot_clicks
41
- viewable_bot_decision_win_clicks
42
- viewable_bot_decision_win_impressions
43
- viewable_bot_impressions
44
- viewable_bot_loaded_clicks
45
- viewable_bot_loaded_impressions
46
- viewable_clicks
47
- viewable_decision_win_clicks
48
- viewable_decision_win_impressions
49
- viewable_impressions
50
- viewable_loaded_clicks
51
- viewable_loaded_impressions
52
- viewable_non_bot_clicks
53
- viewable_non_bot_decision_win_clicks
54
- viewable_non_bot_decision_win_impressions
55
- viewable_non_bot_impressions
56
- viewable_non_bot_loaded_clicks
57
- viewable_non_bot_loaded_impressions
58
- ).freeze
6
+ GROUP_BY_FIELDS = %w(
7
+ advertiser_id
8
+ advertisement_id
9
+ campaign_id
10
+ channel_id
11
+ app_id
12
+ exchange_id
13
+ publisher_id
14
+ agency_id
15
+ site_id
16
+ third_party_id
17
+ supply_id
18
+ ).freeze
59
19
 
60
- FIELDS = %w(
61
- advertiser_id
62
- agency_id
63
- app_id
64
- campaign_id
65
- channel_id
66
- clicks
67
- conversions
68
- decision_cost
69
- exchange_id
70
- impressions
71
- publisher_id
72
- site_id
73
- supply_id
74
- third_party_id
75
- win_cost
76
- ).sort.freeze + COMPOUND_METRICS
20
+ COMPOUND_METRICS_FIELDS =
21
+ Config.compound_metric_types.reject { |m| m.include?('render') }.map(&:pluralize)
77
22
 
78
- attribute :advertiser_id, String
79
- attribute :agency_id, String
80
- attribute :app_id, String
81
- attribute :campaign_id, String
82
- attribute :channel_id, String
83
- attribute :clicks, Integer
84
- attribute :conversions, Integer
85
- attribute :decision_cost, Integer
86
- attribute :exchange_id, String
87
- attribute :impressions, Integer
88
- attribute :publisher_id, String
89
- attribute :site_id, String
90
- attribute :supply_id, String
91
- attribute :third_party_id, String
92
- attribute :win_cost, Integer
93
- attribute :shard, Integer
94
- attribute :siblings, Array[String]
23
+ AGGREGATED_METRIC_FIELDS = Config.aggregated_metric_types.map(&:pluralize)
24
+ COST_METRIC_FIELDS = Config.cost_metrics
95
25
 
96
- COMPOUND_METRICS.each do |metric|
97
- attribute metric.to_sym, Integer
98
- end
26
+ VERIFIED_FIELDS =
27
+ (GROUP_BY_FIELDS +
28
+ AGGREGATED_METRIC_FIELDS +
29
+ COMPOUND_METRICS_FIELDS +
30
+ COST_METRIC_FIELDS).sort.freeze
99
31
 
100
- def hash
101
- Hashtastic::DictionaryValuesHasher.call(attributes, FIELDS)
102
- end
32
+ attribute :shard, Integer
33
+ attribute :siblings, Array[String]
34
+
35
+ GROUP_BY_FIELDS.each do |f|
36
+ attribute f.to_sym, String
37
+ end
38
+
39
+ AGGREGATED_METRIC_FIELDS.each do |f|
40
+ attribute f.to_sym, Integer
41
+ end
42
+
43
+ COMPOUND_METRICS_FIELDS.each do |f|
44
+ attribute f.to_sym, Integer
45
+ end
46
+
47
+ COST_METRIC_FIELDS.each do |f|
48
+ attribute f.to_sym, Float
49
+ end
50
+
51
+ def hash
52
+ Hashtastic::DictionaryValuesHasher.call(attributes, VERIFIED_FIELDS)
103
53
  end
104
54
  end