Sha256: 040ea15ac48c7088cb5e58af08fd1f2c70533eac7873b3f038fa98ef1c6d8a8e

Contents?: true

Size: 1.86 KB

Versions: 17

Compression:

Stored size: 1.86 KB

Contents

module PgSerializable
  module Visitors
    class Base
      def visit(subject, **kwargs)
        send(visit_method_for(subject), subject, **kwargs)
      end

      def visit_method_for(subject)
        case subject
        when record? then :visit_record
        when class? then :visit_class
        when relation? then :visit_relation
        when trait_manager? then :visit_trait_manager
        when trait? then :visit_trait
        when node? then :visit_node
        else :visit_other
        end
      end

      # activerecord

      def visit_record(subject, **kwargs)
        raise NotImplementedError.new
      end

      def visit_class(subject, **kwargs)
        raise NotImplementedError.new
      end

      def visit_scope(subject, **kwargs)
        raise NotImplementedError.new
      end

      # pg_serializable

      def visit_trait_manager(subject, **kwargs)
        raise NotImplementedError.new
      end

      def visit_trait(subject, **kwargs)
        raise NotImplementedError.new
      end

      def visit_node(subject, **kwargs)
        raise NotImplementedError.new
      end

      # everything else

      def visit_other(subject, **kwargs)
        raise NotImplementedError.new
      end

      private

      def record?
        ->(x) { x.is_a? ApplicationRecord }
      end

      def class?
        ->(x) { x.is_a? Class }
      end

      def relation?
        ->(x) { x.is_a? ActiveRecord::Relation }
      end

      def trait_manager?
        ->(x) { x.is_a? PgSerializable::TraitManager }
      end

      def trait?
        ->(x) { x.is_a? PgSerializable::Trait }
      end

      def node?
        ->(x) { x.is_a? PgSerializable::Nodes::Base }
      end

      def attribute?
        ->(x) { x.is_a? PgSerializable::Nodes::Attribute }
      end

      def association?
        ->(x) { x.is_a? PgSerializable::Nodes::Association }
      end
    end
  end
end

Version data entries

17 entries across 17 versions & 1 rubygems

Version Path
pg_serializable-3.1.0 lib/pg_serializable/visitors/base.rb
pg_serializable-3.0.2 lib/pg_serializable/visitors/base.rb
pg_serializable-3.0.1 lib/pg_serializable/visitors/base.rb
pg_serializable-3.0.0 lib/pg_serializable/visitors/base.rb
pg_serializable-2.1.1 lib/pg_serializable/visitors/base.rb
pg_serializable-2.1.0 lib/pg_serializable/visitors/base.rb
pg_serializable-2.0.0 lib/pg_serializable/visitors/base.rb
pg_serializable-1.4.0 lib/pg_serializable/visitors/base.rb
pg_serializable-1.3.2 lib/pg_serializable/visitors/base.rb
pg_serializable-1.3.1 lib/pg_serializable/visitors/base.rb
pg_serializable-1.3.0 lib/pg_serializable/visitors/base.rb
pg_serializable-1.2.2 lib/pg_serializable/visitors/base.rb
pg_serializable-1.2.1 lib/pg_serializable/visitors/base.rb
pg_serializable-1.2.0 lib/pg_serializable/visitors/base.rb
pg_serializable-1.1.0 lib/pg_serializable/visitors/base.rb
pg_serializable-1.0.1 lib/pg_serializable/visitors/base.rb
pg_serializable-1.0.0 lib/pg_serializable/visitors/base.rb