shale 1.2.1 → 1.2.2

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: 527c634afc670223747f11c77d1fd5e1470c26faec18594c1c31594503883799
4
- data.tar.gz: ee6e31c70608520549b9bf90c00e98fd43821797b8b31a7493d0538ce40767a8
3
+ metadata.gz: f737403457864d1e61e3a75015369cc826b7e3f758aae950d2a8aec16d316942
4
+ data.tar.gz: 2921f2984702ab7272b7aeca49521fb1c5103747ab32fdf2c25c54e6cf0a8e70
5
5
  SHA512:
6
- metadata.gz: bf35ec1503adfe41ab81d6ad27515158980937bcbce04f8ca8014343b8fae0404433c8a667a2d30492c4aa359bd2e1cf6e836e900ce57574a811ac88da28ac93
7
- data.tar.gz: ea9e5799d4c93611ae0d1c390e835248f460e565aa68f6556c06ff0ef9057c0f42a68da02b6005d809594945548ec7dc659db775a135dc58c7f5920b18ec8eaf
6
+ metadata.gz: 52189f5729daad8d9b6d237c08f3d924017161028c08fafbae943ac9e736d1a1239729fe8cb4142899accd3d71f0142858b7fcb835bcecb8b36c2e7083a0c30f
7
+ data.tar.gz: 7c00edbbff3daff21b2f87c2a24b8d3cfe1e8f449dfe7523206c7f51c81597ab240390254b06f24264dab0cf9628843c6e7b855d6458362496f98c87ae97a538
data/CHANGELOG.md CHANGED
@@ -1,3 +1,11 @@
1
+ ## [1.2.2] - 2025-03-13
2
+
3
+ ### Added
4
+ - [kjeldahl] Adds BigDecimal mapper
5
+
6
+ ### Fixed
7
+ - [ollietulloch] Allow `Shale::Mapper` attributes to define a `schema`
8
+
1
9
  ## [1.2.1] - 2025-01-09
2
10
 
3
11
  ### Fixed
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Shale
4
+ module Schema
5
+ module Compiler
6
+ # Class that maps Schema type to Shale Decimal type
7
+ #
8
+ # @api private
9
+ class Decimal
10
+ # Return name of the Shale type
11
+ #
12
+ # @return [String]
13
+ #
14
+ # @api private
15
+ def name
16
+ 'Shale::Type::Decimal'
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -9,8 +9,8 @@ module Shale
9
9
  #
10
10
  # @api private
11
11
  class Ref < Base
12
- def initialize(name, type)
13
- super(name)
12
+ def initialize(name, type, schema: nil)
13
+ super(name, schema: schema)
14
14
  @type = type.gsub('::', '_')
15
15
  end
16
16
 
@@ -87,7 +87,7 @@ module Shale
87
87
  next unless attribute
88
88
 
89
89
  if mapper_type?(attribute.type)
90
- json_type = Ref.new(mapping.name, attribute.type.model.name)
90
+ json_type = Ref.new(mapping.name, attribute.type.model.name, schema: mapping.schema)
91
91
  else
92
92
  json_klass = self.class.get_json_type(attribute.type)
93
93
 
@@ -6,6 +6,7 @@ require_relative '../../shale'
6
6
  require_relative '../error'
7
7
  require_relative 'compiler/boolean'
8
8
  require_relative 'compiler/date'
9
+ require_relative 'compiler/decimal'
9
10
  require_relative 'compiler/float'
10
11
  require_relative 'compiler/integer'
11
12
  require_relative 'compiler/string'
@@ -103,11 +104,16 @@ module Shale
103
104
  # XML Schema "float" types
104
105
  # @api private
105
106
  XS_TYPE_FLOAT = [
106
- "#{XS_NAMESPACE_URI}:decimal",
107
107
  "#{XS_NAMESPACE_URI}:float",
108
108
  "#{XS_NAMESPACE_URI}:double",
109
109
  ].freeze
110
110
 
111
+ # XML Schema "decimal" types
112
+ # @api private
113
+ XS_TYPE_DECIMAL = [
114
+ "#{XS_NAMESPACE_URI}:decimal",
115
+ ].freeze
116
+
111
117
  # XML Schema "integer" types
112
118
  # @api private
113
119
  XS_TYPE_INTEGER = [
@@ -612,6 +618,8 @@ module Shale
612
618
  Compiler::Time.new
613
619
  elsif XS_TYPE_STRING.include?(type)
614
620
  Compiler::String.new
621
+ elsif XS_TYPE_DECIMAL.include?(type)
622
+ Compiler::Decimal.new
615
623
  elsif XS_TYPE_FLOAT.include?(type)
616
624
  Compiler::Float.new
617
625
  elsif XS_TYPE_INTEGER.include?(type)
@@ -52,6 +52,7 @@ module Shale
52
52
  register_xml_type(Shale::Type::Boolean, 'boolean')
53
53
  register_xml_type(Shale::Type::Date, 'date')
54
54
  register_xml_type(Shale::Type::Float, 'decimal')
55
+ register_xml_type(Shale::Type::Decimal, 'decimal')
55
56
  register_xml_type(Shale::Type::Integer, 'integer')
56
57
  register_xml_type(Shale::Type::Time, 'dateTime')
57
58
  register_xml_type(Shale::Type::Value, 'anyType')
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'value'
4
+
5
+ module Shale
6
+ module Type
7
+ # Cast value to BigDecimal
8
+ #
9
+ # @api public
10
+ class Decimal < Value
11
+ class << self
12
+ # @param [String, Float, Integer, nil] value Value to cast
13
+ #
14
+ # @return [BigDecimal, nil]
15
+ #
16
+ # @api private
17
+ def cast(value)
18
+ return if value.nil?
19
+
20
+ case value
21
+ when ::BigDecimal then value
22
+ when ::Float then BigDecimal(value, value.to_s.length)
23
+ else BigDecimal(value)
24
+ end
25
+ end
26
+
27
+ def as_json(value, **)
28
+ value.to_f
29
+ end
30
+
31
+ def as_yaml(value, **)
32
+ value.to_f
33
+ end
34
+
35
+ def as_csv(value, **)
36
+ value.to_f
37
+ end
38
+
39
+ def as_toml(value, **)
40
+ value.to_f
41
+ end
42
+
43
+ def as_xml_value(value, **)
44
+ value.to_s('F')
45
+ end
46
+ end
47
+ end
48
+
49
+ register(:decimal, Decimal)
50
+ end
51
+ end
data/lib/shale/version.rb CHANGED
@@ -2,5 +2,5 @@
2
2
 
3
3
  module Shale
4
4
  # @api private
5
- VERSION = '1.2.1'
5
+ VERSION = '1.2.2'
6
6
  end
data/lib/shale.rb CHANGED
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'yaml'
4
+ require 'bigdecimal'
4
5
 
5
6
  require_relative 'shale/mapper'
6
7
  require_relative 'shale/adapter/json'
7
8
  require_relative 'shale/type'
8
9
  require_relative 'shale/type/boolean'
9
10
  require_relative 'shale/type/date'
11
+ require_relative 'shale/type/decimal'
10
12
  require_relative 'shale/type/float'
11
13
  require_relative 'shale/type/integer'
12
14
  require_relative 'shale/type/string'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: shale
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Kamil Giszczak
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2025-01-09 00:00:00.000000000 Z
11
+ date: 2025-03-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bigdecimal
@@ -72,6 +72,7 @@ files:
72
72
  - lib/shale/schema/compiler/boolean.rb
73
73
  - lib/shale/schema/compiler/complex.rb
74
74
  - lib/shale/schema/compiler/date.rb
75
+ - lib/shale/schema/compiler/decimal.rb
75
76
  - lib/shale/schema/compiler/float.rb
76
77
  - lib/shale/schema/compiler/integer.rb
77
78
  - lib/shale/schema/compiler/property.rb
@@ -109,6 +110,7 @@ files:
109
110
  - lib/shale/type/boolean.rb
110
111
  - lib/shale/type/complex.rb
111
112
  - lib/shale/type/date.rb
113
+ - lib/shale/type/decimal.rb
112
114
  - lib/shale/type/float.rb
113
115
  - lib/shale/type/integer.rb
114
116
  - lib/shale/type/string.rb