avro-gen-ruby 0.1.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.
Files changed (97) hide show
  1. checksums.yaml +7 -0
  2. data/.github/workflows/ci.yml +34 -0
  3. data/.github/workflows/release.yml +31 -0
  4. data/.gitignore +6 -0
  5. data/.rspec +1 -0
  6. data/.rubocop.yml +100 -0
  7. data/Gemfile +5 -0
  8. data/LICENSE +21 -0
  9. data/README.md +61 -0
  10. data/Rakefile +11 -0
  11. data/avro-gen-ruby.gemspec +32 -0
  12. data/lib/avro_gen/avro_parser.rb +64 -0
  13. data/lib/avro_gen/configuration.rb +60 -0
  14. data/lib/avro_gen/errors.rb +6 -0
  15. data/lib/avro_gen/generator/templates/schema_class.rb.tt +8 -0
  16. data/lib/avro_gen/generator/templates/schema_enum.rb.tt +13 -0
  17. data/lib/avro_gen/generator/templates/schema_record.rb.tt +102 -0
  18. data/lib/avro_gen/generator.rb +375 -0
  19. data/lib/avro_gen/railtie.rb +12 -0
  20. data/lib/avro_gen/schema_class/base.rb +62 -0
  21. data/lib/avro_gen/schema_class/enum.rb +48 -0
  22. data/lib/avro_gen/schema_class/record.rb +108 -0
  23. data/lib/avro_gen/schema_class.rb +62 -0
  24. data/lib/avro_gen/schema_field.rb +26 -0
  25. data/lib/avro_gen/schema_validator.rb +80 -0
  26. data/lib/avro_gen/upgrader.rb +43 -0
  27. data/lib/avro_gen/version.rb +5 -0
  28. data/lib/avro_gen.rb +18 -0
  29. data/lib/tasks/avro.rake +18 -0
  30. data/regenerate_test_schema_classes.rb +32 -0
  31. data/spec/generator_spec.rb +92 -0
  32. data/spec/my_schema_spec.rb +18 -0
  33. data/spec/my_schema_with_circular_reference_spec.rb +97 -0
  34. data/spec/my_schema_with_complex_types_spec.rb +235 -0
  35. data/spec/schema_validator_spec.rb +42 -0
  36. data/spec/schemas/com/my-namespace/Generated.avsc +77 -0
  37. data/spec/schemas/com/my-namespace/MyNestedSchema.avsc +62 -0
  38. data/spec/schemas/com/my-namespace/MySchema.avsc +18 -0
  39. data/spec/schemas/com/my-namespace/MySchemaCompound_key.avsc +18 -0
  40. data/spec/schemas/com/my-namespace/MySchemaId_key.avsc +12 -0
  41. data/spec/schemas/com/my-namespace/MySchemaWithBooleans.avsc +18 -0
  42. data/spec/schemas/com/my-namespace/MySchemaWithCircularReference.avsc +39 -0
  43. data/spec/schemas/com/my-namespace/MySchemaWithComplexTypes.avsc +120 -0
  44. data/spec/schemas/com/my-namespace/MySchemaWithDateTimes.avsc +33 -0
  45. data/spec/schemas/com/my-namespace/MySchemaWithId.avsc +28 -0
  46. data/spec/schemas/com/my-namespace/MySchemaWithTitle.avsc +22 -0
  47. data/spec/schemas/com/my-namespace/MySchemaWithUnionType.avsc +91 -0
  48. data/spec/schemas/com/my-namespace/MySchemaWithUniqueId.avsc +32 -0
  49. data/spec/schemas/com/my-namespace/MySchema_key.avsc +13 -0
  50. data/spec/schemas/com/my-namespace/Wibble.avsc +43 -0
  51. data/spec/schemas/com/my-namespace/Widget.avsc +27 -0
  52. data/spec/schemas/com/my-namespace/WidgetTheSecond.avsc +27 -0
  53. data/spec/schemas/com/my-namespace/WidgetTheThird.avsc +27 -0
  54. data/spec/schemas/com/my-namespace/my-suborg/MyLongNamespaceSchema.avsc +18 -0
  55. data/spec/schemas/com/my-namespace/request/CreateTopic.avsc +11 -0
  56. data/spec/schemas/com/my-namespace/request/Index.avsc +11 -0
  57. data/spec/schemas/com/my-namespace/request/UpdateRequest.avsc +11 -0
  58. data/spec/schemas/com/my-namespace/response/CreateTopic.avsc +11 -0
  59. data/spec/schemas/com/my-namespace/response/Index.avsc +11 -0
  60. data/spec/schemas/com/my-namespace/response/UpdateResponse.avsc +11 -0
  61. data/spec/schemas/my_namespace/generated.rb +164 -0
  62. data/spec/schemas/my_namespace/my_long_namespace_schema.rb +49 -0
  63. data/spec/schemas/my_namespace/my_nested_schema.rb +126 -0
  64. data/spec/schemas/my_namespace/my_schema.rb +62 -0
  65. data/spec/schemas/my_namespace/my_schema_compound_key.rb +42 -0
  66. data/spec/schemas/my_namespace/my_schema_id_key.rb +37 -0
  67. data/spec/schemas/my_namespace/my_schema_key.rb +37 -0
  68. data/spec/schemas/my_namespace/my_schema_with_boolean.rb +42 -0
  69. data/spec/schemas/my_namespace/my_schema_with_circular_reference.rb +84 -0
  70. data/spec/schemas/my_namespace/my_schema_with_complex_type.rb +241 -0
  71. data/spec/schemas/my_namespace/my_schema_with_date_time.rb +57 -0
  72. data/spec/schemas/my_namespace/my_schema_with_id.rb +52 -0
  73. data/spec/schemas/my_namespace/my_schema_with_title.rb +47 -0
  74. data/spec/schemas/my_namespace/my_schema_with_union_type.rb +205 -0
  75. data/spec/schemas/my_namespace/my_schema_with_unique_id.rb +57 -0
  76. data/spec/schemas/my_namespace/request/create_topic.rb +37 -0
  77. data/spec/schemas/my_namespace/request/index.rb +37 -0
  78. data/spec/schemas/my_namespace/request/update_request.rb +37 -0
  79. data/spec/schemas/my_namespace/response/create_topic.rb +37 -0
  80. data/spec/schemas/my_namespace/response/index.rb +37 -0
  81. data/spec/schemas/my_namespace/response/update_response.rb +37 -0
  82. data/spec/schemas/my_namespace/wibble.rb +77 -0
  83. data/spec/schemas/my_namespace/widget.rb +57 -0
  84. data/spec/schemas/my_namespace/widget_the_second.rb +57 -0
  85. data/spec/schemas/my_namespace/widget_the_third.rb +57 -0
  86. data/spec/snapshots/consumers-no-nest.snap +1740 -0
  87. data/spec/snapshots/consumers.snap +1720 -0
  88. data/spec/snapshots/my_nested_schema.snap +121 -0
  89. data/spec/snapshots/my_schema_with_boolean.snap +44 -0
  90. data/spec/snapshots/my_schema_with_circular_reference.snap +81 -0
  91. data/spec/snapshots/my_schema_with_complex_type.snap +236 -0
  92. data/spec/snapshots/my_schema_with_date_time.snap +59 -0
  93. data/spec/snapshots/my_schema_with_union_type.snap +207 -0
  94. data/spec/snapshots/namespace_folders.snap +1800 -0
  95. data/spec/snapshots/namespace_map.snap +1800 -0
  96. data/spec/spec_helper.rb +23 -0
  97. metadata +265 -0
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is autogenerated by AvroGen, Do NOT modify
4
+ module Schemas; module MyNamespace
5
+ ### Primary Schema Class ###
6
+ # Autogenerated Schema for Record at com.my-namespace.MySchemaWithBooleans
7
+ class MySchemaWithBoolean < AvroGen::SchemaClass::Record
8
+
9
+ ### Attribute Accessors ###
10
+ # @return [String]
11
+ attr_accessor :test_id
12
+ # @return [Boolean]
13
+ attr_accessor :some_bool
14
+
15
+ # @override
16
+ def initialize(_from_message: false, test_id: nil,
17
+ some_bool: nil)
18
+ @_from_message = _from_message
19
+ super
20
+ self.test_id = test_id
21
+ self.some_bool = some_bool
22
+ end
23
+
24
+ # @override
25
+ def schema
26
+ 'MySchemaWithBooleans'
27
+ end
28
+
29
+ # @override
30
+ def namespace
31
+ 'com.my-namespace'
32
+ end
33
+
34
+ # @override
35
+ def as_json(_opts={})
36
+ {
37
+ 'test_id' => @test_id,
38
+ 'some_bool' => @some_bool
39
+ }
40
+ end
41
+ end
42
+ end; end
@@ -0,0 +1,84 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is autogenerated by AvroGen, Do NOT modify
4
+ module Schemas; module MyNamespace
5
+ ### Primary Schema Class ###
6
+ # Autogenerated Schema for Record at com.my-namespace.MySchemaWithCircularReference
7
+ class MySchemaWithCircularReference < AvroGen::SchemaClass::Record
8
+
9
+ ### Secondary Schema Classes ###
10
+ # Autogenerated Schema for Record at com.my-namespace.Property
11
+ class Property < AvroGen::SchemaClass::Record
12
+
13
+ ### Attribute Accessors ###
14
+ # @return [Boolean, Integer, Integer, Float, Float, String, Array<Property>, Hash<String, Property>]
15
+ attr_accessor :property
16
+
17
+ # @override
18
+ def initialize(_from_message: false, property: nil)
19
+ @_from_message = _from_message
20
+ super
21
+ self.property = property
22
+ end
23
+
24
+ # @override
25
+ def schema
26
+ 'Property'
27
+ end
28
+
29
+ # @override
30
+ def namespace
31
+ 'com.my-namespace'
32
+ end
33
+
34
+ # @override
35
+ def as_json(_opts={})
36
+ {
37
+ 'property' => @property
38
+ }
39
+ end
40
+ end
41
+
42
+
43
+ ### Attribute Readers ###
44
+ # @return [Hash<String, Property>]
45
+ attr_reader :properties
46
+
47
+ ### Attribute Writers ###
48
+ # @return [Hash<String, Property>]
49
+ def properties=(values)
50
+ @properties = values&.transform_values do |value|
51
+ Property.initialize_from_value(value, from_message: self._from_message)
52
+ end
53
+ end
54
+
55
+ # @override
56
+ def initialize(_from_message: false, properties: {})
57
+ @_from_message = _from_message
58
+ super
59
+ self.properties = properties
60
+ end
61
+
62
+ # @override
63
+ def schema
64
+ 'MySchemaWithCircularReference'
65
+ end
66
+
67
+ # @override
68
+ def namespace
69
+ 'com.my-namespace'
70
+ end
71
+
72
+ def self.tombstone(key)
73
+ record = self.allocate
74
+ record
75
+ end
76
+
77
+ # @override
78
+ def as_json(_opts={})
79
+ {
80
+ 'properties' => @properties.transform_values { |v| v&.as_json }
81
+ }
82
+ end
83
+ end
84
+ end; end
@@ -0,0 +1,241 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is autogenerated by AvroGen, Do NOT modify
4
+ module Schemas; module MyNamespace
5
+ ### Primary Schema Class ###
6
+ # Autogenerated Schema for Record at com.my-namespace.MySchemaWithComplexTypes
7
+ class MySchemaWithComplexType < AvroGen::SchemaClass::Record
8
+
9
+ ### Secondary Schema Classes ###
10
+ # Autogenerated Schema for Record at com.my-namespace.ARecord
11
+ class ARecord < AvroGen::SchemaClass::Record
12
+
13
+ ### Attribute Accessors ###
14
+ # @return [String]
15
+ attr_accessor :a_record_field
16
+
17
+ # @override
18
+ def initialize(_from_message: false, a_record_field: nil)
19
+ @_from_message = _from_message
20
+ super
21
+ self.a_record_field = a_record_field
22
+ end
23
+
24
+ # @override
25
+ def schema
26
+ 'ARecord'
27
+ end
28
+
29
+ # @override
30
+ def namespace
31
+ 'com.my-namespace'
32
+ end
33
+
34
+ # @override
35
+ def as_json(_opts={})
36
+ {
37
+ 'a_record_field' => @a_record_field
38
+ }
39
+ end
40
+ end
41
+
42
+ # Autogenerated Schema for Enum at com.my-namespace.AnEnum
43
+ class AnEnum < AvroGen::SchemaClass::Enum
44
+ # @override
45
+ def symbols
46
+ %w(sym1 sym2)
47
+ end
48
+
49
+
50
+ def sym1?
51
+ @value == 'sym1'
52
+ end
53
+
54
+ def sym2?
55
+ @value == 'sym2'
56
+ end
57
+
58
+ end
59
+
60
+ # Autogenerated Schema for Enum at com.my-namespace.AnotherEnum
61
+ class AnotherEnum < AvroGen::SchemaClass::Enum
62
+ # @override
63
+ def symbols
64
+ %w(sym3 sym4)
65
+ end
66
+
67
+
68
+ def sym3?
69
+ @value == 'sym3'
70
+ end
71
+
72
+ def sym4?
73
+ @value == 'sym4'
74
+ end
75
+
76
+ end
77
+
78
+ # Autogenerated Schema for Enum at com.my-namespace.YetAnotherEnum
79
+ class YetAnotherEnum < AvroGen::SchemaClass::Enum
80
+ # @override
81
+ def symbols
82
+ %w(sym5 sym6)
83
+ end
84
+
85
+
86
+ def sym5?
87
+ @value == 'sym5'
88
+ end
89
+
90
+ def sym6?
91
+ @value == 'sym6'
92
+ end
93
+
94
+ end
95
+
96
+
97
+ ### Attribute Readers ###
98
+ # @return [ARecord]
99
+ attr_reader :some_record
100
+ # @return [nil, ARecord]
101
+ attr_reader :some_optional_record
102
+ # @return [Array<ARecord>]
103
+ attr_reader :some_record_array
104
+ # @return [Hash<String, ARecord>]
105
+ attr_reader :some_record_map
106
+ # @return [Array<AnEnum>]
107
+ attr_reader :some_enum_array
108
+ # @return [nil, AnotherEnum]
109
+ attr_reader :some_optional_enum
110
+ # @return [YetAnotherEnum]
111
+ attr_reader :some_enum_with_default
112
+
113
+ ### Attribute Accessors ###
114
+ # @return [String]
115
+ attr_accessor :test_id
116
+ # @return [String, nil]
117
+ attr_accessor :union_string
118
+ # @return [Float]
119
+ attr_accessor :test_float
120
+ # @return [Array<String>]
121
+ attr_accessor :test_string_array
122
+ # @return [Array<Integer>]
123
+ attr_accessor :test_int_array
124
+ # @return [Integer, nil]
125
+ attr_accessor :test_optional_int
126
+ # @return [Hash<String, Integer>]
127
+ attr_accessor :some_integer_map
128
+
129
+ ### Attribute Writers ###
130
+ # @return [ARecord]
131
+ def some_record=(value)
132
+ @some_record = ARecord.initialize_from_value(value, from_message: self._from_message)
133
+ end
134
+
135
+ # @return [nil, ARecord]
136
+ def some_optional_record=(value)
137
+ @some_optional_record = ARecord.initialize_from_value(value, from_message: self._from_message)
138
+ end
139
+
140
+ # @return [Array<ARecord>]
141
+ def some_record_array=(values)
142
+ @some_record_array = values&.map do |value|
143
+ ARecord.initialize_from_value(value, from_message: self._from_message)
144
+ end
145
+ end
146
+
147
+ # @return [Hash<String, ARecord>]
148
+ def some_record_map=(values)
149
+ @some_record_map = values&.transform_values do |value|
150
+ ARecord.initialize_from_value(value, from_message: self._from_message)
151
+ end
152
+ end
153
+
154
+ # @return [Array<AnEnum>]
155
+ def some_enum_array=(values)
156
+ @some_enum_array = values&.map do |value|
157
+ AnEnum.initialize_from_value(value, from_message: self._from_message)
158
+ end
159
+ end
160
+
161
+ # @return [nil, AnotherEnum]
162
+ def some_optional_enum=(value)
163
+ @some_optional_enum = AnotherEnum.initialize_from_value(value, from_message: self._from_message)
164
+ end
165
+
166
+ # @return [YetAnotherEnum]
167
+ def some_enum_with_default=(value)
168
+ @some_enum_with_default = YetAnotherEnum.initialize_from_value(value, from_message: self._from_message)
169
+ end
170
+
171
+ # @override
172
+ def initialize(_from_message: false, test_id: nil,
173
+ union_string: "",
174
+ test_float: nil,
175
+ test_string_array: ["test"],
176
+ test_int_array: [123],
177
+ test_optional_int: 123,
178
+ some_integer_map: {"abc"=>123},
179
+ some_record: {"a_record_field"=>"Test String"},
180
+ some_optional_record: nil,
181
+ some_record_array: nil,
182
+ some_record_map: nil,
183
+ some_enum_array: nil,
184
+ some_optional_enum: nil,
185
+ some_enum_with_default: "sym6")
186
+ @_from_message = _from_message
187
+ super
188
+ self.test_id = test_id
189
+ self.union_string = union_string
190
+ self.test_float = test_float
191
+ self.test_string_array = test_string_array
192
+ self.test_int_array = test_int_array
193
+ self.test_optional_int = test_optional_int
194
+ self.some_integer_map = some_integer_map
195
+ self.some_record = some_record
196
+ self.some_optional_record = some_optional_record
197
+ self.some_record_array = some_record_array
198
+ self.some_record_map = some_record_map
199
+ self.some_enum_array = some_enum_array
200
+ self.some_optional_enum = some_optional_enum
201
+ self.some_enum_with_default = some_enum_with_default
202
+ end
203
+
204
+ # @override
205
+ def schema
206
+ 'MySchemaWithComplexTypes'
207
+ end
208
+
209
+ # @override
210
+ def namespace
211
+ 'com.my-namespace'
212
+ end
213
+
214
+ def self.tombstone(key)
215
+ record = self.allocate
216
+ record.tombstone_key = key
217
+ record.test_id = key
218
+ record
219
+ end
220
+
221
+ # @override
222
+ def as_json(_opts={})
223
+ {
224
+ 'test_id' => @test_id,
225
+ 'union_string' => @union_string,
226
+ 'test_float' => @test_float,
227
+ 'test_string_array' => @test_string_array,
228
+ 'test_int_array' => @test_int_array,
229
+ 'test_optional_int' => @test_optional_int,
230
+ 'some_integer_map' => @some_integer_map,
231
+ 'some_record' => @some_record&.as_json,
232
+ 'some_optional_record' => @some_optional_record&.as_json,
233
+ 'some_record_array' => @some_record_array.map { |v| v&.as_json },
234
+ 'some_record_map' => @some_record_map.transform_values { |v| v&.as_json },
235
+ 'some_enum_array' => @some_enum_array.map { |v| v&.as_json },
236
+ 'some_optional_enum' => @some_optional_enum&.as_json,
237
+ 'some_enum_with_default' => @some_enum_with_default&.as_json
238
+ }
239
+ end
240
+ end
241
+ end; end
@@ -0,0 +1,57 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is autogenerated by AvroGen, Do NOT modify
4
+ module Schemas; module MyNamespace
5
+ ### Primary Schema Class ###
6
+ # Autogenerated Schema for Record at com.my-namespace.MySchemaWithDateTimes
7
+ class MySchemaWithDateTime < AvroGen::SchemaClass::Record
8
+
9
+ ### Attribute Accessors ###
10
+ # @return [String]
11
+ attr_accessor :test_id
12
+ # @return [Integer, nil]
13
+ attr_accessor :updated_at
14
+ # @return [nil, Integer]
15
+ attr_accessor :some_int
16
+ # @return [nil, Integer]
17
+ attr_accessor :some_datetime_int
18
+ # @return [String]
19
+ attr_accessor :timestamp
20
+
21
+ # @override
22
+ def initialize(_from_message: false, test_id: nil,
23
+ updated_at: nil,
24
+ some_int: nil,
25
+ some_datetime_int: nil,
26
+ timestamp: nil)
27
+ @_from_message = _from_message
28
+ super
29
+ self.test_id = test_id
30
+ self.updated_at = updated_at
31
+ self.some_int = some_int
32
+ self.some_datetime_int = some_datetime_int
33
+ self.timestamp = timestamp
34
+ end
35
+
36
+ # @override
37
+ def schema
38
+ 'MySchemaWithDateTimes'
39
+ end
40
+
41
+ # @override
42
+ def namespace
43
+ 'com.my-namespace'
44
+ end
45
+
46
+ # @override
47
+ def as_json(_opts={})
48
+ {
49
+ 'test_id' => @test_id,
50
+ 'updated_at' => @updated_at,
51
+ 'some_int' => @some_int,
52
+ 'some_datetime_int' => @some_datetime_int,
53
+ 'timestamp' => @timestamp
54
+ }
55
+ end
56
+ end
57
+ end; end
@@ -0,0 +1,52 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is autogenerated by AvroGen, Do NOT modify
4
+ module Schemas; module MyNamespace
5
+ ### Primary Schema Class ###
6
+ # Autogenerated Schema for Record at com.my-namespace.MySchemaWithId
7
+ class MySchemaWithId < AvroGen::SchemaClass::Record
8
+
9
+ ### Attribute Accessors ###
10
+ # @return [String]
11
+ attr_accessor :test_id
12
+ # @return [Integer]
13
+ attr_accessor :some_int
14
+ # @return [String]
15
+ attr_accessor :message_id
16
+ # @return [String]
17
+ attr_accessor :timestamp
18
+
19
+ # @override
20
+ def initialize(_from_message: false, test_id: nil,
21
+ some_int: nil,
22
+ message_id: nil,
23
+ timestamp: nil)
24
+ @_from_message = _from_message
25
+ super
26
+ self.test_id = test_id
27
+ self.some_int = some_int
28
+ self.message_id = message_id
29
+ self.timestamp = timestamp
30
+ end
31
+
32
+ # @override
33
+ def schema
34
+ 'MySchemaWithId'
35
+ end
36
+
37
+ # @override
38
+ def namespace
39
+ 'com.my-namespace'
40
+ end
41
+
42
+ # @override
43
+ def as_json(_opts={})
44
+ {
45
+ 'test_id' => @test_id,
46
+ 'some_int' => @some_int,
47
+ 'message_id' => @message_id,
48
+ 'timestamp' => @timestamp
49
+ }
50
+ end
51
+ end
52
+ end; end
@@ -0,0 +1,47 @@
1
+ # frozen_string_literal: true
2
+
3
+ # This file is autogenerated by AvroGen, Do NOT modify
4
+ module Schemas; module MyNamespace
5
+ ### Primary Schema Class ###
6
+ # Autogenerated Schema for Record at com.my-namespace.MySchemaWithTitle
7
+ class MySchemaWithTitle < AvroGen::SchemaClass::Record
8
+
9
+ ### Attribute Accessors ###
10
+ # @return [String]
11
+ attr_accessor :test_id
12
+ # @return [Integer]
13
+ attr_accessor :some_int
14
+ # @return [String]
15
+ attr_accessor :title
16
+
17
+ # @override
18
+ def initialize(_from_message: false, test_id: nil,
19
+ some_int: nil,
20
+ title: nil)
21
+ @_from_message = _from_message
22
+ super
23
+ self.test_id = test_id
24
+ self.some_int = some_int
25
+ self.title = title
26
+ end
27
+
28
+ # @override
29
+ def schema
30
+ 'MySchemaWithTitle'
31
+ end
32
+
33
+ # @override
34
+ def namespace
35
+ 'com.my-namespace'
36
+ end
37
+
38
+ # @override
39
+ def as_json(_opts={})
40
+ {
41
+ 'test_id' => @test_id,
42
+ 'some_int' => @some_int,
43
+ 'title' => @title
44
+ }
45
+ end
46
+ end
47
+ end; end