types_from_serializers 2.1.0 → 2.2.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
  SHA256:
3
- metadata.gz: 61ca195394efd6b1c37c31b81ff85f7ccbcba562e9cf7b76d7810dfc613e1aa6
4
- data.tar.gz: 20ef589a30a448e668d1da4106ab565e768227e74f950c5d56bfbd2a83aa9a48
3
+ metadata.gz: 0e3961bc80ddc72831c77e7cf9ddf0959809a49a845f0d778d0c6ac50148cb87
4
+ data.tar.gz: e676ddfe4c4c51081075bd5bbb3a66990d8ea469dc60305a550175abe8c43c99
5
5
  SHA512:
6
- metadata.gz: fec219f23757f68e03678195ac3f66f13d3d48897e30c3f4b141c12257eb394577c997ecc639110ac3fee8be57e90f915c94989e84116a9be76d9d1e5df47f52
7
- data.tar.gz: 1956d02db12c7ea5eab5edff52dc48356f163f71a17ab08fc93e6dcae810d29df26ea7501ddc0e8ac609087981d2456e4b927bcdb01acfeff455adf4671b58b0
6
+ metadata.gz: 01e286a9381c3d8f2e00c4085ba491ab4d4332ee3ac0ea2ebd109a7ff53ddb131b43d1c0839a09459884edc0536cd805d5303be2a80143a12998d6b5839dfc14
7
+ data.tar.gz: a3687e203f27c34a3243f1422588bd2c79362ef4b7f9c2432ec6ce53493c83c11782f784f8acb4a76d7a611fab6ca7e9422f63560c3053739e3b39c3258d91ed
data/CHANGELOG.md CHANGED
@@ -1,3 +1,17 @@
1
+ # [2.2.0](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.1.0...types_from_serializers@2.2.0) (2024-08-23)
2
+
3
+
4
+ ### Bug Fixes
5
+
6
+ * be more accurate regarding decimal serialization ([cd63653](https://github.com/ElMassimo/types_from_serializers/commit/cd636530a5710112a14746cc7d0e3f15016cd5e1))
7
+
8
+
9
+ ### Features
10
+
11
+ * infer type from enums ([#20](https://github.com/ElMassimo/types_from_serializers/issues/20)) ([49dc61d](https://github.com/ElMassimo/types_from_serializers/commit/49dc61da2718256e9b5f5743b5a65c4746d64c2f))
12
+
13
+
14
+
1
15
  # [2.1.0](https://github.com/ElMassimo/types_from_serializers/compare/types_from_serializers@2.0.2...types_from_serializers@2.1.0) (2023-07-19)
2
16
 
3
17
 
@@ -38,15 +38,12 @@ module TypesFromSerializers
38
38
  TypesFromSerializers.config.name_from_serializer.call(name).gsub("::", "/")
39
39
  end
40
40
 
41
- # Internal: The columns corresponding to the serializer model, if it's a
42
- # record.
43
- def model_columns
44
- @model_columns ||= _serializer_model_name&.to_model.try(:columns_hash) || {}
45
- end
46
-
47
41
  # Internal: The TypeScript properties of the serialzeir interface.
48
42
  def ts_properties
49
43
  @ts_properties ||= begin
44
+ model_class = _serializer_model_name&.to_model
45
+ model_columns = model_class.try(:columns_hash) || {}
46
+ model_enums = model_class.try(:defined_enums) || {}
50
47
  types_from = try(:_serializer_types_from)
51
48
 
52
49
  prepare_attributes(
@@ -64,7 +61,7 @@ module TypesFromSerializers
64
61
  multi: options[:association] == :many,
65
62
  column_name: options.fetch(:value_from),
66
63
  ).tap do |property|
67
- property.infer_type_from(model_columns, types_from)
64
+ property.infer_type_from(model_columns, model_enums, types_from)
68
65
  end
69
66
  end
70
67
  }
@@ -190,9 +187,11 @@ module TypesFromSerializers
190
187
 
191
188
  # Internal: Infers the property's type by checking a corresponding SQL
192
189
  # column, or falling back to a TypeScript interface if provided.
193
- def infer_type_from(columns_hash, ts_interface)
190
+ def infer_type_from(columns_hash, defined_enums, ts_interface)
194
191
  if type
195
192
  type
193
+ elsif (enum = defined_enums[column_name.to_s])
194
+ self.type = enum.keys.map(&:inspect).join(" | ")
196
195
  elsif (column = columns_hash[column_name.to_s])
197
196
  self.multi = true if column.try(:array)
198
197
  self.optional = true if column.null && !column.default
@@ -383,7 +382,7 @@ module TypesFromSerializers
383
382
  boolean: :boolean,
384
383
  date: "string | Date",
385
384
  datetime: "string | Date",
386
- decimal: :number,
385
+ decimal: "string | number",
387
386
  integer: :number,
388
387
  string: :string,
389
388
  text: :string,
@@ -2,5 +2,5 @@
2
2
 
3
3
  module TypesFromSerializers
4
4
  # Public: This library adheres to semantic versioning.
5
- VERSION = "2.1.0"
5
+ VERSION = "2.2.0"
6
6
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: types_from_serializers
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.0
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Máximo Mussini
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-19 00:00:00.000000000 Z
11
+ date: 2024-08-23 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: railties
@@ -277,7 +277,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
277
277
  - !ruby/object:Gem::Version
278
278
  version: '0'
279
279
  requirements: []
280
- rubygems_version: 3.2.32
280
+ rubygems_version: 3.4.10
281
281
  signing_key:
282
282
  specification_version: 4
283
283
  summary: Generate TypeScript interfaces from your JSON serializers.