Sha256: 0efcd3a9fa730a9430dae572bfa95dc5422a562b046aeb6dbdf468d2422e6db5

Contents?: true

Size: 976 Bytes

Versions: 1

Compression:

Stored size: 976 Bytes

Contents

module RailsLiveDashboard
  module Types
    class JobContent < ActiveRecord::Type::Value
      PAYLOAD =
        %i[
          job_name
          job_id
          params
          status
          queue_name
          started_at
          finished_at
          duration
          db_duration
          error
          history
        ].freeze

      CONTENT_STRUCT = Struct.new(*PAYLOAD)

      def type
        :jsonb
      end

      def cast(value)
        return value if value.is_a?(CONTENT_STRUCT)

        sanitized = sanitize_input(value)
        CONTENT_STRUCT.new(**sanitized)
      end

      def deserialize(value)
        decoded = ActiveSupport::JSON.decode(value)&.symbolize_keys
        sanitized = sanitize_input(decoded)
        CONTENT_STRUCT.new(**sanitized)
      end

      def serialize(value)
        ActiveSupport::JSON.encode(value)
      end

      private

      def sanitize_input(input)
        input.slice(*PAYLOAD)
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
rails_live_dashboard-0.2.0 app/models/rails_live_dashboard/types/job_content.rb