lib/facebook_ads/ad_objects/server_side/event.rb (222 lines of code) (raw):

# Copyright (c) 2017-present, Facebook, Inc. All rights reserved. # # You are hereby granted a non-exclusive, worldwide, royalty-free license to use, # copy, modify, and distribute this software in source code or binary form for use # in connection with the web services and APIs provided by Facebook. # # As with any software that integrates with the Facebook platform, your use of # this software is subject to the Facebook Platform Policy # [http://developers.facebook.com/policy/]. This copyright notice shall be # included in all copies or substantial portions of the software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS # FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR # COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER # IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN # CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. require_relative './user_data' require_relative './custom_data' module FacebookAds module ServerSide # Server Side Event object. class Event # A Facebook pixel Standard Event or Custom Event name. # This is used with event_id to determine if events are identical. attr_accessor :event_name # A Unix timestamp in seconds indicating when the actual event occurred. attr_accessor :event_time # The browser URL where the event happened. attr_accessor :event_source_url # A flag that indicates we should not use this event for ads delivery optimization. # If set to true, we only use the event for attribution. attr_accessor :opt_out # This ID can be any unique string chosen by the advertiser. # event_id is used to deduplicate events sent by both Facebook Pixel and # Server-Side API. event_name is also used in the deduplication process. # For deduplication, the eventID from Facebook pixel must match the # event_id in the corresponding Server-Side API event. attr_accessor :event_id # An Object that contains user data. attr_accessor :user_data # An Object that includes additional business data about the event. attr_accessor :custom_data # Processing options you would like to enable for a specific event. # For more details see https://developers.facebook.com/docs/marketing-apis/data-processing-options attr_accessor :data_processing_options # A country that you want to associate to this data processing option # For more details see https://developers.facebook.com/docs/marketing-apis/data-processing-options attr_accessor :data_processing_options_country # A state that you want to associate with this data processing option. # For more details see https://developers.facebook.com/docs/marketing-apis/data-processing-options attr_accessor :data_processing_options_state # Where the conversion occurred. attr_accessor :action_source # @param [String] event_name # @param [int] event_time # @param [String] event_source_url # @param [Boolean] opt_out # @param [String] event_id # @param [FacebookAds::ServerSide::UserData] user_data # @param [FacebookAds::ServerSide::CustomData] custom_data # @param [Array<String>] data_processing_options # @param [int] data_processing_options_country # @param [int] data_processing_options_state # @param String action_source def initialize(event_name: nil, event_time: nil, event_source_url: nil, opt_out: nil, event_id: nil, user_data: nil, custom_data: nil, data_processing_options: nil, data_processing_options_country: nil, data_processing_options_state: nil, action_source: nil) unless event_name.nil? self.event_name = event_name end unless event_time.nil? self.event_time = event_time end unless event_source_url.nil? self.event_source_url = event_source_url end unless opt_out.nil? self.opt_out = opt_out end unless event_id.nil? self.event_id = event_id end unless user_data.nil? self.user_data = user_data end unless custom_data.nil? self.custom_data = custom_data end unless data_processing_options.nil? self.data_processing_options = data_processing_options end unless data_processing_options_country.nil? self.data_processing_options_country = data_processing_options_country end unless data_processing_options_state.nil? self.data_processing_options_state = data_processing_options_state end unless action_source.nil? self.action_source = action_source end end # build the object using the input hash # @param [Hash] attributes attributes in the form of hash def build(attributes = {}) return unless attributes.is_a?(Hash) # convert string to symbol for hash key attributes = attributes.each_with_object({}) { |(k, v), h| h[k.to_sym] = v } if attributes.has_key?(:'event_name') self.event_name = attributes[:'event_name'] end if attributes.has_key?(:'event_time') self.event_time = attributes[:'event_time'] end if attributes.has_key?(:'event_source_url') self.event_source_url = attributes[:'event_source_url'] end if attributes.has_key?(:'opt_out') self.opt_out = attributes[:'opt_out'] end if attributes.has_key?(:'event_id') self.event_id = attributes[:'event_id'] end if attributes.has_key?(:'user_data') self.user_data = attributes[:'user_data'] end if attributes.has_key?(:'custom_data') self.custom_data = attributes[:'custom_data'] end if attributes.has_key?(:'data_processing_options') self.data_processing_options = attributes[:'data_processing_options'] end if attributes.has_key?(:'data_processing_options_country') self.data_processing_options_country = attributes[:'data_processing_options_country'] end if attributes.has_key?(:'data_processing_options_state') self.data_processing_options_state = attributes[:'data_processing_options_state'] end if attributes.has_key?(:'action_source') self.action_source = attributes[:'action_source'] end end # Show invalid properties with the reasons. Usually used together with valid? # @return Array for valid properties with the reasons def list_invalid_properties invalid_properties = Array.new if @event_name.nil? invalid_properties.push('invalid value for "event_name", event_name cannot be nil.') end if @event_time.nil? invalid_properties.push('invalid value for "event_time", event_time cannot be nil.') end if @user_data.nil? invalid_properties.push('invalid value for "user_data", user_data cannot be nil.') end invalid_properties end # Check to see if the all the properties in the model are valid # @return true if the model is valid def valid? return false if @event_name.nil? return false if @event_time.nil? return false if @user_data.nil? true end # Checks equality by comparing each attribute. def ==(o) return true if self.equal?(o) self.class == o.class && event_name == o.event_name && event_time == o.event_time && event_source_url == o.event_source_url && opt_out == o.opt_out && event_id == o.event_id && user_data == o.user_data && custom_data == o.custom_data && data_processing_options == o.data_processing_options && data_processing_options_country == o.data_processing_options_country && data_processing_options_state == o.data_processing_options_state && action_source == o.action_source end # @see the `==` method def eql?(o) self == o end # Calculates hash code according to all attributes. # @return [Fixnum] Hash code def hash [ event_name, event_time, event_source_url, opt_out, event_id, user_data, custom_data, data_processing_options, data_processing_options_country, data_processing_options_state, action_source, ].hash end def to_s hash = {} unless event_name.nil? hash['event_name'] = event_name end unless event_time.nil? hash['event_time'] = event_time end unless event_source_url.nil? hash['event_source_url'] = event_source_url end unless opt_out.nil? hash['opt_out'] = opt_out end unless event_id.nil? hash['event_id'] = event_id end unless user_data.nil? hash['user_data'] = user_data.to_s end unless custom_data.nil? hash['custom_data'] = custom_data.to_s end unless data_processing_options.nil? hash['data_processing_options'] = data_processing_options.to_s end unless data_processing_options_country.nil? hash['data_processing_options_country'] = data_processing_options_country.to_s end unless data_processing_options_state.nil? hash['data_processing_options_state'] = data_processing_options_state.to_s end unless action_source.nil? hash['action_source'] = action_source end hash.to_s end # Normalize input fields to server request format. def normalize hash = {} unless event_name.nil? hash['event_name'] = event_name end unless event_time.nil? hash['event_time'] = event_time end unless event_source_url.nil? hash['event_source_url'] = event_source_url end unless opt_out.nil? hash['opt_out'] = opt_out end unless event_id.nil? hash['event_id'] = event_id end unless user_data.nil? hash['user_data'] = user_data.normalize end unless custom_data.nil? hash['custom_data'] = custom_data.normalize end unless data_processing_options.nil? hash['data_processing_options'] = data_processing_options end unless data_processing_options_country.nil? hash['data_processing_options_country'] = data_processing_options_country end unless data_processing_options_state.nil? hash['data_processing_options_state'] = data_processing_options_state end unless action_source.nil? hash['action_source'] = FacebookAds::ServerSide::Util.normalize( action_source, 'action_source' ) end hash end end end end