Sha256: 78a36ec7bcbfa9bbb4b7a00613e02570902d7f48fbda03b1d95263daded1e3f3

Contents?: true

Size: 1.02 KB

Versions: 22

Compression:

Stored size: 1.02 KB

Contents

# frozen_string_literal: true

module Katalyst
  module Content
    module Types
      # Data serialization/deserialization for Katalyst::Content structural data
      class NodesType < ActiveRecord::Type::Json
        def serialize(value)
          super(value.as_json)
        end

        def deserialize(value)
          case value
          when nil
            nil
          when String
            deserialize(super)
          when Hash
            deserialize_params(value)
          when Array
            deserialize_array(value)
          end
        end

        private

        # Deserialize a params-style array, e.g. "0" => { ... }
        def deserialize_params(value)
          value.map do |index, attributes|
            Node.new(index:, **attributes)
          end.select(&:id).sort_by(&:index)
        end

        def deserialize_array(value)
          value.map.with_index do |attributes, index|
            Node.new(index:, **attributes)
          end.select(&:id).sort_by(&:index)
        end
      end
    end
  end
end

Version data entries

22 entries across 22 versions & 1 rubygems

Version Path
katalyst-content-3.0.0.alpha.1 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.8.0 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.7.1 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.7.0 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.6.2 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.6.1 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.6.0 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.5.1 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.5.0 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.4.2 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.4.1 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.3.2 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.3.1 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.3.0 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.2.0 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.1.4 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.1.3 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.1.2 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.1.1 app/models/katalyst/content/types/nodes_type.rb
katalyst-content-2.1.0 app/models/katalyst/content/types/nodes_type.rb