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