dynamic_migrations 2.0.0 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d576c2761325b577a0e175e24a59833dc595212900f953ee494d71d4a635beef
4
- data.tar.gz: 47911ce666cdd465a8f57a54263155c92ba8d37339cf7bf3c2a6a3fcde549e99
3
+ metadata.gz: 6bbdbe66b5d24e600037fcaf794929bca95cb55b6a2bd45de324934ab1ab22b2
4
+ data.tar.gz: 06dd757a70e427b753e6f5b3f1bdbf970c749947d13ba7771449f595a2968743
5
5
  SHA512:
6
- metadata.gz: 6a05c58150c20cdf1a19f14e2d931e7a48e4220531cc5f1f25d9cf0740554fe01a3b3db7e2ea7e12d4d06732c0fa472fdd6652cf27fffdad8a82039f73163eeb
7
- data.tar.gz: 0ae100cf8c850cde3de93c4fd86df3487c1b4f7b7f25de65d9fab6b0dfde020bf4d4f09b802c37c92fe5d26fb0b6b73d12d641cb6f6c0fb3567e8e97f047ce87
6
+ metadata.gz: c1f8deb5208188c16ff9b6b0071b9fea82111626336cd73d77e519ce93bb1af4df74090c3e34de49d007d1709f7b7041f95cbfca97dc4676e91e74b19b5ee556
7
+ data.tar.gz: bfced908cb97de19a678043f6e6fff00faeb11d4dc1ac8b3b15b3e8611f21c121b5ad9a04dae54a8cbf118f9efee9b9462a1b6dcf12904c511d23c15d079ea93
data/CHANGELOG.md CHANGED
@@ -1,5 +1,12 @@
1
1
  # Changelog
2
2
 
3
+ ## [2.1.0](https://github.com/craigulliott/dynamic_migrations/compare/v2.0.0...v2.1.0) (2023-07-31)
4
+
5
+
6
+ ### Features
7
+
8
+ * apply default column values to column data types ([6911c5f](https://github.com/craigulliott/dynamic_migrations/commit/6911c5f2026b47ef2e9f7bc529f7ff0d8f098700))
9
+
3
10
  ## [2.0.0](https://github.com/craigulliott/dynamic_migrations/compare/v1.1.1...v2.0.0) (2023-07-27)
4
11
 
5
12
 
@@ -9,6 +9,12 @@ module DynamicMigrations
9
9
  end
10
10
  end
11
11
 
12
+ class UnexpectedPropertyNameError < StandardError
13
+ def initialize attribute
14
+ super "Unexpected property `#{attribute}`"
15
+ end
16
+ end
17
+
12
18
  class UnexpectedPropertyError < StandardError
13
19
  def initialize data_type, attribute, value
14
20
  super "Unexpected property `#{attribute}` with value `#{value}` for data_type `#{data_type}`"
@@ -21,6 +27,18 @@ module DynamicMigrations
21
27
  end
22
28
  end
23
29
 
30
+ ATTRIBUTE_NAMES = [
31
+ :character_maximum_length,
32
+ :character_octet_length,
33
+ :numeric_precision,
34
+ :numeric_precision_radix,
35
+ :numeric_scale,
36
+ :datetime_precision,
37
+ :interval_type,
38
+ :udt_schema,
39
+ :udt_name
40
+ ].freeze
41
+
24
42
  DATA_TYPES = {
25
43
  ARRAY: {
26
44
  description: "binary data (“byte array”)",
@@ -42,7 +60,12 @@ module DynamicMigrations
42
60
  :numeric_precision,
43
61
  :numeric_precision_radix,
44
62
  :numeric_scale
45
- ]
63
+ ],
64
+ defaults: {
65
+ numeric_precision: 64,
66
+ numeric_precision_radix: 2,
67
+ numeric_scale: 0
68
+ }
46
69
  },
47
70
  # skipping this, in my tests it automatically turned into a bigint
48
71
  # bigserial: {
@@ -82,7 +105,10 @@ module DynamicMigrations
82
105
  args: "[ (n) ]",
83
106
  required: [
84
107
  :character_octet_length
85
- ]
108
+ ],
109
+ defaults: {
110
+ character_octet_length: 1073741824
111
+ }
86
112
  },
87
113
  cidr: {
88
114
  description: "IPv4 or IPv6 network address"
@@ -112,7 +138,12 @@ module DynamicMigrations
112
138
  :numeric_precision,
113
139
  :numeric_precision_radix,
114
140
  :numeric_scale
115
- ]
141
+ ],
142
+ defaults: {
143
+ numeric_precision: 32,
144
+ numeric_precision_radix: 2,
145
+ numeric_scale: 0
146
+ }
116
147
  },
117
148
  interval: {
118
149
  description: "time span",
@@ -193,7 +224,10 @@ module DynamicMigrations
193
224
  description: "variable-length character string",
194
225
  required: [
195
226
  :character_octet_length
196
- ]
227
+ ],
228
+ defaults: {
229
+ character_octet_length: 1073741824
230
+ }
197
231
  },
198
232
  "time without time zone": {
199
233
  description: "time of day (no time zone)",
@@ -238,7 +272,20 @@ module DynamicMigrations
238
272
  xml: {
239
273
  description: "XML data"
240
274
  }
241
- }
275
+ }.freeze
276
+
277
+ def self.default_for data_type, attribute
278
+ raise ExpectedSymbolError, data_type unless data_type.is_a? Symbol
279
+ raise ExpectedSymbolError, attribute unless attribute.is_a? Symbol
280
+ raise UnsupportedTypeError, data_type unless DATA_TYPES.key? data_type
281
+
282
+ unless ATTRIBUTE_NAMES.include? attribute
283
+ raise UnexpectedPropertyNameError.new attribute
284
+ end
285
+
286
+ defaults = DATA_TYPES[data_type][:defaults]
287
+ defaults && defaults[attribute] || nil
288
+ end
242
289
 
243
290
  def self.validate_type_exists! data_type
244
291
  raise ExpectedSymbolError, data_type unless data_type.is_a? Symbol
@@ -48,6 +48,17 @@ module DynamicMigrations
48
48
  @description = description
49
49
  end
50
50
 
51
+ # apply any defaults for this data type
52
+ character_maximum_length = character_maximum_length.nil? ? DataTypes.default_for(data_type, :character_maximum_length) : character_maximum_length
53
+ character_octet_length = character_octet_length.nil? ? DataTypes.default_for(data_type, :character_octet_length) : character_octet_length
54
+ numeric_precision = numeric_precision.nil? ? DataTypes.default_for(data_type, :numeric_precision) : numeric_precision
55
+ numeric_precision_radix = numeric_precision_radix.nil? ? DataTypes.default_for(data_type, :numeric_precision_radix) : numeric_precision_radix
56
+ numeric_scale = numeric_scale.nil? ? DataTypes.default_for(data_type, :numeric_scale) : numeric_scale
57
+ datetime_precision = datetime_precision.nil? ? DataTypes.default_for(data_type, :datetime_precision) : datetime_precision
58
+ interval_type = interval_type.nil? ? DataTypes.default_for(data_type, :interval_type) : interval_type
59
+ udt_schema = udt_schema.nil? ? DataTypes.default_for(data_type, :udt_schema) : udt_schema
60
+ udt_name = udt_name.nil? ? DataTypes.default_for(data_type, :udt_name) : udt_name
61
+
51
62
  DataTypes.validate_column_properties!(data_type,
52
63
  character_maximum_length: character_maximum_length,
53
64
  character_octet_length: character_octet_length,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module DynamicMigrations
4
- VERSION = "2.0.0"
4
+ VERSION = "2.1.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dynamic_migrations
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.0
4
+ version: 2.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Craig Ulliott
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-07-27 00:00:00.000000000 Z
11
+ date: 2023-07-31 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg