Sha256: ed0e426555ddec1f7b2c4820de8145ec36db2d2e00a33d351095890db9e9b748

Contents?: true

Size: 1.95 KB

Versions: 20

Compression:

Stored size: 1.95 KB

Contents

module Scrivito

  class ObjDataFromService < ObjData
    def initialize(data)
      @data = data
    end

    def raw_value_and_type_of(attribute_name)
      if attribute_name == '_widget_pool'
        [value_of_widget_pool, nil]
      else
        type_and_value = @data.fetch(attribute_name, [nil, nil])

        if type_and_value.present?
          type = if type_and_value.length == 1
            type_of_internal(attribute_name)
          else
            type_and_value.last
          end

          [convert_value(type_and_value.first, type), type]
        end
      end
    end

    def has_custom_attribute?(attribute_name)
      is_custom_attribute?(attribute_name) && !!@data[attribute_name]
    end

    def all_attributes
      @all_attributes ||= (@data.keys | INTERNAL_KEYS.to_a)
    end

    def to_h
      @data.dup.tap do |h|
        h.each_pair { |k, v| h[k] = v.first }
      end
    end

    private

    def convert_value(value, type)
      case type
      when "html"
        text_links_conversion.convert(value)
      when "widget"
        if !value
          []
        else
          (value['list'] || []).map do |list_item|
            list_item['widget']
          end
        end
      else
        value
      end
    end

    def text_links_conversion
      @text_links_conversion = TextLinkConversion.new(text_links_map)
    end

    def text_links_map
      text_links = @data["_text_links"]
      return nil unless text_links

      text_links.first.each_with_object({}) do |link, map|
        map[link["link_id"]] = TextLink.new(link)
      end
    end

    def value_of_widget_pool
      raw_value_of_widget_pool.dup.tap do |hash|
        hash.each_pair do |widget_id, raw_widget_data|
          hash[widget_id] = self.class.new(raw_widget_data)
        end
      end
    end

    def raw_value_of_widget_pool
      @data['_widget_pool'].first
    end

    def is_custom_attribute?(attribute_name)
      !internal_attribute?(attribute_name)
    end

  end

end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
scrivito_sdk-0.50.1 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.50.0 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.50.0.rc2 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.50.0.rc1 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.42.1 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.42.1.rc3 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.42.1.rc2 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.42.1.rc1 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.42.0 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.41.1 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.41.0 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.41.0.rc2 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.41.0.rc1 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.40.0 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.40.0.rc2 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.40.0.rc1 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.30.0 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.30.0.rc1 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.18.1 lib/scrivito/obj_data_from_service.rb
scrivito_sdk-0.18.0 lib/scrivito/obj_data_from_service.rb