Sha256: 4090a4d89c044ce563a2b43aa80398521fb3a881c0907dd917eb7b6675a0e974

Contents?: true

Size: 1.41 KB

Versions: 12

Compression:

Stored size: 1.41 KB

Contents

module Klaviyo
  module Resource
    KlaviyoObject = Struct.new(:attrs) do
      def method_missing(method_name, *arguments, &block)
        if attrs.key?(method_name.to_s) || attrs.key?("$#{method_name}")
          attr_value = attrs[method_name.to_s] || attrs["$#{method_name}"]
          if attr_value.is_a?(Hash) &&
             attr_value.key?('object') && attr_value.key?('id')
            attrs[method_name.to_s] = Klaviyo::Resource.build(attr_value)
          else
            attr_value
          end
        else
          super
        end
      end
    end

    class KlaviyoCollection
      include Enumerable

      attr_reader :meta, :items

      def initialize(data)
        @items = data.delete('data').map { |attrs| Klaviyo::Resource.build(attrs) }
        @meta = data
      end

      def each(&blk)
        item.each(&blk)
      end
    end

    class Person < KlaviyoObject; end
    class List < KlaviyoObject; end
    class Folder < KlaviyoObject; end
    class Membership < KlaviyoObject; end

    def self.build(attrs)

      object = attrs.delete('object')
      case object.to_s
      when 'person'
        Person.new(attrs)
      when 'list'
        List.new(attrs)
      when 'folder'
        Folder.new(attrs)
      when 'membership'
        Membership.new(attrs)
      else
        KlaviyoObject.new(attrs)
      end

    end

    def self.build_collection(data)
      KlaviyoCollection.new(data)
    end

  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
parallel588-klaviyo-0.14.5 lib/klaviyo/resource.rb
parallel588-klaviyo-0.14.4 lib/klaviyo/resource.rb
parallel588-klaviyo-0.14.3 lib/klaviyo/resource.rb
parallel588-klaviyo-0.14.2 lib/klaviyo/resource.rb
parallel588-klaviyo-0.14.1 lib/klaviyo/resource.rb
parallel588-klaviyo-0.14.0 lib/klaviyo/resource.rb
parallel588-klaviyo-0.13.0 lib/klaviyo/resource.rb
parallel588-klaviyo-0.12.0 lib/klaviyo/resource.rb
parallel588-klaviyo-0.11.0 lib/klaviyo/resource.rb
parallel588-klaviyo-0.10.0 lib/klaviyo/resource.rb
parallel588-klaviyo-0.9.0 lib/klaviyo/resource.rb
parallel588-klaviyo-0.8.0 lib/klaviyo/resource.rb