avromatic 4.2.0 → 5.0.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 +4 -4
- data/lib/avromatic/model/types/decimal_type.rb +63 -0
- data/lib/avromatic/model/types/type_factory.rb +3 -0
- data/lib/avromatic/version.rb +1 -1
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: edb3e19672493014a88fa7a2f4f564e10fa6f2e733061f5f719b78adbfb6e364
|
4
|
+
data.tar.gz: 5d982242936f4131d2a1756c4320433b09395f5de55513cfdc137612ac860629
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56fa6e4a6c8d8c4d50ceec2531711d6221f780a985bf6f287ea14e9873c56b5ffd5447e52ed986075a3b93267df7087dd07670ca7643cfcf9bdddc41fdc8d9ce
|
7
|
+
data.tar.gz: 27c92ddfcb77de6dc362be0b8e0dbe4dd71a667f539660e37dd8f6add7e0ae17aa61a32af0aef1266a24f5ca8549c3745aa3a8cdfad159703ca7acec33f1dd56
|
@@ -0,0 +1,63 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'bigdecimal'
|
4
|
+
require 'bigdecimal/util'
|
5
|
+
require 'avromatic/model/types/abstract_type'
|
6
|
+
|
7
|
+
module Avromatic
|
8
|
+
module Model
|
9
|
+
module Types
|
10
|
+
class DecimalType < AbstractType
|
11
|
+
VALUE_CLASSES = [::BigDecimal].freeze
|
12
|
+
INPUT_CLASSES = [::BigDecimal, ::Float, ::Integer].freeze
|
13
|
+
|
14
|
+
attr_reader :precision, :scale
|
15
|
+
|
16
|
+
def initialize(precision:, scale: 0)
|
17
|
+
super()
|
18
|
+
@precision = precision
|
19
|
+
@scale = scale
|
20
|
+
end
|
21
|
+
|
22
|
+
def value_classes
|
23
|
+
VALUE_CLASSES
|
24
|
+
end
|
25
|
+
|
26
|
+
def input_classes
|
27
|
+
INPUT_CLASSES
|
28
|
+
end
|
29
|
+
|
30
|
+
def name
|
31
|
+
"decimal(#{precision}, #{scale})"
|
32
|
+
end
|
33
|
+
|
34
|
+
def coerce(input)
|
35
|
+
case input
|
36
|
+
when ::NilClass, ::BigDecimal
|
37
|
+
input
|
38
|
+
when ::Float, ::Integer
|
39
|
+
input.to_d
|
40
|
+
else
|
41
|
+
raise ArgumentError.new("Could not coerce '#{input.inspect}' to #{name}")
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def coercible?(input)
|
46
|
+
input.nil? || input_classes.any? { |input_class| input.is_a?(input_class) }
|
47
|
+
end
|
48
|
+
|
49
|
+
def coerced?(value)
|
50
|
+
value.nil? || value_classes.any? { |value_class| value.is_a?(value_class) }
|
51
|
+
end
|
52
|
+
|
53
|
+
def serialize(value, _strict)
|
54
|
+
value
|
55
|
+
end
|
56
|
+
|
57
|
+
def referenced_model_classes
|
58
|
+
EMPTY_ARRAY
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -4,6 +4,7 @@ require 'avromatic/model/types/array_type'
|
|
4
4
|
require 'avromatic/model/types/boolean_type'
|
5
5
|
require 'avromatic/model/types/custom_type'
|
6
6
|
require 'avromatic/model/types/date_type'
|
7
|
+
require 'avromatic/model/types/decimal_type'
|
7
8
|
require 'avromatic/model/types/enum_type'
|
8
9
|
require 'avromatic/model/types/fixed_type'
|
9
10
|
require 'avromatic/model/types/float_type'
|
@@ -50,6 +51,8 @@ module Avromatic
|
|
50
51
|
)
|
51
52
|
elsif schema.respond_to?(:logical_type) && SINGLETON_TYPES.include?(schema.logical_type)
|
52
53
|
SINGLETON_TYPES.fetch(schema.logical_type)
|
54
|
+
elsif schema.respond_to?(:logical_type) && schema.logical_type == 'decimal'
|
55
|
+
Avromatic::Model::Types::DecimalType.new(precision: schema.precision, scale: schema.scale || 0)
|
53
56
|
elsif SINGLETON_TYPES.include?(schema.type)
|
54
57
|
SINGLETON_TYPES.fetch(schema.type)
|
55
58
|
else
|
data/lib/avromatic/version.rb
CHANGED
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:
|
4
|
+
version: 5.0.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:
|
11
|
+
date: 2023-10-13 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activemodel
|
@@ -19,7 +19,7 @@ dependencies:
|
|
19
19
|
version: '5.2'
|
20
20
|
- - "<"
|
21
21
|
- !ruby/object:Gem::Version
|
22
|
-
version: '7.
|
22
|
+
version: '7.2'
|
23
23
|
type: :runtime
|
24
24
|
prerelease: false
|
25
25
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -29,7 +29,7 @@ dependencies:
|
|
29
29
|
version: '5.2'
|
30
30
|
- - "<"
|
31
31
|
- !ruby/object:Gem::Version
|
32
|
-
version: '7.
|
32
|
+
version: '7.2'
|
33
33
|
- !ruby/object:Gem::Dependency
|
34
34
|
name: activesupport
|
35
35
|
requirement: !ruby/object:Gem::Requirement
|
@@ -39,7 +39,7 @@ dependencies:
|
|
39
39
|
version: '5.2'
|
40
40
|
- - "<"
|
41
41
|
- !ruby/object:Gem::Version
|
42
|
-
version: '7.
|
42
|
+
version: '7.2'
|
43
43
|
type: :runtime
|
44
44
|
prerelease: false
|
45
45
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -49,14 +49,14 @@ dependencies:
|
|
49
49
|
version: '5.2'
|
50
50
|
- - "<"
|
51
51
|
- !ruby/object:Gem::Version
|
52
|
-
version: '7.
|
52
|
+
version: '7.2'
|
53
53
|
- !ruby/object:Gem::Dependency
|
54
54
|
name: avro
|
55
55
|
requirement: !ruby/object:Gem::Requirement
|
56
56
|
requirements:
|
57
57
|
- - ">="
|
58
58
|
- !ruby/object:Gem::Version
|
59
|
-
version: 1.
|
59
|
+
version: 1.11.0
|
60
60
|
- - "<"
|
61
61
|
- !ruby/object:Gem::Version
|
62
62
|
version: '1.12'
|
@@ -66,7 +66,7 @@ dependencies:
|
|
66
66
|
requirements:
|
67
67
|
- - ">="
|
68
68
|
- !ruby/object:Gem::Version
|
69
|
-
version: 1.
|
69
|
+
version: 1.11.0
|
70
70
|
- - "<"
|
71
71
|
- !ruby/object:Gem::Version
|
72
72
|
version: '1.12'
|
@@ -301,6 +301,7 @@ files:
|
|
301
301
|
- lib/avromatic/model/types/boolean_type.rb
|
302
302
|
- lib/avromatic/model/types/custom_type.rb
|
303
303
|
- lib/avromatic/model/types/date_type.rb
|
304
|
+
- lib/avromatic/model/types/decimal_type.rb
|
304
305
|
- lib/avromatic/model/types/enum_type.rb
|
305
306
|
- lib/avromatic/model/types/fixed_type.rb
|
306
307
|
- lib/avromatic/model/types/float_type.rb
|
@@ -342,7 +343,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
342
343
|
- !ruby/object:Gem::Version
|
343
344
|
version: '0'
|
344
345
|
requirements: []
|
345
|
-
rubygems_version: 3.3.
|
346
|
+
rubygems_version: 3.3.26
|
346
347
|
signing_key:
|
347
348
|
specification_version: 4
|
348
349
|
summary: Generate Ruby models from Avro schemas
|