Sha256: 53e762c67455d6c906a68b1c471ef8eb844e890a383d48dcf51b150bc05c858e

Contents?: true

Size: 1.22 KB

Versions: 2

Compression:

Stored size: 1.22 KB

Contents

module RockRMS
  module Response
    class Base
      attr_reader :data

      BASE_MAPPING = {
        id: 'Id',
        created_date_time: 'CreatedDateTime',
        modified_date_time: 'ModifiedDateTime',
        attributes: 'Attributes',
        attribute_values: 'AttributeValues'
      }.freeze

      def self.format(data)
        new(data).format
      end

      def initialize(data)
        @data = data
      end

      def format
        if data.is_a?(Array)
          data.map { |item| format_single(item) }
        else
          format_single(data)
        end
      end

      def to_h(dict, data)
        return {} if data.nil?

        dict
          .merge(BASE_MAPPING)
          .each_with_object({}) do |(l, r), object|
            if l == :attributes || l == :attribute_values
              format_klass = l == :attributes ? Attribute : AttributeValue
              object[l] = format_attributes(data[r], format_klass)
            else
              object[l] = data[r]
            end
          end
      end

      def format_attributes(res, klass)
        return res if res.nil?

        res.each_with_object({}) do |(attr, val), object|
          object[attr] = klass.format(val)
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
rock_rms-8.1.0 lib/rock_rms/response/base.rb
rock_rms-8.0.0 lib/rock_rms/response/base.rb