avro-builder 1.0.1 → 1.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 2223e0a5e244cc9dc9e57be463e120b747fbaa9f3c9dc22bf8f7a7da43c2d4b9
4
- data.tar.gz: 9e0129b8c9f1f0fd142beabe1dfda1f2fadc3de3e0105f4770995f4f15e323b7
3
+ metadata.gz: 9c3bfd2cd887dec4479df3b57f6749de1699c375a464fd8bcc0a53d70593db0b
4
+ data.tar.gz: cf9775f4d8cf8548b50bf860ceb8fbf896228cf7c5246f6668d8ea8f4a2c1ea8
5
5
  SHA512:
6
- metadata.gz: 591e9422ed7a64adaf2969a9fd069f805398d8edefd64545900ef9e5bfb6cab4dcc1c41d1655886d83026bedc0bd56c914a31f495b732788d9f043d7f397fba0
7
- data.tar.gz: 0d1da2ec6ae6a024a59035150f9423663a1550de37701ff204b5a8812ac221332d4ffa90d5ddb48a9ace7d16166d2e4bb9835e8d9941bda0934c4441ec82f835
6
+ metadata.gz: 1d8ef969008d124f6f7445d53397ec5e7c2fa8de4a8e9bbb9f6a9496640be6279439042abc01c210f2f4367e3dd35202b6aaa61453727ae4ad7a99d337e85720
7
+ data.tar.gz: 3d253d37019c40e9d4f9737748b312c58986e34cdc04f6e8a1fedd79a5ab091d418df1e85e2308192b2bd329ad2b0daac6e157372053a944489eea9f12fd2777
data/.circleci/config.yml CHANGED
@@ -2,14 +2,14 @@ version: 2.1
2
2
  jobs:
3
3
  lint:
4
4
  docker:
5
- - image: salsify/ruby_ci:2.6.6
5
+ - image: salsify/ruby_ci:2.6.8
6
6
  working_directory: ~/avro-builder
7
7
  steps:
8
8
  - checkout
9
9
  - restore_cache:
10
10
  keys:
11
- - v2-gems-ruby-2.6.6-{{ checksum "avro-builder.gemspec" }}-{{ checksum "Gemfile" }}
12
- - v2-gems-ruby-2.6.6-
11
+ - v2-gems-ruby-2.6.8-{{ checksum "avro-builder.gemspec" }}-{{ checksum "Gemfile" }}
12
+ - v2-gems-ruby-2.6.8-
13
13
  - run:
14
14
  name: Install Gems
15
15
  command: |
@@ -18,7 +18,7 @@ jobs:
18
18
  bundle clean
19
19
  fi
20
20
  - save_cache:
21
- key: v2-gems-ruby-2.6.6-{{ checksum "avro-builder.gemspec" }}-{{ checksum "Gemfile" }}
21
+ key: v2-gems-ruby-2.6.8-{{ checksum "avro-builder.gemspec" }}-{{ checksum "Gemfile" }}
22
22
  paths:
23
23
  - "vendor/bundle"
24
24
  - "gemfiles/vendor/bundle"
@@ -71,7 +71,8 @@ workflows:
71
71
  gemfile:
72
72
  - "gemfiles/avro_1.9.gemfile"
73
73
  - "gemfiles/avro_1.10.gemfile"
74
+ - "gemfiles/avro_1.11.gemfile"
74
75
  ruby-version:
75
- - "2.6.6"
76
- - "2.7.2"
77
- - "3.0.0"
76
+ - "2.6.8"
77
+ - "2.7.4"
78
+ - "3.0.2"
@@ -0,0 +1 @@
1
+ * @jturkel @kphelps @tjwp
data/Appraisals CHANGED
@@ -5,5 +5,9 @@ appraise 'avro-1.9' do
5
5
  end
6
6
 
7
7
  appraise 'avro-1.10' do
8
- gem 'avro', '1.10.1'
8
+ gem 'avro', '1.10.2'
9
+ end
10
+
11
+ appraise 'avro-1.11' do
12
+ gem 'avro', '~> 1.11.0'
9
13
  end
data/CHANGELOG.md CHANGED
@@ -1,5 +1,9 @@
1
1
  # avro-builder changelog
2
2
 
3
+ ## v1.1.0
4
+ - Add support for Avro 1.11
5
+ - Add support for decimal logical types.
6
+
3
7
  ## v1.0.1
4
8
  - Bug fix: Fix pretty formatting of schemas for Rails applications that don't
5
9
  use oj or yajl by removing the dependency on multi_json.
data/README.md CHANGED
@@ -279,9 +279,10 @@ end
279
279
 
280
280
  ### Logical Types
281
281
 
282
- The DSL supports setting a logical type on any type except a union. The logical
283
- types defined in the Avro [spec](https://avro.apache.org/docs/1.8.1/spec.html#Logical+Types)
284
- are more limited.
282
+ The DSL supports setting a logical type on any type except a union. The Avro
283
+ [spec](https://avro.apache.org/docs/current/spec.html#Logical+Types) lists the logical types
284
+ that are currently defined. Note: `avro-builder` is more permissive and any logical type can
285
+ be specified on a type.
285
286
 
286
287
  A logical type can be specified for a field using the `logical_type` attribute:
287
288
 
@@ -308,6 +309,13 @@ record :with_date_array
308
309
  end
309
310
  ```
310
311
 
312
+ #### Decimal Logical Types
313
+
314
+ The decimal logical type, for bytes and fixed types, is currently the only logical type that requires additional
315
+ attributes. For decimals, precision must be specified and scale may optionally be specified. `avro-builder`
316
+ supports both of these attributes for bytes and fixed decimals. See the Avro
317
+ [spec](https://avro.apache.org/docs/current/spec.html#Decimal) for more details.
318
+
311
319
  ### Abstract Types
312
320
 
313
321
  Types can be declared as abstract in the DSL. Declaring a type as abstract
data/avro-builder.gemspec CHANGED
@@ -15,6 +15,13 @@ Gem::Specification.new do |spec|
15
15
  spec.homepage = 'https://github.com/salsify/avro-builder.git'
16
16
  spec.license = 'MIT'
17
17
 
18
+ if spec.respond_to?(:metadata)
19
+ spec.metadata['allowed_push_host'] = 'https://rubygems.org'
20
+ spec.metadata['rubygems_mfa_required'] = 'true'
21
+ else
22
+ raise 'RubyGems 2.0 or newer is required to set allowed_push_host.'
23
+ end
24
+
18
25
  spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
19
26
  spec.bindir = 'exe'
20
27
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
@@ -22,7 +29,7 @@ Gem::Specification.new do |spec|
22
29
 
23
30
  spec.required_ruby_version = '>= 2.6'
24
31
 
25
- spec.add_runtime_dependency 'avro', '>= 1.9.0', '< 1.11'
32
+ spec.add_runtime_dependency 'avro', '>= 1.9.0', '< 1.12'
26
33
 
27
34
  spec.add_development_dependency 'appraisal'
28
35
  spec.add_development_dependency 'bundler', '~> 2.0'
@@ -2,6 +2,6 @@
2
2
 
3
3
  source "https://rubygems.org"
4
4
 
5
- gem "avro", "1.10.1"
5
+ gem "avro", "1.10.2"
6
6
 
7
7
  gemspec path: "../"
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "avro", "~> 1.11.0"
6
+
7
+ gemspec path: "../"
@@ -30,7 +30,9 @@ module Avro
30
30
  # Return a new Type instance
31
31
  def create_builtin_type(avro_type_name, field:, cache:)
32
32
  name = avro_type_name.to_s.downcase
33
- if Avro::Schema::PRIMITIVE_TYPES.include?(name)
33
+ if name == 'bytes'
34
+ Avro::Builder::Types::BytesType.new(field: field, cache: cache)
35
+ elsif Avro::Schema::PRIMITIVE_TYPES.include?(name)
34
36
  Avro::Builder::Types::Type.new(name, field: field, cache: cache)
35
37
  elsif field.nil? && NAMED_TYPES.include?(name)
36
38
  Avro::Builder.const_get(name.capitalize).new(cache: cache)
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Avro
4
+ module Builder
5
+ module Types
6
+ # Subclass for the primitive Bytes type because it supports the decimal logical type.
7
+ class BytesType < Type
8
+ dsl_attributes :precision, :scale
9
+
10
+ def initialize(cache:, field: nil)
11
+ super('bytes', field: field, cache: cache)
12
+ end
13
+
14
+ def serialize(reference_state)
15
+ super(reference_state, overrides: serialized_attributes)
16
+ end
17
+
18
+ def to_h(reference_state)
19
+ super(reference_state, overrides: serialized_attributes)
20
+ end
21
+
22
+ private
23
+
24
+ def serialized_attributes
25
+ { precision: precision, scale: scale }
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -5,7 +5,7 @@ module Avro
5
5
  module Types
6
6
  class FixedType < NamedType
7
7
 
8
- dsl_attribute :size
8
+ dsl_attributes :size, :precision, :scale
9
9
 
10
10
  def serialize(reference_state)
11
11
  super(reference_state, overrides: serialized_attributes)
@@ -23,7 +23,7 @@ module Avro
23
23
  private
24
24
 
25
25
  def serialized_attributes
26
- { size: size }
26
+ { size: size, precision: precision, scale: scale }
27
27
  end
28
28
  end
29
29
  end
@@ -24,17 +24,16 @@ module Avro
24
24
  !!abstract
25
25
  end
26
26
 
27
- def serialize(_reference_state)
27
+ def serialize(_reference_state, overrides: {})
28
28
  if logical_type
29
- { type: avro_type_name, logicalType: logical_type }
29
+ serialized_attributes_hash(overrides)
30
30
  else
31
31
  avro_type_name
32
32
  end
33
33
  end
34
34
 
35
- def to_h(_reference_state)
36
- { type: avro_type_name, logicalType: logical_type }
37
- .reject { |_, v| v.nil? }
35
+ def to_h(_reference_state, overrides: {})
36
+ serialized_attributes_hash(overrides)
38
37
  end
39
38
 
40
39
  def namespace
@@ -75,6 +74,12 @@ module Avro
75
74
 
76
75
  private
77
76
 
77
+ def serialized_attributes_hash(overrides)
78
+ { type: avro_type_name, logicalType: logical_type }
79
+ .merge(overrides)
80
+ .reject { |_, v| v.nil? }
81
+ end
82
+
78
83
  def required_attribute_error!(attribute_name)
79
84
  raise RequiredAttributeError.new(type: avro_type_name,
80
85
  attribute: attribute_name,
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'avro/builder/types/type'
4
+ require 'avro/builder/types/bytes_type'
4
5
  require 'avro/builder/types/complex_type'
5
6
  require 'avro/builder/types/type_referencer'
6
7
  require 'avro/builder/types/named_type'
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Avro
4
4
  module Builder
5
- VERSION = '1.0.1'
5
+ VERSION = '1.1.0'
6
6
  end
7
7
  end
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: 1.0.1
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Salsify Engineering
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-24 00:00:00.000000000 Z
11
+ date: 2021-11-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avro
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: 1.9.0
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '1.11'
22
+ version: '1.12'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,7 +29,7 @@ dependencies:
29
29
  version: 1.9.0
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '1.11'
32
+ version: '1.12'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: appraisal
35
35
  requirement: !ruby/object:Gem::Requirement
@@ -178,6 +178,7 @@ extensions: []
178
178
  extra_rdoc_files: []
179
179
  files:
180
180
  - ".circleci/config.yml"
181
+ - ".github/CODEOWNERS"
181
182
  - ".gitignore"
182
183
  - ".overcommit.yml"
183
184
  - ".rspec"
@@ -193,6 +194,7 @@ files:
193
194
  - bin/console
194
195
  - bin/setup
195
196
  - gemfiles/avro_1.10.gemfile
197
+ - gemfiles/avro_1.11.gemfile
196
198
  - gemfiles/avro_1.9.gemfile
197
199
  - lib/avro/builder.rb
198
200
  - lib/avro/builder/aliasable.rb
@@ -216,6 +218,7 @@ files:
216
218
  - lib/avro/builder/type_factory.rb
217
219
  - lib/avro/builder/types.rb
218
220
  - lib/avro/builder/types/array_type.rb
221
+ - lib/avro/builder/types/bytes_type.rb
219
222
  - lib/avro/builder/types/complex_type.rb
220
223
  - lib/avro/builder/types/enum_type.rb
221
224
  - lib/avro/builder/types/fixed_type.rb
@@ -231,8 +234,10 @@ files:
231
234
  homepage: https://github.com/salsify/avro-builder.git
232
235
  licenses:
233
236
  - MIT
234
- metadata: {}
235
- post_install_message:
237
+ metadata:
238
+ allowed_push_host: https://rubygems.org
239
+ rubygems_mfa_required: 'true'
240
+ post_install_message:
236
241
  rdoc_options: []
237
242
  require_paths:
238
243
  - lib
@@ -247,8 +252,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
247
252
  - !ruby/object:Gem::Version
248
253
  version: '0'
249
254
  requirements: []
250
- rubygems_version: 3.0.8
251
- signing_key:
255
+ rubygems_version: 3.2.22
256
+ signing_key:
252
257
  specification_version: 4
253
258
  summary: Ruby DSL to create Avro schemas
254
259
  test_files: []