aboutsummaryrefslogtreecommitdiffstats
path: root/activerecord/lib/active_record/type/adapter_specific_registry.rb
diff options
context:
space:
mode:
Diffstat (limited to 'activerecord/lib/active_record/type/adapter_specific_registry.rb')
-rw-r--r--activerecord/lib/active_record/type/adapter_specific_registry.rb39
1 files changed, 11 insertions, 28 deletions
diff --git a/activerecord/lib/active_record/type/adapter_specific_registry.rb b/activerecord/lib/active_record/type/adapter_specific_registry.rb
index 5f71b3cb94..3509429058 100644
--- a/activerecord/lib/active_record/type/adapter_specific_registry.rb
+++ b/activerecord/lib/active_record/type/adapter_specific_registry.rb
@@ -1,35 +1,18 @@
+require 'active_model/type/registry'
+
module ActiveRecord
# :stopdoc:
module Type
- class AdapterSpecificRegistry
- def initialize
- @registrations = []
- end
-
- def register(type_name, klass = nil, **options, &block)
- block ||= proc { |_, *args| klass.new(*args) }
- registrations << Registration.new(type_name, block, **options)
- end
-
- def lookup(symbol, *args)
- registration = registrations
- .select { |r| r.matches?(symbol, *args) }
- .max
-
- if registration
- registration.call(self, symbol, *args)
- else
- raise ArgumentError, "Unknown type #{symbol.inspect}"
- end
+ class AdapterSpecificRegistry < ActiveModel::Type::Registry
+ private
+
+ def registration_klass
+ Registration
end
-
- def add_modifier(options, klass, **args)
- registrations << DecorationRegistration.new(options, klass, **args)
+
+ def decoration_registration_klass
+ DecorationRegistration
end
-
- protected
-
- attr_reader :registrations
end
class Registration
@@ -135,7 +118,7 @@ module ActiveRecord
end
end
- class TypeConflictError < StandardError
+ class TypeConflictError < ::ActiveModel::TypeConflictError
end
# :startdoc: