Class: Rangefinder::SST

Inherits:
Object
  • Object
show all
Defined in:
lib/rangefinder/sst.rb,
lib/rangefinder/sst/version.rb

Constant Summary collapse

DEFAULT_ENDPOINT =
'rangefinderapp.com'
DEFAULT_PORT =
8001
DEFAULT_SCRIPT =
'rangefinderapp.com/track1.js'
VERSION =
"0.0.2"
@@rand =
Proc.new { Kernel.rand 1000000 }

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ SST

Returns a new instance of SST.



22
23
24
25
26
27
28
29
30
31
# File 'lib/rangefinder/sst.rb', line 22

def initialize(opts = {})
  @site_key = opts[:site_key] || ''
  @site_id  = opts[:site_id]  || 0
  @server_id = 0
  @socket = nil
  
  @script = opts[:script] || DEFAULT_SCRIPT
  @endpoint = opts[:endpoint] || DEFAULT_ENDPOINT
  @port = opts[:port] || DEFAULT_PORT
end

Instance Attribute Details

#endpointObject

Returns the value of attribute endpoint.



10
11
12
# File 'lib/rangefinder/sst.rb', line 10

def endpoint
  @endpoint
end

#portObject

Returns the value of attribute port.



10
11
12
# File 'lib/rangefinder/sst.rb', line 10

def port
  @port
end

#scriptObject

Returns the value of attribute script.



10
11
12
# File 'lib/rangefinder/sst.rb', line 10

def script
  @script
end

#server_idObject (readonly)

Returns the value of attribute server_id.



12
13
14
# File 'lib/rangefinder/sst.rb', line 12

def server_id
  @server_id
end

#site_idObject

Returns the value of attribute site_id.



10
11
12
# File 'lib/rangefinder/sst.rb', line 10

def site_id
  @site_id
end

#site_keyObject

Returns the value of attribute site_key.



10
11
12
# File 'lib/rangefinder/sst.rb', line 10

def site_key
  @site_key
end

Class Method Details

.randObject



16
# File 'lib/rangefinder/sst.rb', line 16

def rand; @@rand; end

.rand=(r) ⇒ Object

Change the random server ID generator. eg. Rangefinder::SST.rand = Proc.new { MySpecial.rand }



19
# File 'lib/rangefinder/sst.rb', line 19

def rand=(r) @@rand = r; end

Instance Method Details

#connectObject



54
55
56
57
# File 'lib/rangefinder/sst.rb', line 54

def connect
  @socket = UDPSocket.new
  @socket.connect(@endpoint, @port)
end

#track(visit) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
# File 'lib/rangefinder/sst.rb', line 33

def track(visit)
  connect if @socket.nil?
  
  @id = self.class.rand.call
  packet = 'track:'+Addressable::URI.form_encode(
    :key => @site_key,
    :page => visit[:page],
    :referrer => visit[:referrer],
    :user_agent => visit[:user_agent],
    :ipv4 => visit[:ipv4],
    :time => Time.now.utc.to_i,
    :id => @id
  )+"\n"
  
  if packet.length < 1499
    @socket.send packet, 0
  else
    @id = -2 # Too long
  end
  return @id
end