···11+# frozen_string_literal: true
22+33+module Literal::Rails
44+ module ActiveRecordRelationPatch
55+ def Relation(model)
66+ RelationType.new(model)
77+ end
88+ end
99+end
-32
lib/literal/rails/patches/active_record.rb
···11-# frozen_string_literal: true
22-33-module ActiveRecord
44- class RelationType
55- def initialize(model_class)
66- unless Class === model_class && model_class < ActiveRecord::Base
77- raise Literal::TypeError.new(
88- context: Literal::TypeError::Context.new(
99- expected: ActiveRecord::Base, actual: model_class
1010- )
1111- )
1212- end
1313-1414- @model_class = model_class
1515- end
1616-1717- def inspect = "ActiveRecord::Relation(#{@model_class.name})"
1818-1919- def ===(value)
2020- case value
2121- when ActiveRecord::Relation, ActiveRecord::Associations::CollectionProxy, ActiveRecord::AssociationRelation
2222- @model_class == value.model || value.model < @model_class
2323- else
2424- false
2525- end
2626- end
2727- end
2828-2929- def self.Relation(model)
3030- RelationType.new(model)
3131- end
3232-end
+28
lib/literal/rails/relation_type.rb
···11+# frozen_string_literal: true
22+33+module Literal::Rails
44+ class RelationType
55+ def initialize(model_class)
66+ unless Class === model_class && model_class < ActiveRecord::Base
77+ raise Literal::TypeError.new(
88+ context: Literal::TypeError::Context.new(
99+ expected: ActiveRecord::Base, actual: model_class
1010+ )
1111+ )
1212+ end
1313+1414+ @model_class = model_class
1515+ end
1616+1717+ def inspect = "ActiveRecord::Relation(#{@model_class.name})"
1818+1919+ def ===(value)
2020+ case value
2121+ when ActiveRecord::Relation, ActiveRecord::Associations::CollectionProxy, ActiveRecord::AssociationRelation
2222+ @model_class == value.model || value.model < @model_class
2323+ else
2424+ false
2525+ end
2626+ end
2727+ end
2828+end
+31-4
lib/literal/railtie.rb
···11# frozen_string_literal: true
2233+module Literal::Rails
44+ if defined?(::ActiveJob)
55+ require_relative "rails/enum_serializer"
66+ end
77+88+ if defined?(::ActiveRecord::Relation)
99+ require_relative "rails/relation_type"
1010+ require_relative "rails/active_record_relation_patch"
1111+ ::ActiveRecord.extend(ActiveRecordRelationPatch)
1212+ end
1313+end
1414+315class Literal::Railtie < Rails::Railtie
44- initializer "literal.register_literal_enum_type" do
55- [ActiveRecord::Type, ActiveModel::Type].each do |registry|
66- registry.register(:literal_enum) do |name, type:|
1616+ if defined?(::ActiveModel::Type)
1717+ require_relative "rails/enum_type"
1818+ require_relative "rails/flags_type"
1919+2020+ initializer "literal.register_active_model_types" do
2121+ ActiveModel::Type.register(:literal_enum) do |name, type:|
722 Literal::Rails::EnumType.new(type)
823 end
9241010- registry.register(:literal_flags) do |name, type:|
2525+ ActiveModel::Type.register(:literal_flags) do |name, type:|
1126 Literal::Rails::FlagsType.new(type)
2727+ end
2828+ end
2929+3030+ if defined?(::ActiveRecord::Type)
3131+ initializer "literal.register_active_record_types" do
3232+ ActiveRecord::Type.register(:literal_enum) do |name, type:|
3333+ Literal::Rails::EnumType.new(type)
3434+ end
3535+3636+ ActiveRecord::Type.register(:literal_flags) do |name, type:|
3737+ Literal::Rails::FlagsType.new(type)
3838+ end
1239 end
1340 end
1441 end