Module: IfdTools::ApiController::Tracking
- Defined in:
- lib/ifd_tools/api_controller/tracking.rb
Instance Method Summary collapse
-
#batch_track ⇒ Object
Used to record events from the application, more than one at a time, by submitting a request via JSON or XML.
-
#track ⇒ Object
Used to record events from the application.
Instance Method Details
#batch_track ⇒ Object
Used to record events from the application, more than one at a time, by submitting a request via JSON or XML
Example request stucture:
events
event
type product_event
id 14
timestamp 1233452 (optional)
platform mac (optional)
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 |
# File 'lib/ifd_tools/api_controller/tracking.rb', line 52 def batch_track begin @events = params[:events] || [] @events.map(&:symbolize_keys!) @events.each do |event| case event[:type] when "application_event" @event = IfdTools::Tracking::ApplicationEvent.new else @event = "ifd_tools/tracking/#{event[:type]}".camelize.constantize.new @event.assign_trackable_item_by_id(event[:id]) end @event.ip_address = request.remote_ip @event.customer = current_customer @event.platform = event[:platform] || IfdTools::Tracking::Event.platform_for_request(request) @event. = Time.at(event[:timestamp]) || Time.now @event.save! end rescue Exception => e @error = e. render status: :unprocessable_entity end end |
#track ⇒ Object
Used to record events from the application
- trackable_type: ("application_event", "product_event") should be the last part of a model name, ie "IfdTools::Tracking::ProductEvent" => "product_event"
- trackable_id: integer pk (null if trackable_type == "application")
#
10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 |
# File 'lib/ifd_tools/api_controller/tracking.rb', line 10 def track begin unless params[:type].present? && params[:id].present? @error = "Missing 'type' or 'id' parameter" render status: :unprocessable_entity and return end case params[:type] when "application_event" @event = IfdTools::Tracking::ApplicationEvent.new else @event = "ifd_tools/tracking/#{params[:type]}".camelize.constantize.new @event.assign_trackable_item_by_id(params[:id]) end unless @event.nil? @event.ip_address = request.remote_ip @event.customer = current_customer @event.platform = IfdTools::Tracking::Event.platform_for_request(request) @event.save! end rescue Exception => e @error = e. render status: :unprocessable_entity end end |