avro-builder 0.14.1 → 0.15.0.rc0
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/CHANGELOG.md +3 -0
- data/README.md +22 -0
- data/avro-builder.gemspec +1 -0
- data/lib/avro/builder.rb +6 -1
- data/lib/avro/builder/dsl.rb +8 -1
- data/lib/avro/builder/rake/avro_generate_task.rb +11 -3
- data/lib/avro/builder/types/named_type.rb +1 -1
- data/lib/avro/builder/types/type.rb +5 -1
- data/lib/avro/builder/version.rb +1 -1
- metadata +18 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6bd5352172e109727099592f904b03ecfba50d48
|
4
|
+
data.tar.gz: a729d03c744b064c9a9677c88c9c93225c9db52a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5f918eb9cbfb7afc951945162092b869819ef3ef3880fca68d49534afc0d3eda73bf0916a75f889c68e98db2a26f551de62e4e08acb3c94198fb92230ef63642
|
7
|
+
data.tar.gz: 6f33b3efe33499c221769e744b5cccd3aa053012adef5f57b75ca12a89590044755a01f02072b1517a96f58449073aea07a134508b8a1bc5660a8968096d0324
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -316,6 +316,25 @@ record :with_date_array
|
|
316
316
|
end
|
317
317
|
```
|
318
318
|
|
319
|
+
### Abstract Types
|
320
|
+
|
321
|
+
Types can be declared as abstract in the DSL. Declaring a type as abstract
|
322
|
+
prevents the rake task from generating an Avro JSON schema for the type.
|
323
|
+
|
324
|
+
A type can be declared as abstract using either an option or a method in the
|
325
|
+
DSL when defining the type:
|
326
|
+
|
327
|
+
```ruby
|
328
|
+
record :unique_id, abstract: true
|
329
|
+
required :uuid, :fixed, size: 38
|
330
|
+
end
|
331
|
+
|
332
|
+
enum :status do
|
333
|
+
symbols %w(valid invalid)
|
334
|
+
abstract true
|
335
|
+
end
|
336
|
+
```
|
337
|
+
|
319
338
|
### Type Macros
|
320
339
|
|
321
340
|
`avro-builder` allows type macros to be defined that expand to types that
|
@@ -339,6 +358,9 @@ type_macro :timestamp, long(logical_type: 'timestamp-millis'),
|
|
339
358
|
namespace: 'com.my_company'
|
340
359
|
```
|
341
360
|
|
361
|
+
Type macros are always marked as abstract and do not generate an Avro JSON
|
362
|
+
schema file when using the rake task.
|
363
|
+
|
342
364
|
### Auto-loading and Imports
|
343
365
|
|
344
366
|
Specify paths to search for definitions:
|
data/avro-builder.gemspec
CHANGED
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency 'bundler', '~> 1.11'
|
26
26
|
spec.add_development_dependency 'rake', '~> 10.0'
|
27
27
|
spec.add_development_dependency 'rspec', '~> 3.0'
|
28
|
+
spec.add_development_dependency 'rspec-its'
|
28
29
|
spec.add_development_dependency 'json_spec'
|
29
30
|
spec.add_development_dependency 'simplecov'
|
30
31
|
spec.add_development_dependency 'salsify_rubocop', '~> 0.47.0'
|
data/lib/avro/builder.rb
CHANGED
@@ -5,12 +5,17 @@ require 'avro/builder/schema_store'
|
|
5
5
|
module Avro
|
6
6
|
module Builder
|
7
7
|
|
8
|
+
# Accepts a string or block to eval and returns the Avro::Builder::DSL object
|
9
|
+
def self.build_dsl(str = nil, filename: nil, &block)
|
10
|
+
Avro::Builder::DSL.new(str, filename: filename, &block)
|
11
|
+
end
|
12
|
+
|
8
13
|
# Accepts a string or block to eval to define a JSON schema
|
9
14
|
def self.build(str = nil, filename: nil, &block)
|
10
15
|
Avro::Builder::DSL.new(str, filename: filename, &block).to_json
|
11
16
|
end
|
12
17
|
|
13
|
-
# Accepts a string or block to eval and returns an Avro::Schema
|
18
|
+
# Accepts a string or block to eval and returns an Avro::Schema object
|
14
19
|
def self.build_schema(str = nil, filename: nil, &block)
|
15
20
|
Avro::Builder::DSL.new(str, filename: filename, &block).as_schema
|
16
21
|
end
|
data/lib/avro/builder/dsl.rb
CHANGED
@@ -38,6 +38,10 @@ module Avro
|
|
38
38
|
end
|
39
39
|
end
|
40
40
|
|
41
|
+
def abstract?
|
42
|
+
@last_object && @last_object.abstract?
|
43
|
+
end
|
44
|
+
|
41
45
|
# Define an Avro schema record
|
42
46
|
def record(name = nil, options = {}, &block)
|
43
47
|
create_named_type(name, :record, options, &block)
|
@@ -92,7 +96,10 @@ module Avro
|
|
92
96
|
def type_macro(name, type_object, options = {})
|
93
97
|
raise "#{type_object.inspect} must be a type object" unless type_object.is_a?(Types::Type)
|
94
98
|
raise "namespace cannot be included in name: #{name}" if name.to_s.index('.')
|
95
|
-
|
99
|
+
type_clone = type_object.clone
|
100
|
+
type_clone.send(:abstract=, true)
|
101
|
+
cache.add_type_by_name(type_clone, name, options[:namespace] || namespace)
|
102
|
+
@last_object = type_clone
|
96
103
|
end
|
97
104
|
|
98
105
|
private
|
@@ -35,9 +35,17 @@ module Avro
|
|
35
35
|
Dir["#{root}/**/*.rb"].each do |dsl_file|
|
36
36
|
puts "Generating Avro schema from #{dsl_file}"
|
37
37
|
output_file = dsl_file.sub('/dsl/', '/schema/').sub(/\.rb$/, ".#{filetype}")
|
38
|
-
|
39
|
-
|
40
|
-
|
38
|
+
dsl = Avro::Builder.build_dsl(filename: dsl_file)
|
39
|
+
if dsl.abstract?
|
40
|
+
if File.exist?(output_file)
|
41
|
+
puts "... Removing #{output_file} for abstract type"
|
42
|
+
FileUtils.rm(output_file)
|
43
|
+
end
|
44
|
+
else
|
45
|
+
schema = dsl.to_json
|
46
|
+
FileUtils.mkdir_p(File.dirname(output_file))
|
47
|
+
File.write(output_file, schema.end_with?("\n") ? schema : schema << "\n")
|
48
|
+
end
|
41
49
|
end
|
42
50
|
end
|
43
51
|
end
|
@@ -18,7 +18,7 @@ module Avro
|
|
18
18
|
|
19
19
|
dsl_attribute_alias :type_aliases, :aliases
|
20
20
|
|
21
|
-
# This module
|
21
|
+
# This module must be included after options are defined
|
22
22
|
include Avro::Builder::Types::NamedErrorHandling
|
23
23
|
|
24
24
|
def name(value = nil)
|
@@ -8,7 +8,7 @@ module Avro
|
|
8
8
|
include Avro::Builder::DslOptions
|
9
9
|
include Avro::Builder::DslAttributes
|
10
10
|
|
11
|
-
|
11
|
+
dsl_attributes :logical_type, :abstract
|
12
12
|
|
13
13
|
attr_reader :avro_type_name
|
14
14
|
|
@@ -18,6 +18,10 @@ module Avro
|
|
18
18
|
@field = field
|
19
19
|
end
|
20
20
|
|
21
|
+
def abstract?
|
22
|
+
!!abstract
|
23
|
+
end
|
24
|
+
|
21
25
|
def serialize(_reference_state)
|
22
26
|
if logical_type
|
23
27
|
{ type: avro_type_name, logicalType: logical_type }
|
data/lib/avro/builder/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: avro-builder
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.15.0.rc0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Salsify Engineering
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-03-
|
11
|
+
date: 2017-03-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: avro
|
@@ -80,6 +80,20 @@ dependencies:
|
|
80
80
|
- - "~>"
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '3.0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec-its
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
98
|
name: json_spec
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
@@ -209,9 +223,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
209
223
|
version: '0'
|
210
224
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
211
225
|
requirements:
|
212
|
-
- - "
|
226
|
+
- - ">"
|
213
227
|
- !ruby/object:Gem::Version
|
214
|
-
version:
|
228
|
+
version: 1.3.1
|
215
229
|
requirements: []
|
216
230
|
rubyforge_project:
|
217
231
|
rubygems_version: 2.6.10
|