Sha256: 98a6ab5bfda1f6137ddfbefd53550dc7bbd8feb10adbbadfb7204ef62e53eae9

Contents?: true

Size: 898 Bytes

Versions: 7

Compression:

Stored size: 898 Bytes

Contents

module ForestLiana
  class ResourceDeserializer

    def initialize(resource, params)
      @params = params
      @resource = resource
    end

    def perform
      @attributes = extract_attributes
      extract_relationships

      @attributes
    end

    def extract_attributes
      @params.require(:data).require(:attributes).permit!
    end

    def extract_relationships
      if @params[:data][:relationships]
        @params[:data][:relationships].each do |name, relationship|
          data = relationship[:data]

          if column?(name.foreign_key)
            if data.is_a?(Hash)
              @attributes[name.foreign_key] = data[:id]
            elsif !data
              @attributes[name.foreign_key] = nil
            end
          end
        end
      end
    end

    def column?(attribute)
      @resource.columns.find {|x| x.name == attribute}.present?
    end

  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
forest_liana-1.0.0.beta7 app/deserializers/forest_liana/resource_deserializer.rb
forest_liana-1.0.0.beta6 app/deserializers/forest_liana/resource_deserializer.rb
forest_liana-1.0.0.beta5 app/deserializers/forest_liana/resource_deserializer.rb
forest_liana-1.0.0.pre.beta.4 app/deserializers/forest_liana/resource_deserializer.rb
forest_liana-1.0.0.pre.beta.3 app/deserializers/forest_liana/resource_deserializer.rb
forest_liana-1.0.0.pre.beta.2 app/deserializers/forest_liana/resource_deserializer.rb
forest_liana-1.0.0.pre.beta.1 app/deserializers/forest_liana/resource_deserializer.rb