class AdManagerApi::PQLValues

Values class used by StatementBuilder.

Constants

VALUE_TYPES

Public Class Methods

new(values = {}) click to toggle source

Create a new values object.

# File lib/ad_manager_api/pql_statement_utils.rb, line 55
def initialize(values = {})
  @values = values || {}
end

Public Instance Methods

add_value(key, value) click to toggle source

Add a value to the current values object on the provided key.

# File lib/ad_manager_api/pql_statement_utils.rb, line 60
def add_value(key, value)
  @values[key.to_sym] = generate_value_object(value)
end
generate_value_object(value) click to toggle source

Create an individual value object by inferring the xsi_type. If the value type isn't recognized, return the original value parameter.

# File lib/ad_manager_api/pql_statement_utils.rb, line 93
def generate_value_object(value)
  typeKeyValue = VALUE_TYPES.find {|key, val| value.is_a? key}
  dateTypes = [AdManagerApi::AdManagerDate, AdManagerApi::AdManagerDateTime]
  if dateTypes.include?(value.class)
    value = value.to_h
  end
  return value if typeKeyValue.nil?
  return {:xsi_type => typeKeyValue.last, :value => value}
end
values() click to toggle source

Get values as an array, the format the Ad Manager API expects.

# File lib/ad_manager_api/pql_statement_utils.rb, line 65
def values()
  # values_array is an Ad-Manager-compliant list of values of the following
  # form: [:key => ..., :value => {:xsi_type => ..., :value => ...}]
  values_array = @values.map do |key, value|
    raise 'Missing value in StatementBuilder.' if value.nil?
    raise 'Misconfigured value in StatementBuilder.' unless value.is_a? Hash
    raise 'Value cannot be nil on StatementBuilder.' if value[:value].nil?
    raise 'Missing value type for %s.' % key if value[:xsi_type].nil?
    unless VALUE_TYPES.values.include?(value[:xsi_type])
      raise 'Unknown value type for %s.' % key
    end
    if value[:xsi_type] == 'SetValue'
      if value[:value].map {|v| v.class}.to_set.size > 1
        raise 'Cannot pass more than one type in set variable, %s.' % key
      end
    end
    if value[:xsi_type] == 'DateTimeValue'
      unless value[:value][:time_zone_id]
        raise 'Missing timezone on DateTimeValue variable, %s.' %key
      end
    end
    {:key => key.to_s(), :value => value}
  end
  return values_array
end