Class: Abrupt::Transformation::Client::Visit

Inherits:
Base show all
Defined in:
lib/abrupt/transformation/client/visit.rb

Overview

Transformation class for client visit data

Constant Summary

Constants inherited from Base

Base::SCHEMA_MAPPING

Instance Attribute Summary

Attributes inherited from Base

#md5, #parent_uri, #result, #uri, #values

Instance Method Summary collapse

Methods inherited from Base

#add_data_property, #add_individual, #add_object_property, #class_name, customize_to_schema, #initialize, #keyname, #resolve_parent_uri, #resolve_parent_uri_part, #resolve_uri, #resolve_uri_part, set_value

Constructor Details

This class inherits a constructor from Abrupt::Transformation::Base

Instance Method Details

#add_individualsObject



7
8
9
10
11
12
13
14
15
16
17
# File 'lib/abrupt/transformation/client/visit.rb', line 7

def add_individuals
  @values[:name] = @uri.last
  super
  @values.delete :name
  add_visit_duration
  @values.each do |key, value|
    add_property(key, value) if value
  end
  add_individuals_for_view
  @result
end

#add_individuals_for_viewObject



38
39
40
41
42
43
44
45
46
# File 'lib/abrupt/transformation/client/visit.rb', line 38

def add_individuals_for_view
  page_views = @values[:view]
  return unless page_views
  page_views.each do |type, view|
    [view].flatten.each do |attributes|
      add_page_view(type.to_s.capitalize, attributes)
    end
  end
end

#add_page_view(type, attributes) ⇒ Object



48
49
50
51
52
53
54
# File 'lib/abrupt/transformation/client/visit.rb', line 48

def add_page_view(type, attributes)
  time = ::Abrupt.format_time(attributes[:datetime])
  page_view = PageView.new(@parent_uri + @uri,
                           [type, time],
                           attributes)
  @result += page_view.add_individuals
end

#add_property(key, value) ⇒ Object



19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/abrupt/transformation/client/visit.rb', line 19

def add_property(key, value)
  enumerable = value.is_a?(Hash) || value.is_a?(Array)
  return if enumerable # value.is_a?(Enumerable)
  name = case key
         when :uri
           uri = [@parent_uri[1], value].map(&:remove_last_slashes)
           parent_uri_path = (@parent_uri[0..-3] + ['Page', uri.join])
           parent_uri = "#{VOC}#{parent_uri_path.join('/')}"
           # Page hasPageVisit visit
           add_object_property(parent_uri, 'PageVisit', resolve_uri)
           key
         when :size # TODO: transform via customize_to_schema
           'contentlength'
         else
           key
         end
  add_data_property(name, CGI.escape(value))
end

#add_visit_durationObject



56
57
58
59
60
61
62
# File 'lib/abrupt/transformation/client/visit.rb', line 56

def add_visit_duration
  leavetime = Abrupt.parse_time(@values[:leavetime])
  enterteime = Abrupt.parse_time(@values[:entertime])
  return unless leavetime && enterteime # maybe no recognized leavetime
  visit_duration = (leavetime - enterteime).to_f.round(8) # in seconds
  add_data_property('visitDuration', visit_duration) if visit_duration > 0.0
end