yellow-brick-road 0.2.2 → 0.2.3

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 (34) hide show
  1. data/README.rst +9 -1
  2. data/Rakefile +0 -3
  3. data/lib/generators/templates/yellow_brick_road.rb.erb +12 -0
  4. data/lib/tasks/ybr.rake +12 -0
  5. data/lib/yellow-brick-road.rb +5 -0
  6. data/lib/yellow-brick-road/config.rb +45 -6
  7. data/lib/yellow-brick-road/directive_processor.rb +89 -10
  8. data/lib/yellow-brick-road/engine.rb +10 -0
  9. data/lib/yellow-brick-road/protobuf_js.rb +32 -0
  10. data/lib/yellow-brick-road/soy_processor.rb +13 -4
  11. data/lib/yellow-brick-road/utils.rb +7 -1
  12. data/lib/yellow-brick-road/version.rb +1 -1
  13. data/test/dummy/app/assets/javascripts/application.js +1 -0
  14. data/test/dummy/app/assets/javascripts/closure-deps.js +2 -1
  15. data/test/dummy/app/assets/javascripts/protos/person.pb.js +207 -0
  16. data/test/dummy/app/protos/person.proto +5 -0
  17. data/test/dummy/log/development.log +1544 -0
  18. data/test/dummy/tmp/cache/assets/C5B/240/sprockets%2Fc561864da49634b1e8464990f63f4123 +314 -0
  19. data/test/dummy/tmp/cache/assets/C7E/9F0/sprockets%2F89862076204c62c4593ac20de32da909 +6 -5
  20. data/test/dummy/tmp/cache/assets/CBD/850/sprockets%2F9191c7b83dca8e9342628ac59e452229 +297 -0
  21. data/test/dummy/tmp/cache/assets/CCC/BB0/sprockets%2F649c7cc1e706997576646e6dd790d7a0 +0 -0
  22. data/test/dummy/tmp/cache/assets/CE0/AB0/sprockets%2Fb8f01070d8f72dd30306684ef61858ac +204 -0
  23. data/test/dummy/tmp/cache/assets/CF7/BC0/sprockets%2Fe47129798756fd8f35bd4350bff5e461 +213 -0
  24. data/test/dummy/tmp/cache/assets/D15/F60/sprockets%2Fa28394e3f80365b5bc86794dd46daa22 +0 -0
  25. data/test/dummy/tmp/cache/assets/D50/F20/sprockets%2Fd858e852254b667a8efffa4f12d96d11 +0 -0
  26. data/test/dummy/tmp/cache/assets/D6B/0C0/sprockets%2F8c3bdd9c000f7f5a26e91f294a71c3c4 +0 -0
  27. data/test/dummy/tmp/cache/assets/D6F/6D0/sprockets%2Ff9f65ec20235e6595b5eb2ab91f15bb4 +1441 -0
  28. data/test/dummy/tmp/cache/assets/D84/210/sprockets%2Fabd0103ccec2b428ac62c94e4c40b384 +7 -5
  29. data/test/dummy/tmp/cache/assets/D97/E60/sprockets%2F18762119fe3a03903efaac2bfceec628 +763 -0
  30. data/test/dummy/tmp/cache/assets/DA1/670/sprockets%2Fccb4ba5dcd2f7696c636666ca5ab6057 +60 -0
  31. data/test/dummy/tmp/cache/assets/DED/040/sprockets%2Fd3aa2ab8d25cde3b6fb324dbb8c42933 +746 -0
  32. data/test/dummy/tmp/cache/assets/E04/890/sprockets%2F2f5173deea6c795b8fdde723bb4b63af +0 -0
  33. metadata +38 -11
  34. data/lib/tasks/yellow-brick-road_tasks.rake +0 -4
@@ -0,0 +1,60 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1326427868.131518: @value{ I" length:EFiuI" digest;
2
+ F"%bc60fb6f6b6a839326b6fbadc60fb1c5I" source;
3
+ FI"u// Copyright 2009 The Closure Library Authors. All Rights Reserved.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS-IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+
17
+ /**
18
+ * @fileoverview Utility methods for Protocol Buffer 2 implementation.
19
+ */
20
+
21
+
22
+ goog.provide('goog.proto2.Util');
23
+
24
+ goog.require('goog.asserts');
25
+
26
+
27
+ /**
28
+ * @define {boolean} Defines a PBCHECK constant that can be turned off by
29
+ * clients of PB2. This for is clients that do not want assertion/checking
30
+ * running even in non-COMPILED builds.
31
+ */
32
+ goog.proto2.Util.PBCHECK = !COMPILED;
33
+
34
+
35
+ /**
36
+ * Asserts that the given condition is true, if and only if the PBCHECK
37
+ * flag is on.
38
+ *
39
+ * @param {*} condition The condition to check.
40
+ * @param {string=} opt_message Error message in case of failure.
41
+ * @throws {Error} Assertion failed, the condition evaluates to false.
42
+ */
43
+ goog.proto2.Util.assert = function(condition, opt_message) {
44
+ if (goog.proto2.Util.PBCHECK) {
45
+ goog.asserts.assert(condition, opt_message);
46
+ }
47
+ };
48
+
49
+
50
+ /**
51
+ * Returns true if debug assertions (checks) are on.
52
+ *
53
+ * @return {boolean} The value of the PBCHECK constant.
54
+ */
55
+ goog.proto2.Util.conductChecks = function() {
56
+ return goog.proto2.Util.PBCHECK;
57
+ };
58
+ ;
59
+ FI"
60
+ F"%b63f36a1d47a4323f54f178ad295815d
@@ -0,0 +1,746 @@
1
+ o: ActiveSupport::Cache::Entry :@compressedF:@expires_in0:@created_atf1326427868.348992: @value{ I" length:EFi�QI" digest;
2
+ F"%72b334f2449f38dc197440fe1204d22eI" source;
3
+ FI"�Q// Copyright 2008 The Closure Library Authors. All Rights Reserved.
4
+ //
5
+ // Licensed under the Apache License, Version 2.0 (the "License");
6
+ // you may not use this file except in compliance with the License.
7
+ // You may obtain a copy of the License at
8
+ //
9
+ // http://www.apache.org/licenses/LICENSE-2.0
10
+ //
11
+ // Unless required by applicable law or agreed to in writing, software
12
+ // distributed under the License is distributed on an "AS-IS" BASIS,
13
+ // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14
+ // See the License for the specific language governing permissions and
15
+ // limitations under the License.
16
+
17
+ /**
18
+ * @fileoverview Protocol Buffer Message base class.
19
+ */
20
+
21
+
22
+ goog.provide('goog.proto2.Message');
23
+
24
+ goog.require('goog.proto2.Descriptor');
25
+ goog.require('goog.proto2.FieldDescriptor');
26
+ goog.require('goog.proto2.Util');
27
+ goog.require('goog.string');
28
+
29
+
30
+
31
+ /**
32
+ * Abstract base class for all Protocol Buffer 2 messages. It will be
33
+ * subclassed in the code generated by the Protocol Compiler. Any other
34
+ * subclasses are prohibited.
35
+ * @constructor
36
+ */
37
+ goog.proto2.Message = function() {
38
+ /**
39
+ * Stores the field values in this message.
40
+ * @type {*}
41
+ * @private
42
+ */
43
+ this.values_ = {};
44
+
45
+ // The descriptor_ is static to the message function that is being created.
46
+ // Therefore, we retrieve it via the constructor.
47
+
48
+ /**
49
+ * Stores the information (i.e. metadata) about this message.
50
+ * @type {!goog.proto2.Descriptor}
51
+ * @private
52
+ */
53
+ this.descriptor_ = this.constructor.descriptor_;
54
+
55
+ /**
56
+ * Stores the field information (i.e. metadata) about this message.
57
+ * @type {Object.<number, !goog.proto2.FieldDescriptor>}
58
+ * @private
59
+ */
60
+ this.fields_ = this.descriptor_.getFieldsMap();
61
+
62
+ /**
63
+ * The lazy deserializer for this message instance, if any.
64
+ * @type {goog.proto2.LazyDeserializer}
65
+ * @private
66
+ */
67
+ this.lazyDeserializer_ = null;
68
+
69
+ /**
70
+ * A map of those fields deserialized.
71
+ * @type {Object}
72
+ * @private
73
+ */
74
+ this.deserializedFields_ = null;
75
+ };
76
+
77
+
78
+ /**
79
+ * An enumeration defining the possible field types.
80
+ * Should be a mirror of that defined in descriptor.h.
81
+ *
82
+ * TODO(user): Remove this alias. The code generator generates code that
83
+ * references this enum, so it needs to exist until the code generator is
84
+ * changed. The enum was moved to from Message to FieldDescriptor to avoid a
85
+ * dependency cycle.
86
+ *
87
+ * Use goog.proto2.FieldDescriptor.FieldType instead.
88
+ *
89
+ * @enum {number}
90
+ */
91
+ goog.proto2.Message.FieldType = {
92
+ DOUBLE: 1,
93
+ FLOAT: 2,
94
+ INT64: 3,
95
+ UINT64: 4,
96
+ INT32: 5,
97
+ FIXED64: 6,
98
+ FIXED32: 7,
99
+ BOOL: 8,
100
+ STRING: 9,
101
+ GROUP: 10,
102
+ MESSAGE: 11,
103
+ BYTES: 12,
104
+ UINT32: 13,
105
+ ENUM: 14,
106
+ SFIXED32: 15,
107
+ SFIXED64: 16,
108
+ SINT32: 17,
109
+ SINT64: 18
110
+ };
111
+
112
+
113
+ /**
114
+ * Initializes the message with a lazy deserializer and its associated data.
115
+ * This method should be called by internal methods ONLY.
116
+ *
117
+ * @param {goog.proto2.LazyDeserializer} deserializer The lazy deserializer to
118
+ * use to decode the data on the fly.
119
+ *
120
+ * @param {*} data The data to decode/deserialize.
121
+ */
122
+ goog.proto2.Message.prototype.initializeForLazyDeserializer = function(
123
+ deserializer, data) {
124
+
125
+ this.lazyDeserializer_ = deserializer;
126
+ this.values_ = data;
127
+ this.deserializedFields_ = {};
128
+ };
129
+
130
+
131
+ /**
132
+ * Sets the value of an unknown field, by tag.
133
+ *
134
+ * @param {number} tag The tag of an unknown field (must be >= 1).
135
+ * @param {*} value The value for that unknown field.
136
+ */
137
+ goog.proto2.Message.prototype.setUnknown = function(tag, value) {
138
+ goog.proto2.Util.assert(!this.fields_[tag],
139
+ 'Field is not unknown in this message');
140
+
141
+ goog.proto2.Util.assert(tag >= 1, 'Tag is not valid');
142
+ goog.proto2.Util.assert(value !== null, 'Value cannot be null');
143
+
144
+ this.values_[tag] = value;
145
+ };
146
+
147
+
148
+ /**
149
+ * Iterates over all the unknown fields in the message.
150
+ *
151
+ * @param {function(number, *)} callback A callback method
152
+ * which gets invoked for each unknown field.
153
+ * @param {Object=} opt_scope The scope under which to execute the callback.
154
+ * If not given, the current message will be used.
155
+ */
156
+ goog.proto2.Message.prototype.forEachUnknown = function(callback, opt_scope) {
157
+ var scope = opt_scope || this;
158
+ for (var key in this.values_) {
159
+ if (!this.fields_[/** @type {number} */ (key)]) {
160
+ callback.call(scope, Number(key), this.values_[key]);
161
+ }
162
+ }
163
+ };
164
+
165
+
166
+ /**
167
+ * Returns the descriptor which describes the current message.
168
+ *
169
+ * @return {goog.proto2.Descriptor} The descriptor.
170
+ */
171
+ goog.proto2.Message.prototype.getDescriptor = function() {
172
+ return this.descriptor_;
173
+ };
174
+
175
+
176
+ /**
177
+ * Returns whether there is a value stored at the field specified by the
178
+ * given field descriptor.
179
+ *
180
+ * @param {goog.proto2.FieldDescriptor} field The field for which to check
181
+ * if there is a value.
182
+ *
183
+ * @return {boolean} True if a value was found.
184
+ */
185
+ goog.proto2.Message.prototype.has = function(field) {
186
+ goog.proto2.Util.assert(
187
+ field.getContainingType() == this.descriptor_,
188
+ 'The current message does not contain the given field');
189
+
190
+ return this.has$Value(field.getTag());
191
+ };
192
+
193
+
194
+ /**
195
+ * Returns the array of values found for the given repeated field.
196
+ *
197
+ * @param {goog.proto2.FieldDescriptor} field The field for which to
198
+ * return the values.
199
+ *
200
+ * @return {!Array} The values found.
201
+ */
202
+ goog.proto2.Message.prototype.arrayOf = function(field) {
203
+ goog.proto2.Util.assert(
204
+ field.getContainingType() == this.descriptor_,
205
+ 'The current message does not contain the given field');
206
+
207
+ return this.array$Values(field.getTag());
208
+ };
209
+
210
+
211
+ /**
212
+ * Returns the number of values stored in the given field.
213
+ *
214
+ * @param {goog.proto2.FieldDescriptor} field The field for which to count
215
+ * the number of values.
216
+ *
217
+ * @return {number} The count of the values in the given field.
218
+ */
219
+ goog.proto2.Message.prototype.countOf = function(field) {
220
+ goog.proto2.Util.assert(
221
+ field.getContainingType() == this.descriptor_,
222
+ 'The current message does not contain the given field');
223
+
224
+ return this.count$Values(field.getTag());
225
+ };
226
+
227
+
228
+ /**
229
+ * Returns the value stored at the field specified by the
230
+ * given field descriptor.
231
+ *
232
+ * @param {goog.proto2.FieldDescriptor} field The field for which to get the
233
+ * value.
234
+ * @param {number=} opt_index If the field is repeated, the index to use when
235
+ * looking up the value.
236
+ *
237
+ * @return {*} The value found or null if none.
238
+ */
239
+ goog.proto2.Message.prototype.get = function(field, opt_index) {
240
+ goog.proto2.Util.assert(
241
+ field.getContainingType() == this.descriptor_,
242
+ 'The current message does not contain the given field');
243
+
244
+ return this.get$Value(field.getTag(), opt_index);
245
+ };
246
+
247
+
248
+ /**
249
+ * Returns the value stored at the field specified by the
250
+ * given field descriptor or the default value if none exists.
251
+ *
252
+ * @param {goog.proto2.FieldDescriptor} field The field for which to get the
253
+ * value.
254
+ * @param {number=} opt_index If the field is repeated, the index to use when
255
+ * looking up the value.
256
+ *
257
+ * @return {*} The value found or the default if none.
258
+ */
259
+ goog.proto2.Message.prototype.getOrDefault = function(field, opt_index) {
260
+ goog.proto2.Util.assert(
261
+ field.getContainingType() == this.descriptor_,
262
+ 'The current message does not contain the given field');
263
+
264
+ return this.get$ValueOrDefault(field.getTag(), opt_index);
265
+ };
266
+
267
+
268
+ /**
269
+ * Stores the given value to the field specified by the
270
+ * given field descriptor. Note that the field must not be repeated.
271
+ *
272
+ * @param {goog.proto2.FieldDescriptor} field The field for which to set
273
+ * the value.
274
+ * @param {*} value The new value for the field.
275
+ */
276
+ goog.proto2.Message.prototype.set = function(field, value) {
277
+ goog.proto2.Util.assert(
278
+ field.getContainingType() == this.descriptor_,
279
+ 'The current message does not contain the given field');
280
+
281
+ this.set$Value(field.getTag(), value);
282
+ };
283
+
284
+
285
+ /**
286
+ * Adds the given value to the field specified by the
287
+ * given field descriptor. Note that the field must be repeated.
288
+ *
289
+ * @param {goog.proto2.FieldDescriptor} field The field in which to add the
290
+ * the value.
291
+ * @param {*} value The new value to add to the field.
292
+ */
293
+ goog.proto2.Message.prototype.add = function(field, value) {
294
+ goog.proto2.Util.assert(
295
+ field.getContainingType() == this.descriptor_,
296
+ 'The current message does not contain the given field');
297
+
298
+ this.add$Value(field.getTag(), value);
299
+ };
300
+
301
+
302
+ /**
303
+ * Clears the field specified.
304
+ *
305
+ * @param {goog.proto2.FieldDescriptor} field The field to clear.
306
+ */
307
+ goog.proto2.Message.prototype.clear = function(field) {
308
+ goog.proto2.Util.assert(
309
+ field.getContainingType() == this.descriptor_,
310
+ 'The current message does not contain the given field');
311
+
312
+ this.clear$Field(field.getTag());
313
+ };
314
+
315
+
316
+ /**
317
+ * Compares this message with another one ignoring the unknown fields.
318
+ * @param {*} other The other message.
319
+ * @return {boolean} Whether they are equal. Returns false if the {@code other}
320
+ * argument is a different type of message or not a message.
321
+ */
322
+ goog.proto2.Message.prototype.equals = function(other) {
323
+ if (!other || this.constructor != other.constructor) {
324
+ return false;
325
+ }
326
+
327
+ var fields = this.getDescriptor().getFields();
328
+ for (var i = 0; i < fields.length; i++) {
329
+ var field = fields[i];
330
+ if (this.has(field) != other.has(field)) {
331
+ return false;
332
+ }
333
+
334
+ if (this.has(field)) {
335
+ var isComposite = field.isCompositeType();
336
+
337
+ function fieldsEqual(value1, value2) {
338
+ return isComposite ? value1.equals(value2) : value1 == value2;
339
+ }
340
+
341
+ var tag = field.getTag();
342
+ var thisValue = this.values_[tag];
343
+ var otherValue = other.values_[tag];
344
+
345
+ if (field.isRepeated()) {
346
+ // In this case thisValue and otherValue are arrays.
347
+ if (thisValue.length != otherValue.length) {
348
+ return false;
349
+ }
350
+ for (var j = 0; j < thisValue.length; j++) {
351
+ if (!fieldsEqual(thisValue[j], otherValue[j])) {
352
+ return false;
353
+ }
354
+ }
355
+ } else if (!fieldsEqual(thisValue, otherValue)) {
356
+ return false;
357
+ }
358
+ }
359
+ }
360
+
361
+ return true;
362
+ };
363
+
364
+
365
+ /**
366
+ * Recursively copies the known fields from the given message to this message.
367
+ * Removes the fields which are not present in the source message.
368
+ * @param {!goog.proto2.Message} message The source message.
369
+ */
370
+ goog.proto2.Message.prototype.copyFrom = function(message) {
371
+ goog.proto2.Util.assert(this.constructor == message.constructor,
372
+ 'The source message must have the same type.');
373
+ var fields = this.getDescriptor().getFields();
374
+
375
+ for (var i = 0; i < fields.length; i++) {
376
+ var field = fields[i];
377
+ delete this.values_[field.getTag()];
378
+
379
+ if (message.has(field)) {
380
+ var isComposite = field.isCompositeType();
381
+ if (field.isRepeated()) {
382
+ var values = message.arrayOf(field);
383
+ for (var j = 0; j < values.length; j++) {
384
+ this.add(field, isComposite ? values[j].clone() : values[j]);
385
+ }
386
+ } else {
387
+ var value = message.get(field);
388
+ this.set(field, isComposite ? value.clone() : value);
389
+ }
390
+ }
391
+ }
392
+ };
393
+
394
+
395
+ /**
396
+ * @return {!goog.proto2.Message} Recursive clone of the message only including
397
+ * the known fields.
398
+ */
399
+ goog.proto2.Message.prototype.clone = function() {
400
+ var clone = new this.constructor;
401
+ clone.copyFrom(this);
402
+ return clone;
403
+ };
404
+
405
+
406
+ /**
407
+ * Fills in the protocol buffer with default values. Any fields that are
408
+ * already set will not be overridden.
409
+ * @param {boolean} simpleFieldsToo If true, all fields will be initialized;
410
+ * if false, only the nested messages and groups.
411
+ */
412
+ goog.proto2.Message.prototype.initDefaults = function(simpleFieldsToo) {
413
+ var fields = this.getDescriptor().getFields();
414
+ for (var i = 0; i < fields.length; i++) {
415
+ var field = fields[i];
416
+ var tag = field.getTag();
417
+ var isComposite = field.isCompositeType();
418
+
419
+ // Initialize missing fields.
420
+ if (!this.has(field) && !field.isRepeated()) {
421
+ if (isComposite) {
422
+ this.values_[tag] = new /** @type {Function} */ (field.getNativeType());
423
+ } else if (simpleFieldsToo) {
424
+ this.values_[tag] = field.getDefaultValue();
425
+ }
426
+ }
427
+
428
+ // Fill in the existing composite fields recursively.
429
+ if (isComposite) {
430
+ if (field.isRepeated()) {
431
+ var values = this.array$Values(tag);
432
+ for (var j = 0; j < values.length; j++) {
433
+ values[j].initDefaults(simpleFieldsToo);
434
+ }
435
+ } else {
436
+ this.get$Value(tag).initDefaults(simpleFieldsToo);
437
+ }
438
+ }
439
+ }
440
+ };
441
+
442
+
443
+ /**
444
+ * Returns the field in this message by the given tag number. If no
445
+ * such field exists, throws an exception.
446
+ *
447
+ * @param {number} tag The field's tag index.
448
+ * @return {!goog.proto2.FieldDescriptor} The descriptor for the field.
449
+ * @private
450
+ */
451
+ goog.proto2.Message.prototype.getFieldByTag_ = function(tag) {
452
+ goog.proto2.Util.assert(this.fields_[tag],
453
+ 'No field found for the given tag');
454
+
455
+ return this.fields_[tag];
456
+ };
457
+
458
+
459
+ /**
460
+ * Returns the whether or not the field indicated by the given tag
461
+ * has a value.
462
+ *
463
+ * GENERATED CODE USE ONLY. Basis of the has{Field} methods.
464
+ *
465
+ * @param {number} tag The tag.
466
+ *
467
+ * @return {boolean} Whether the message has a value for the field.
468
+ */
469
+ goog.proto2.Message.prototype.has$Value = function(tag) {
470
+ goog.proto2.Util.assert(this.fields_[tag],
471
+ 'No field found for the given tag');
472
+
473
+ return tag in this.values_ && goog.isDef(this.values_[tag]) &&
474
+ this.values_[tag] !== null;
475
+ };
476
+
477
+
478
+ /**
479
+ * If a lazy deserializer is instantiated, lazily deserializes the
480
+ * field if required.
481
+ *
482
+ * @param {goog.proto2.FieldDescriptor} field The field.
483
+ * @private
484
+ */
485
+ goog.proto2.Message.prototype.lazyDeserialize_ = function(field) {
486
+ // If we have a lazy deserializer, then ensure that the field is
487
+ // properly deserialized.
488
+ if (this.lazyDeserializer_) {
489
+ var tag = field.getTag();
490
+
491
+ if (!(tag in this.deserializedFields_)) {
492
+ this.values_[tag] = this.lazyDeserializer_.deserializeField(
493
+ this, field, this.values_[tag]);
494
+
495
+ this.deserializedFields_[tag] = true;
496
+ }
497
+ }
498
+ };
499
+
500
+
501
+ /**
502
+ * Gets the value at the field indicated by the given tag.
503
+ *
504
+ * GENERATED CODE USE ONLY. Basis of the get{Field} methods.
505
+ *
506
+ * @param {number} tag The field's tag index.
507
+ * @param {number=} opt_index If the field is a repeated field, the index
508
+ * at which to get the value.
509
+ *
510
+ * @return {*} The value found or null for none.
511
+ * @protected
512
+ */
513
+ goog.proto2.Message.prototype.get$Value = function(tag, opt_index) {
514
+ var field = this.getFieldByTag_(tag);
515
+
516
+ // Ensure that the field is deserialized.
517
+ this.lazyDeserialize_(field);
518
+
519
+ if (field.isRepeated()) {
520
+ var index = opt_index || 0;
521
+ goog.proto2.Util.assert(index >= 0 && index < this.count$Values(tag),
522
+ 'Given index is out of bounds');
523
+
524
+ return this.values_[tag][index];
525
+ } else {
526
+ goog.proto2.Util.assert(!goog.isArray(this.values_[tag]));
527
+ return tag in this.values_ ? this.values_[tag] : null;
528
+ }
529
+ };
530
+
531
+
532
+ /**
533
+ * Gets the value at the field indicated by the given tag or the default value
534
+ * if none.
535
+ *
536
+ * GENERATED CODE USE ONLY. Basis of the get{Field} methods.
537
+ *
538
+ * @param {number} tag The field's tag index.
539
+ * @param {number=} opt_index If the field is a repeated field, the index
540
+ * at which to get the value.
541
+ *
542
+ * @return {*} The value found or the default value if none set.
543
+ * @protected
544
+ */
545
+ goog.proto2.Message.prototype.get$ValueOrDefault = function(tag, opt_index) {
546
+
547
+ if (!this.has$Value(tag)) {
548
+ // Return the default value.
549
+ var field = this.getFieldByTag_(tag);
550
+ return field.getDefaultValue();
551
+ }
552
+
553
+ return this.get$Value(tag, opt_index);
554
+ };
555
+
556
+
557
+ /**
558
+ * Gets the values at the field indicated by the given tag.
559
+ *
560
+ * GENERATED CODE USE ONLY. Basis of the {field}Array methods.
561
+ *
562
+ * @param {number} tag The field's tag index.
563
+ *
564
+ * @return {!Array} The values found. If none, returns an empty array.
565
+ * @protected
566
+ */
567
+ goog.proto2.Message.prototype.array$Values = function(tag) {
568
+ goog.proto2.Util.assert(this.getFieldByTag_(tag).isRepeated(),
569
+ 'Cannot call fieldArray on a non-repeated field');
570
+
571
+ var field = this.getFieldByTag_(tag);
572
+
573
+ // Ensure that the field is deserialized.
574
+ this.lazyDeserialize_(field);
575
+
576
+ return this.values_[tag] || [];
577
+ };
578
+
579
+
580
+ /**
581
+ * Returns the number of values stored in the field by the given tag.
582
+ *
583
+ * GENERATED CODE USE ONLY. Basis of the {field}Count methods.
584
+ *
585
+ * @param {number} tag The tag.
586
+ *
587
+ * @return {number} The number of values.
588
+ * @protected
589
+ */
590
+ goog.proto2.Message.prototype.count$Values = function(tag) {
591
+ var field = this.getFieldByTag_(tag);
592
+
593
+ if (field.isRepeated()) {
594
+ if (this.has$Value(tag)) {
595
+ goog.proto2.Util.assert(goog.isArray(this.values_[tag]));
596
+ }
597
+
598
+ return this.has$Value(tag) ? this.values_[tag].length : 0;
599
+ } else {
600
+ return this.has$Value(tag) ? 1 : 0;
601
+ }
602
+ };
603
+
604
+
605
+ /**
606
+ * Sets the value of the *non-repeating* field indicated by the given tag.
607
+ *
608
+ * GENERATED CODE USE ONLY. Basis of the set{Field} methods.
609
+ *
610
+ * @param {number} tag The field's tag index.
611
+ * @param {*} value The field's value.
612
+ * @protected
613
+ */
614
+ goog.proto2.Message.prototype.set$Value = function(tag, value) {
615
+ if (goog.proto2.Util.conductChecks()) {
616
+ var field = this.getFieldByTag_(tag);
617
+
618
+ goog.proto2.Util.assert(!field.isRepeated(),
619
+ 'Cannot call set on a repeated field');
620
+
621
+ this.checkFieldType_(field, value);
622
+ }
623
+
624
+ this.values_[tag] = value;
625
+ if (this.deserializedFields_) {
626
+ this.deserializedFields_[tag] = true;
627
+ }
628
+ };
629
+
630
+
631
+ /**
632
+ * Adds the value to the *repeating* field indicated by the given tag.
633
+ *
634
+ * GENERATED CODE USE ONLY. Basis of the add{Field} methods.
635
+ *
636
+ * @param {number} tag The field's tag index.
637
+ * @param {*} value The value to add.
638
+ * @protected
639
+ */
640
+ goog.proto2.Message.prototype.add$Value = function(tag, value) {
641
+ if (goog.proto2.Util.conductChecks()) {
642
+ var field = this.getFieldByTag_(tag);
643
+
644
+ goog.proto2.Util.assert(field.isRepeated(),
645
+ 'Cannot call add on a non-repeated field');
646
+
647
+ this.checkFieldType_(field, value);
648
+ }
649
+
650
+ if (!this.values_[tag]) {
651
+ this.values_[tag] = [];
652
+ }
653
+
654
+ this.values_[tag].push(value);
655
+ };
656
+
657
+
658
+ /**
659
+ * Ensures that the value being assigned to the given field
660
+ * is valid.
661
+ *
662
+ * @param {!goog.proto2.FieldDescriptor} field The field being assigned.
663
+ * @param {*} value The value being assigned.
664
+ * @private
665
+ */
666
+ goog.proto2.Message.prototype.checkFieldType_ = function(field, value) {
667
+ goog.proto2.Util.assert(value !== null);
668
+
669
+ var nativeType = field.getNativeType();
670
+ if (nativeType === String) {
671
+ goog.proto2.Util.assert(typeof value === 'string',
672
+ 'Expected value of type string');
673
+ } else if (nativeType === Boolean) {
674
+ goog.proto2.Util.assert(typeof value === 'boolean',
675
+ 'Expected value of type boolean');
676
+ } else if (nativeType === Number) {
677
+ goog.proto2.Util.assert(typeof value === 'number',
678
+ 'Expected value of type number');
679
+ } else if (field.getFieldType() ==
680
+ goog.proto2.FieldDescriptor.FieldType.ENUM) {
681
+ goog.proto2.Util.assert(typeof value === 'number',
682
+ 'Expected an enum value, which is a number');
683
+ } else {
684
+ goog.proto2.Util.assert(value instanceof nativeType,
685
+ 'Expected a matching message type');
686
+ }
687
+ };
688
+
689
+
690
+ /**
691
+ * Clears the field specified by tag.
692
+ *
693
+ * GENERATED CODE USE ONLY. Basis of the clear{Field} methods.
694
+ *
695
+ * @param {number} tag The tag of the field to clear.
696
+ * @protected
697
+ */
698
+ goog.proto2.Message.prototype.clear$Field = function(tag) {
699
+ goog.proto2.Util.assert(this.getFieldByTag_(tag), 'Unknown field');
700
+ delete this.values_[tag];
701
+ };
702
+
703
+
704
+ /**
705
+ * Sets the metadata that represents the definition of this message.
706
+ *
707
+ * GENERATED CODE USE ONLY. Called when constructing message classes.
708
+ *
709
+ * @param {Function} messageType Constructor for the message type to
710
+ * which this metadata applies.
711
+ * @param {Object} metadataObj The object containing the metadata.
712
+ */
713
+ goog.proto2.Message.set$Metadata = function(messageType, metadataObj) {
714
+ var fields = [];
715
+ var descriptorInfo;
716
+
717
+ for (var key in metadataObj) {
718
+ if (!metadataObj.hasOwnProperty(key)) {
719
+ continue;
720
+ }
721
+
722
+ goog.proto2.Util.assert(goog.string.isNumeric(key), 'Keys must be numeric');
723
+
724
+ if (key == 0) {
725
+ descriptorInfo = metadataObj[0];
726
+ continue;
727
+ }
728
+
729
+ // Create the field descriptor.
730
+ fields.push(
731
+ new goog.proto2.FieldDescriptor(messageType, key, metadataObj[key]));
732
+ }
733
+
734
+ goog.proto2.Util.assert(descriptorInfo);
735
+
736
+ // Create the descriptor.
737
+ messageType.descriptor_ =
738
+ new goog.proto2.Descriptor(messageType, descriptorInfo, fields);
739
+
740
+ messageType.getDescriptor = function() {
741
+ return messageType.descriptor_;
742
+ };
743
+ };
744
+ ;
745
+ FI"
746
+ F"%dc32e8cbd1c3a4a04d28db2bd5d26767