attributor 6.3 → 6.5

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
  SHA256:
3
- metadata.gz: b30fd80bf80e1fba073207107cc6ee008d8f7f5edc3acd49863d58d27c9b2caa
4
- data.tar.gz: 7549362dfe5fb7f1eb654ab7927996baee065f4b37cbdb74fcfb472189b8ea17
3
+ metadata.gz: 9242ef6d878ab79e69393d7bf31b6459873d39a8307c9dac0ea05ce8c4a01912
4
+ data.tar.gz: 0b2f333abe4957d1575df87c734c4f642274a83d50562059c33fb261154e44a5
5
5
  SHA512:
6
- metadata.gz: 46fb615c0952564d354ed67e9ed4e794bead86868111cf3a1447f1aab92e9a8106addca135673b59acb67f58dfdbbc5ed8a49d9f5f5cebdf5a2439719c495768
7
- data.tar.gz: 726a29e1f6a30025f51a62dfb63fc8331e3202a3553f031ad776679ee7a525a7e689feb75ed184d0eb306b6bbe6b7c03605bb6b396fd5e234e0ddc1fa751b2e8
6
+ metadata.gz: 48a0ea86f5550dd44b0d162ea96c1a98bbd7019955857f607817efe921fc4250c210e2591664d18a9388fd614d323547c83421b64ba678369c47d248423770ca
7
+ data.tar.gz: dcd17fa9b98e35d02e471ef340b641ba15ff4fafd6f05d5ac650204830ba7cc7a44feaf40b6a2386c660ab17d3b8d0b881d01d84c4a83a46fe41c6552a2ec74d
data/CHANGELOG.md CHANGED
@@ -2,6 +2,12 @@
2
2
 
3
3
  ## next
4
4
 
5
+ ## 6.5 (1/19/2023)
6
+ - Fix JSON schema reporting for BigDecimal types to be a string, with a format=bigdecimal
7
+
8
+ ## 6.4 (10/26/2022)
9
+ - Cache default values for a type, to speedup loading/coercing an object to it
10
+
5
11
  ## 6.3 (10/21/2022)
6
12
  - Added some small utility enhancements for dealing with attributes and types
7
13
  * .duplicate an attribute, with a different inner type and/or options
@@ -1,8 +1,9 @@
1
1
  require 'bigdecimal'
2
2
 
3
3
  module Attributor
4
- class BigDecimal
5
- include Numeric
4
+ class BigDecimal
5
+ include Type
6
+
6
7
  def self.native_type
7
8
  ::BigDecimal
8
9
  end
@@ -19,7 +20,18 @@ module Attributor
19
20
  end
20
21
 
21
22
  def self.json_schema_type
22
- :number
23
+ :string
24
+ end
25
+
26
+ # Bigdecimal numbers are too big to be represented as numbers in JSON schema
27
+ # The way to do so, is to represent them as strings, but add a 'format' specifying
28
+ # how to parse that (seemingly, there is a 'double' well known type that json API
29
+ # claims we can use) ... not sure if this is the right one, as technically BigDecimal
30
+ # has very large precision that a double wouldn't be able to fit...
31
+ def self.as_json_schema( shallow: false, example: nil, attribute_options: {} )
32
+ hash = super
33
+ hash[:format] = 'bigdecimal'
34
+ hash
23
35
  end
24
36
  end
25
37
  end
@@ -30,6 +30,7 @@ module Attributor
30
30
  attr_reader :insensitive_map
31
31
  attr_accessor :extra_keys
32
32
  attr_reader :requirements
33
+ attr_reader :cached_defaults
33
34
  end
34
35
 
35
36
  @key_type = Object
@@ -40,6 +41,7 @@ module Attributor
40
41
 
41
42
  @error = false
42
43
  @requirements = []
44
+ @cached_defaults = {}
43
45
 
44
46
  def self.slice!(*keys)
45
47
  missing_keys = keys - @keys.keys
@@ -81,7 +83,7 @@ module Attributor
81
83
  @key_attribute = Attribute.new(@key_type)
82
84
  @value_attribute = Attribute.new(@value_type)
83
85
  @requirements = []
84
-
86
+ @cached_defaults = {}
85
87
  @error = false
86
88
  end
87
89
  end
@@ -419,14 +421,21 @@ module Attributor
419
421
  # handle default values for missing keys
420
422
  keys.each do |key_name, attribute|
421
423
  next if hash.key?(key_name)
422
- sub_context = generate_subcontext(context, key_name)
423
- default = attribute.load(nil, sub_context, recurse: recurse)
424
+
425
+ # Cache default values to avoid a whole loading call for the attribute
426
+ default = if @cached_defaults.key?(key_name)
427
+ @cached_defaults[key_name]
428
+ else
429
+ sub_context = generate_subcontext(context, key_name)
430
+ @cached_defaults[key_name] = attribute.load(nil, sub_context, recurse: recurse)
431
+ end
424
432
  hash[key_name] = default unless default.nil?
425
433
  end
426
-
427
434
  hash
428
435
  end
429
436
 
437
+
438
+
430
439
  def self.validate(object, context = Attributor::DEFAULT_ROOT_CONTEXT, _attribute)
431
440
  context = [context] if context.is_a? ::String
432
441
 
@@ -46,6 +46,7 @@ module Attributor
46
46
  @value_attribute = va
47
47
 
48
48
  @requirements = []
49
+ @cached_defaults = {}
49
50
  @error = false
50
51
  end
51
52
  end
@@ -1,3 +1,3 @@
1
1
  module Attributor
2
- VERSION = '6.3'.freeze
2
+ VERSION = '6.5'.freeze
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: attributor
3
3
  version: !ruby/object:Gem::Version
4
- version: '6.3'
4
+ version: '6.5'
5
5
  platform: ruby
6
6
  authors:
7
7
  - Josep M. Blanquer
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2022-10-21 00:00:00.000000000 Z
12
+ date: 2023-01-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: hashie