Sha256: 39185a8a063e3323cfabcd0faff9134eb9a1c95a3d3bc27e3500f8cf681fa161

Contents?: true

Size: 1.51 KB

Versions: 42

Compression:

Stored size: 1.51 KB

Contents

module Graphiti
  module Util
    class RemoteSerializer
      def self.for(base, models)
        new(base).generate(models)
      end

      def initialize(base)
        @serializer = ::Class.new(base)
        @serializer.type { @object._type }
      end

      def generate(models)
        models.each do |model|
          model.to_h.each_pair do |key, value|
            if key == :_relationships
              add_relationships(value)
            elsif add_attribute?(model, key)
              @serializer.attribute(key)
            end
          end
        end
        post_process(@serializer, models)
        @serializer
      end

      private

      def add_relationships(relationship_hash)
        relationship_hash.each_pair do |name, reldata|
          @serializer.relationship(name.to_sym)
        end
      end

      def add_attribute?(model, name)
        disallow = [:_type, :id].include?(name)
        pre_existing = @serializer.attribute_blocks[name]
        is_relationship = model._relationships.try(:[], name.to_s)
        !disallow && !pre_existing && !is_relationship
      end

      def post_process(serializer, models)
        models.each do |model|
          model.delete_field(:_relationships)
          # If this isn't set, Array(resources) will return []
          # This is important, because jsonapi-serializable makes this call
          model.instance_variable_set(:@__graphiti_resource, 1)
          model.instance_variable_set(:@__graphiti_serializer, serializer)
        end
      end
    end
  end
end

Version data entries

42 entries across 42 versions & 1 rubygems

Version Path
graphiti-1.2.31 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.30 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.29 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.28 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.27 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.26 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.25 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.21 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.20 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.19 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.18 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.17 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.16 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.15 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.14 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.13 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.12 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.11 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.10 lib/graphiti/util/remote_serializer.rb
graphiti-1.2.9 lib/graphiti/util/remote_serializer.rb