avromatic 0.28.1 → 0.29.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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 361781d979e68fb4b48f288153368b9d2f00d064
4
- data.tar.gz: d761359438529abe3ca428582c68d47a73de7587
3
+ metadata.gz: 7ffb68968240ce157b9aeb4fd3e54dc2af726380
4
+ data.tar.gz: f205fd7e2877419fc07cff8293e32bbb589aa71c
5
5
  SHA512:
6
- metadata.gz: 15122e83c1a2f3301d25873f56a668b1bd545bb5e3763bc0d56d2c1135ed812961ef786da27ca16eaaef1d3864cea2f2f6d481fc36f5829f9347e692fac91f1e
7
- data.tar.gz: 10e242e0cc4f755992d1b955ea9e5ab6746be6c30b60d79277f96e121e44b807a96bb1a79b1a22290fd1d525a73932b48dd64b54b348ad99a4d09ff3d866fbf1
6
+ metadata.gz: 7c3eb099c2c4b382b84bd5784fa1b02c0a6b682979b1a95490b6ab762ec516174b2309a7332f67b47c26b60a97771fc3a63fc8994f2822fe96b30d42eff1f003
7
+ data.tar.gz: 555bbf5724310f0bd2c78fb815dfd7b1e820b053eedda6ff4ff17ed36264ab9065364a365b39e60fd1ba57609355ee9ed28057158a33c9f5cb490236514d7b43
data/CHANGELOG.md CHANGED
@@ -1,5 +1,10 @@
1
1
  # avromatic changelog
2
2
 
3
+ ## v0.29.0
4
+ - Add new public methods `#avro_key_datum` and `#avro_value_datum` on an
5
+ Avromatic model instance that return the attributes of the model suitable for
6
+ Avro encoding without any customizations.
7
+
3
8
  ## v0.28.1
4
9
  - Fix a bug that raised an error when encoding a cached model containing optional
5
10
  field(s). With this change, immutable model caching now enabled only when
@@ -22,13 +22,13 @@ module Avromatic
22
22
  end
23
23
 
24
24
  module ClassMethods
25
- def recursive_serialize(value, name: nil, member_types: nil)
25
+ def recursive_serialize(value, name: nil, member_types: nil, strict: false)
26
26
  member_types = attribute_member_types(name) if name
27
27
  member_types ||= EMPTY_ARRAY
28
28
 
29
29
  if value.is_a?(Avromatic::Model::Attributes)
30
- hash = value.value_attributes_for_avro
31
- if Avromatic.use_custom_datum_writer
30
+ hash = strict ? value.avro_value_datum : value.value_attributes_for_avro
31
+ if !strict && Avromatic.use_custom_datum_writer
32
32
  if Avromatic.use_encoding_providers? && !value.class.config.mutable
33
33
  # n.b. Ideally we'd just return value here instead of wrapping it in a
34
34
  # hash but then we'd have no place to stash the union member index...
@@ -39,10 +39,10 @@ module Avromatic
39
39
  end
40
40
  hash
41
41
  elsif value.is_a?(Array)
42
- value.map { |v| recursive_serialize(v, member_types: member_types) }
42
+ value.map { |v| recursive_serialize(v, member_types: member_types, strict: strict) }
43
43
  elsif value.is_a?(Hash)
44
44
  value.each_with_object({}) do |(k, v), map|
45
- map[k] = recursive_serialize(v, member_types: member_types)
45
+ map[k] = recursive_serialize(v, member_types: member_types, strict: strict)
46
46
  end
47
47
  else
48
48
  avro_serializer[name].call(value)
@@ -96,11 +96,23 @@ module Avromatic
96
96
  avro_hash(key_avro_field_names)
97
97
  end
98
98
 
99
+ def avro_value_datum
100
+ if self.class.config.mutable
101
+ avro_hash(value_avro_field_names, strict: true)
102
+ else
103
+ @avro_datum ||= avro_hash(value_avro_field_names, strict: true)
104
+ end
105
+ end
106
+
107
+ def avro_key_datum
108
+ avro_hash(key_avro_field_names, strict: true)
109
+ end
110
+
99
111
  private
100
112
 
101
- def avro_hash(fields)
113
+ def avro_hash(fields, strict: false)
102
114
  attributes.slice(*fields).each_with_object(Hash.new) do |(key, value), result|
103
- result[key.to_s] = self.class.recursive_serialize(value, name: key)
115
+ result[key.to_s] = self.class.recursive_serialize(value, name: key, strict: strict)
104
116
  end
105
117
  end
106
118
 
@@ -1,3 +1,3 @@
1
1
  module Avromatic
2
- VERSION = '0.28.1'.freeze
2
+ VERSION = '0.29.0'.freeze
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: avromatic
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.28.1
4
+ version: 0.29.0
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-09-01 00:00:00.000000000 Z
11
+ date: 2017-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: avro
@@ -330,7 +330,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
330
330
  version: '0'
331
331
  requirements: []
332
332
  rubyforge_project:
333
- rubygems_version: 2.6.12
333
+ rubygems_version: 2.6.13
334
334
  signing_key:
335
335
  specification_version: 4
336
336
  summary: Generate Ruby models from Avro schemas