duck_record 0.0.9.1 → 0.0.10

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/Rakefile +13 -13
  3. data/lib/duck_record/associations/association.rb +15 -15
  4. data/lib/duck_record/associations/collection_association.rb +8 -8
  5. data/lib/duck_record/associations/collection_proxy.rb +1 -1
  6. data/lib/duck_record/associations/has_many_association.rb +0 -1
  7. data/lib/duck_record/associations/singular_association.rb +6 -6
  8. data/lib/duck_record/attribute/user_provided_default.rb +2 -2
  9. data/lib/duck_record/attribute.rb +70 -70
  10. data/lib/duck_record/attribute_assignment.rb +74 -74
  11. data/lib/duck_record/attribute_methods/before_type_cast.rb +9 -9
  12. data/lib/duck_record/attribute_methods/dirty.rb +29 -29
  13. data/lib/duck_record/attribute_methods/read.rb +27 -27
  14. data/lib/duck_record/attribute_methods/write.rb +20 -20
  15. data/lib/duck_record/attribute_methods.rb +8 -8
  16. data/lib/duck_record/attribute_mutation_tracker.rb +4 -4
  17. data/lib/duck_record/attribute_set/yaml_encoder.rb +5 -5
  18. data/lib/duck_record/attribute_set.rb +5 -5
  19. data/lib/duck_record/attributes.rb +14 -14
  20. data/lib/duck_record/base.rb +18 -18
  21. data/lib/duck_record/callbacks.rb +1 -1
  22. data/lib/duck_record/core.rb +35 -35
  23. data/lib/duck_record/inheritance.rb +25 -25
  24. data/lib/duck_record/model_schema.rb +10 -11
  25. data/lib/duck_record/nested_attributes.rb +149 -149
  26. data/lib/duck_record/reflection.rb +14 -14
  27. data/lib/duck_record/type/array.rb +6 -6
  28. data/lib/duck_record/type/registry.rb +21 -21
  29. data/lib/duck_record/type/serialized.rb +8 -8
  30. data/lib/duck_record/type/time.rb +0 -1
  31. data/lib/duck_record/type/unsigned_integer.rb +6 -6
  32. data/lib/duck_record/type.rb +16 -14
  33. data/lib/duck_record/validations/uniqueness_on_real_record.rb +45 -45
  34. data/lib/duck_record/validations.rb +6 -6
  35. data/lib/duck_record/version.rb +1 -1
  36. data/lib/duck_record.rb +7 -7
  37. metadata +7 -6
@@ -317,7 +317,7 @@ module DuckRecord
317
317
  # # creates avatar_attributes= and posts_attributes=
318
318
  # accepts_nested_attributes_for :avatar, :posts, allow_destroy: true
319
319
  def accepts_nested_attributes_for(*attr_names)
320
- options = {allow_destroy: false}
320
+ options = { allow_destroy: false }
321
321
  options.update(attr_names.extract_options!)
322
322
  options.assert_valid_keys(:reject_if, :limit, :allow_destroy)
323
323
  options[:reject_if] = REJECT_ALL_BLANK_PROC if options[:reject_if] == :all_blank
@@ -340,19 +340,19 @@ module DuckRecord
340
340
 
341
341
  private
342
342
 
343
- # Generates a writer method for this association. Serves as a point for
344
- # accessing the objects in the association. For example, this method
345
- # could generate the following:
346
- #
347
- # def pirate_attributes=(attributes)
348
- # assign_nested_attributes_for_one_to_one_association(:pirate, attributes)
349
- # end
350
- #
351
- # This redirects the attempts to write objects in an association through
352
- # the helper methods defined below. Makes it seem like the nested
353
- # associations are just regular associations.
354
- def generate_association_writer(association_name, type)
355
- generated_association_methods.module_eval <<-eoruby, __FILE__, __LINE__ + 1
343
+ # Generates a writer method for this association. Serves as a point for
344
+ # accessing the objects in the association. For example, this method
345
+ # could generate the following:
346
+ #
347
+ # def pirate_attributes=(attributes)
348
+ # assign_nested_attributes_for_one_to_one_association(:pirate, attributes)
349
+ # end
350
+ #
351
+ # This redirects the attempts to write objects in an association through
352
+ # the helper methods defined below. Makes it seem like the nested
353
+ # associations are just regular associations.
354
+ def generate_association_writer(association_name, type)
355
+ generated_association_methods.module_eval <<-eoruby, __FILE__, __LINE__ + 1
356
356
  if method_defined?(:#{association_name}_attributes=)
357
357
  remove_method(:#{association_name}_attributes=)
358
358
  end
@@ -360,7 +360,7 @@ module DuckRecord
360
360
  assign_nested_attributes_for_#{type}_association(:#{association_name}, attributes)
361
361
  end
362
362
  eoruby
363
- end
363
+ end
364
364
  end
365
365
 
366
366
  # Marks this record to be destroyed as part of the parent's save transaction.
@@ -390,166 +390,166 @@ module DuckRecord
390
390
 
391
391
  private
392
392
 
393
- # Attribute hash keys that should not be assigned as normal attributes.
394
- # These hash keys are nested attributes implementation details.
395
- UNASSIGNABLE_KEYS = %w( _destroy )
396
-
397
- # Assigns the given attributes to the association.
398
- #
399
- # If an associated record does not yet exist, one will be instantiated. If
400
- # an associated record already exists, the method's behavior depends on
401
- # the value of the update_only option. If update_only is +false+ and the
402
- # given attributes include an <tt>:id</tt> that matches the existing record's
403
- # id, then the existing record will be modified. If no <tt>:id</tt> is provided
404
- # it will be replaced with a new record. If update_only is +true+ the existing
405
- # record will be modified regardless of whether an <tt>:id</tt> is provided.
406
- #
407
- # If the given attributes include a matching <tt>:id</tt> attribute, or
408
- # update_only is true, and a <tt>:_destroy</tt> key set to a truthy value,
409
- # then the existing record will be marked for destruction.
410
- def assign_nested_attributes_for_one_to_one_association(association_name, attributes)
411
- if attributes.respond_to?(:permitted?)
412
- attributes = attributes.to_h
413
- end
414
- attributes = attributes.with_indifferent_access
415
- existing_record = send(association_name)
393
+ # Attribute hash keys that should not be assigned as normal attributes.
394
+ # These hash keys are nested attributes implementation details.
395
+ UNASSIGNABLE_KEYS = %w( _destroy )
416
396
 
417
- if reject_new_record?(association_name, attributes)
418
- send("#{association_name}=", nil)
419
- else
420
- assignable_attributes = attributes.except(*UNASSIGNABLE_KEYS)
397
+ # Assigns the given attributes to the association.
398
+ #
399
+ # If an associated record does not yet exist, one will be instantiated. If
400
+ # an associated record already exists, the method's behavior depends on
401
+ # the value of the update_only option. If update_only is +false+ and the
402
+ # given attributes include an <tt>:id</tt> that matches the existing record's
403
+ # id, then the existing record will be modified. If no <tt>:id</tt> is provided
404
+ # it will be replaced with a new record. If update_only is +true+ the existing
405
+ # record will be modified regardless of whether an <tt>:id</tt> is provided.
406
+ #
407
+ # If the given attributes include a matching <tt>:id</tt> attribute, or
408
+ # update_only is true, and a <tt>:_destroy</tt> key set to a truthy value,
409
+ # then the existing record will be marked for destruction.
410
+ def assign_nested_attributes_for_one_to_one_association(association_name, attributes)
411
+ if attributes.respond_to?(:permitted?)
412
+ attributes = attributes.to_h
413
+ end
414
+ attributes = attributes.with_indifferent_access
415
+ existing_record = send(association_name)
421
416
 
422
- if existing_record
423
- existing_record.assign_attributes(assignable_attributes)
417
+ if reject_new_record?(association_name, attributes)
418
+ send("#{association_name}=", nil)
424
419
  else
425
- method = "build_#{association_name}"
426
- if respond_to?(method)
427
- send(method, assignable_attributes)
420
+ assignable_attributes = attributes.except(*UNASSIGNABLE_KEYS)
421
+
422
+ if existing_record
423
+ existing_record.assign_attributes(assignable_attributes)
428
424
  else
429
- raise ArgumentError, "Cannot build association `#{association_name}'. Are you trying to build a polymorphic one-to-one association?"
425
+ method = "build_#{association_name}"
426
+ if respond_to?(method)
427
+ send(method, assignable_attributes)
428
+ else
429
+ raise ArgumentError, "Cannot build association `#{association_name}'. Are you trying to build a polymorphic one-to-one association?"
430
+ end
430
431
  end
431
432
  end
432
433
  end
433
- end
434
434
 
435
- # Assigns the given attributes to the collection association.
436
- #
437
- # Hashes with an <tt>:id</tt> value matching an existing associated record
438
- # will update that record. Hashes without an <tt>:id</tt> value will build
439
- # a new record for the association. Hashes with a matching <tt>:id</tt>
440
- # value and a <tt>:_destroy</tt> key set to a truthy value will mark the
441
- # matched record for destruction.
442
- #
443
- # For example:
444
- #
445
- # assign_nested_attributes_for_collection_association(:people, {
446
- # '1' => { id: '1', name: 'Peter' },
447
- # '2' => { name: 'John' },
448
- # '3' => { id: '2', _destroy: true }
449
- # })
450
- #
451
- # Will update the name of the Person with ID 1, build a new associated
452
- # person with the name 'John', and mark the associated Person with ID 2
453
- # for destruction.
454
- #
455
- # Also accepts an Array of attribute hashes:
456
- #
457
- # assign_nested_attributes_for_collection_association(:people, [
458
- # { id: '1', name: 'Peter' },
459
- # { name: 'John' },
460
- # { id: '2', _destroy: true }
461
- # ])
462
- def assign_nested_attributes_for_collection_association(association_name, attributes_collection)
463
- options = nested_attributes_options[association_name]
464
- if attributes_collection.respond_to?(:permitted?)
465
- attributes_collection = attributes_collection.to_h
466
- end
435
+ # Assigns the given attributes to the collection association.
436
+ #
437
+ # Hashes with an <tt>:id</tt> value matching an existing associated record
438
+ # will update that record. Hashes without an <tt>:id</tt> value will build
439
+ # a new record for the association. Hashes with a matching <tt>:id</tt>
440
+ # value and a <tt>:_destroy</tt> key set to a truthy value will mark the
441
+ # matched record for destruction.
442
+ #
443
+ # For example:
444
+ #
445
+ # assign_nested_attributes_for_collection_association(:people, {
446
+ # '1' => { id: '1', name: 'Peter' },
447
+ # '2' => { name: 'John' },
448
+ # '3' => { id: '2', _destroy: true }
449
+ # })
450
+ #
451
+ # Will update the name of the Person with ID 1, build a new associated
452
+ # person with the name 'John', and mark the associated Person with ID 2
453
+ # for destruction.
454
+ #
455
+ # Also accepts an Array of attribute hashes:
456
+ #
457
+ # assign_nested_attributes_for_collection_association(:people, [
458
+ # { id: '1', name: 'Peter' },
459
+ # { name: 'John' },
460
+ # { id: '2', _destroy: true }
461
+ # ])
462
+ def assign_nested_attributes_for_collection_association(association_name, attributes_collection)
463
+ options = nested_attributes_options[association_name]
464
+ if attributes_collection.respond_to?(:permitted?)
465
+ attributes_collection = attributes_collection.to_h
466
+ end
467
467
 
468
- unless attributes_collection.is_a?(Hash) || attributes_collection.is_a?(Array)
469
- raise ArgumentError, "Hash or Array expected, got #{attributes_collection.class.name} (#{attributes_collection.inspect})"
470
- end
468
+ unless attributes_collection.is_a?(Hash) || attributes_collection.is_a?(Array)
469
+ raise ArgumentError, "Hash or Array expected, got #{attributes_collection.class.name} (#{attributes_collection.inspect})"
470
+ end
471
471
 
472
- check_record_limit!(options[:limit], attributes_collection)
472
+ check_record_limit!(options[:limit], attributes_collection)
473
473
 
474
- if attributes_collection.is_a? Hash
475
- attributes_collection = attributes_collection.values
476
- end
474
+ if attributes_collection.is_a? Hash
475
+ attributes_collection = attributes_collection.values
476
+ end
477
477
 
478
- association = association(association_name)
478
+ association = association(association_name)
479
479
 
480
- association.delete_all
480
+ association.delete_all
481
481
 
482
- attributes_collection.each do |attributes|
483
- if attributes.respond_to?(:permitted?)
484
- attributes = attributes.to_h
485
- end
486
- attributes = attributes.with_indifferent_access
482
+ attributes_collection.each do |attributes|
483
+ if attributes.respond_to?(:permitted?)
484
+ attributes = attributes.to_h
485
+ end
486
+ attributes = attributes.with_indifferent_access
487
487
 
488
- unless reject_new_record?(association_name, attributes)
489
- association.build(attributes.except(*UNASSIGNABLE_KEYS))
488
+ unless reject_new_record?(association_name, attributes)
489
+ association.build(attributes.except(*UNASSIGNABLE_KEYS))
490
+ end
490
491
  end
491
492
  end
492
- end
493
493
 
494
- # Takes in a limit and checks if the attributes_collection has too many
495
- # records. It accepts limit in the form of symbol, proc, or
496
- # number-like object (anything that can be compared with an integer).
497
- #
498
- # Raises TooManyRecords error if the attributes_collection is
499
- # larger than the limit.
500
- def check_record_limit!(limit, attributes_collection)
501
- if limit
502
- limit = \
503
- case limit
504
- when Symbol
505
- send(limit)
506
- when Proc
507
- limit.call
508
- else
509
- limit
494
+ # Takes in a limit and checks if the attributes_collection has too many
495
+ # records. It accepts limit in the form of symbol, proc, or
496
+ # number-like object (anything that can be compared with an integer).
497
+ #
498
+ # Raises TooManyRecords error if the attributes_collection is
499
+ # larger than the limit.
500
+ def check_record_limit!(limit, attributes_collection)
501
+ if limit
502
+ limit = \
503
+ case limit
504
+ when Symbol
505
+ send(limit)
506
+ when Proc
507
+ limit.call
508
+ else
509
+ limit
510
+ end
511
+
512
+ if limit && attributes_collection.size > limit
513
+ raise TooManyRecords, "Maximum #{limit} records are allowed. Got #{attributes_collection.size} records instead."
510
514
  end
511
-
512
- if limit && attributes_collection.size > limit
513
- raise TooManyRecords, "Maximum #{limit} records are allowed. Got #{attributes_collection.size} records instead."
514
515
  end
515
516
  end
516
- end
517
-
518
- # Determines if a hash contains a truthy _destroy key.
519
- def has_destroy_flag?(hash)
520
- Type::Boolean.new.cast(hash["_destroy"])
521
- end
522
517
 
523
- # Determines if a new record should be rejected by checking
524
- # has_destroy_flag? or if a <tt>:reject_if</tt> proc exists for this
525
- # association and evaluates to +true+.
526
- def reject_new_record?(association_name, attributes)
527
- will_be_destroyed?(association_name, attributes) || call_reject_if(association_name, attributes)
528
- end
518
+ # Determines if a hash contains a truthy _destroy key.
519
+ def has_destroy_flag?(hash)
520
+ Type::Boolean.new.cast(hash["_destroy"])
521
+ end
529
522
 
530
- # Determines if a record with the particular +attributes+ should be
531
- # rejected by calling the reject_if Symbol or Proc (if defined).
532
- # The reject_if option is defined by +accepts_nested_attributes_for+.
533
- #
534
- # Returns false if there is a +destroy_flag+ on the attributes.
535
- def call_reject_if(association_name, attributes)
536
- return false if will_be_destroyed?(association_name, attributes)
523
+ # Determines if a new record should be rejected by checking
524
+ # has_destroy_flag? or if a <tt>:reject_if</tt> proc exists for this
525
+ # association and evaluates to +true+.
526
+ def reject_new_record?(association_name, attributes)
527
+ will_be_destroyed?(association_name, attributes) || call_reject_if(association_name, attributes)
528
+ end
537
529
 
538
- case callback = nested_attributes_options[association_name][:reject_if]
539
- when Symbol
540
- method(callback).arity == 0 ? send(callback) : send(callback, attributes)
541
- when Proc
542
- callback.call(attributes)
530
+ # Determines if a record with the particular +attributes+ should be
531
+ # rejected by calling the reject_if Symbol or Proc (if defined).
532
+ # The reject_if option is defined by +accepts_nested_attributes_for+.
533
+ #
534
+ # Returns false if there is a +destroy_flag+ on the attributes.
535
+ def call_reject_if(association_name, attributes)
536
+ return false if will_be_destroyed?(association_name, attributes)
537
+
538
+ case callback = nested_attributes_options[association_name][:reject_if]
539
+ when Symbol
540
+ method(callback).arity == 0 ? send(callback) : send(callback, attributes)
541
+ when Proc
542
+ callback.call(attributes)
543
+ end
543
544
  end
544
- end
545
545
 
546
- # Only take into account the destroy flag if <tt>:allow_destroy</tt> is true
547
- def will_be_destroyed?(association_name, attributes)
548
- allow_destroy?(association_name) && has_destroy_flag?(attributes)
549
- end
546
+ # Only take into account the destroy flag if <tt>:allow_destroy</tt> is true
547
+ def will_be_destroyed?(association_name, attributes)
548
+ allow_destroy?(association_name) && has_destroy_flag?(attributes)
549
+ end
550
550
 
551
- def allow_destroy?(association_name)
552
- nested_attributes_options[association_name][:allow_destroy]
553
- end
551
+ def allow_destroy?(association_name)
552
+ nested_attributes_options[association_name][:allow_destroy]
553
+ end
554
554
  end
555
555
  end
@@ -175,9 +175,9 @@ module DuckRecord
175
175
 
176
176
  private
177
177
 
178
- def derive_class_name
179
- name.to_s.camelize
180
- end
178
+ def derive_class_name
179
+ name.to_s.camelize
180
+ end
181
181
  end
182
182
 
183
183
  # Holds all the metadata about an association as it was specified in the
@@ -269,21 +269,21 @@ module DuckRecord
269
269
 
270
270
  protected
271
271
 
272
- def actual_source_reflection # FIXME: this is a horrible name
273
- self
274
- end
272
+ def actual_source_reflection # FIXME: this is a horrible name
273
+ self
274
+ end
275
275
 
276
276
  private
277
277
 
278
- def calculate_constructable(macro, options)
279
- true
280
- end
278
+ def calculate_constructable(macro, options)
279
+ true
280
+ end
281
281
 
282
- def derive_class_name
283
- class_name = name.to_s
284
- class_name = class_name.singularize if collection?
285
- class_name.camelize
286
- end
282
+ def derive_class_name
283
+ class_name = name.to_s
284
+ class_name = class_name.singularize if collection?
285
+ class_name.camelize
286
+ end
287
287
  end
288
288
 
289
289
  class HasManyReflection < AssociationReflection # :nodoc:
@@ -24,13 +24,13 @@ module DuckRecord
24
24
 
25
25
  private
26
26
 
27
- def type_cast_array(value, method)
28
- if value.is_a?(::Array)
29
- value.map { |item| type_cast_array(item, method) }
30
- else
31
- @subtype.public_send(method, value)
27
+ def type_cast_array(value, method)
28
+ if value.is_a?(::Array)
29
+ value.map { |item| type_cast_array(item, method) }
30
+ else
31
+ @subtype.public_send(method, value)
32
+ end
32
33
  end
33
- end
34
34
  end
35
35
  end
36
36
  end
@@ -1,4 +1,4 @@
1
- require 'active_model/type/registry'
1
+ require "active_model/type/registry"
2
2
 
3
3
  module DuckRecord
4
4
  # :stopdoc:
@@ -10,15 +10,15 @@ module DuckRecord
10
10
 
11
11
  private
12
12
 
13
- def registration_klass
14
- Registration
15
- end
13
+ def registration_klass
14
+ Registration
15
+ end
16
16
 
17
- def find_registration(symbol, *args)
18
- registrations
19
- .select { |registration| registration.matches?(symbol, *args) }
20
- .max
21
- end
17
+ def find_registration(symbol, *args)
18
+ registrations
19
+ .select { |registration| registration.matches?(symbol, *args) }
20
+ .max
21
+ end
22
22
  end
23
23
 
24
24
  class Registration
@@ -48,15 +48,15 @@ module DuckRecord
48
48
  # Workaround for Ruby 2.2 "private attribute?" warning.
49
49
  protected
50
50
 
51
- attr_reader :name, :block, :override
51
+ attr_reader :name, :block, :override
52
52
 
53
- def priority
54
- result = 0
55
- if override
56
- result |= 1
53
+ def priority
54
+ result = 0
55
+ if override
56
+ result |= 1
57
+ end
58
+ result
57
59
  end
58
- result
59
- end
60
60
  end
61
61
 
62
62
  class DecorationRegistration < Registration
@@ -82,15 +82,15 @@ module DuckRecord
82
82
  # Workaround for Ruby 2.2 "private attribute?" warning.
83
83
  protected
84
84
 
85
- attr_reader :options, :klass
85
+ attr_reader :options, :klass
86
86
 
87
87
  private
88
88
 
89
- def matches_options?(**kwargs)
90
- options.all? do |key, value|
91
- kwargs[key] == value
89
+ def matches_options?(**kwargs)
90
+ options.all? do |key, value|
91
+ kwargs[key] == value
92
+ end
92
93
  end
93
- end
94
94
  end
95
95
  end
96
96
  # :startdoc:
@@ -43,21 +43,21 @@ module DuckRecord
43
43
 
44
44
  def assert_valid_value(value)
45
45
  if coder.respond_to?(:assert_valid_value)
46
- coder.assert_valid_value(value, action: 'serialize')
46
+ coder.assert_valid_value(value, action: "serialize")
47
47
  end
48
48
  end
49
49
 
50
50
  private
51
51
 
52
- def default_value?(value)
53
- value == coder.load(nil)
54
- end
52
+ def default_value?(value)
53
+ value == coder.load(nil)
54
+ end
55
55
 
56
- def encoded(value)
57
- unless default_value?(value)
58
- coder.dump(value)
56
+ def encoded(value)
57
+ unless default_value?(value)
58
+ coder.dump(value)
59
+ end
59
60
  end
60
- end
61
61
  end
62
62
  end
63
63
  end
@@ -17,4 +17,3 @@ module DuckRecord
17
17
  end
18
18
  end
19
19
  end
20
-
@@ -3,13 +3,13 @@ module DuckRecord
3
3
  class UnsignedInteger < ActiveModel::Type::Integer # :nodoc:
4
4
  private
5
5
 
6
- def max_value
7
- super * 2
8
- end
6
+ def max_value
7
+ super * 2
8
+ end
9
9
 
10
- def min_value
11
- 0
12
- end
10
+ def min_value
11
+ 0
12
+ end
13
13
  end
14
14
  end
15
15
  end
@@ -1,17 +1,21 @@
1
- require 'active_model/type'
1
+ require "active_model/type"
2
2
 
3
- require 'duck_record/type/internal/abstract_json'
4
- require 'duck_record/type/internal/timezone'
3
+ require "duck_record/type/internal/abstract_json"
4
+ require "duck_record/type/internal/timezone"
5
5
 
6
- require 'duck_record/type/date'
7
- require 'duck_record/type/date_time'
8
- require 'duck_record/type/time'
9
- require 'duck_record/type/json'
6
+ require "duck_record/type/date"
7
+ require "duck_record/type/date_time"
8
+ require "duck_record/type/time"
9
+ require "duck_record/type/json"
10
10
 
11
- require 'duck_record/type/array'
11
+ require "duck_record/type/array"
12
12
 
13
- require 'duck_record/type/serialized'
14
- require 'duck_record/type/registry'
13
+ require "duck_record/type/unsigned_integer"
14
+ require "duck_record/type/decimal_without_scale"
15
+ require "duck_record/type/text"
16
+
17
+ require "duck_record/type/serialized"
18
+ require "duck_record/type/registry"
15
19
 
16
20
  module DuckRecord
17
21
  module Type
@@ -43,15 +47,13 @@ module DuckRecord
43
47
  Binary = ActiveModel::Type::Binary
44
48
  Boolean = ActiveModel::Type::Boolean
45
49
  Decimal = ActiveModel::Type::Decimal
46
- DecimalWithoutScale = ActiveModel::Type::DecimalWithoutScale
47
50
  Float = ActiveModel::Type::Float
48
51
  Integer = ActiveModel::Type::Integer
49
52
  String = ActiveModel::Type::String
50
- Text = ActiveModel::Type::Text
51
- UnsignedInteger = ActiveModel::Type::UnsignedInteger
52
53
  Value = ActiveModel::Type::Value
53
54
 
54
55
  register(:big_integer, Type::BigInteger, override: false)
56
+ register(:decimal_without_scale)
55
57
  register(:binary, Type::Binary, override: false)
56
58
  register(:boolean, Type::Boolean, override: false)
57
59
  register(:date, Type::Date, override: false)
@@ -64,6 +66,6 @@ module DuckRecord
64
66
  register(:time, Type::Time, override: false)
65
67
  register(:json, Type::JSON, override: false)
66
68
 
67
- add_modifier({array: true}, Type::Array)
69
+ add_modifier({ array: true }, Type::Array)
68
70
  end
69
71
  end