class GtmOnRails::DataLayer::Ecommerce::Product

Public Class Methods

new(**args) click to toggle source
# File lib/gtm_on_rails/models/data_layer/ecommerce/product.rb, line 4
def initialize(**args)
  raise ArgumentError.new("required either 'id' or 'name', or both.") if args[:id].blank? && args[:name].blank?

  @data = {}

  @data[:id]       = args[:id]       if args[:id].present?
  @data[:name]     = args[:name]     if args[:name].present?
  @data[:brand]    = args[:brand]    if args[:brand].present?
  @data[:variant]  = args[:variant]  if args[:variant].present?
  @data[:price]    = args[:price]    if args[:price].present?
  @data[:quantity] = args[:quantity] if args[:quantity].present?
  @data[:coupon]   = args[:coupon]   if args[:coupon].present?
  @data[:position] = args[:position] if args[:position].present?
  if args[:category].present?
    if args[:category].is_a?(Array)
      raise ArgumentError.new("'category' can be up to 5.") if args[:category].count > 5
      @data[:category] = args[:category].join('/')
    else
      @data[:category] = args[:category]
    end
  end

  # Custom Dimensions
  dimension_keys = args.keys.map(&:to_s).select{|key| key.match(/^dimension[0-9]+/)}.map(&:to_sym)
  dimension_keys.each do |dimension_key|
    @data[dimension_key] = args[dimension_key]
  end

  # Custom Metrics
  metric_keys = args.keys.map(&:to_s).select{|key| key.match(/^metric[0-9]+/)}.map(&:to_sym)
  metric_keys.each do |metric_key|
    @data[metric_key] = args[metric_key]
  end
end

Public Instance Methods

to_js() click to toggle source
# File lib/gtm_on_rails/models/data_layer/ecommerce/product.rb, line 39
def to_js
  to_json
end