def event!(category_name, event_name, additional_properties = { })
      event_data = effective_properties(category_name, event_name, additional_properties)
      event_data[:properties] = { 'time' => Time.now.to_i }.merge(event_data[:properties])

      self.event_receivers.each do |receiver|
        receiver.track(event_data[:distinct_id], event_data[:external_name], event_data[:properties])
      end
    end
def event!(category_name, event_name, additional_properties = { })
      event_data = effective_properties(category_name, event_name, additional_properties)
      event_data[:properties] = { 'time' => Time.now.to_i }.merge(event_data[:properties])

      self.event_receivers.each do |receiver|
        receiver.track(event_data[:distinct_id], event_data[:external_name], event_data[:properties])
      end
    end
Fires an event. +category_name+ must be the name of a category in the MetaEvents DSL (within the version that this
 Tracker is using -- which is 1 if you haven't changed it); +event_name+ must be the name
 of an event. +additional_properties+, if present, must be a Hash; the properties supplied will be combined with
 any implicit properties defined on this Tracker, and sent along with the event.

 +additional_properties+ can use the sub-hash and object syntax discussed, above, under the introduction to this
 class.