Class: Eotb

Inherits:
Object
  • Object
show all
Defined in:
lib/eotb.rb

Constant Summary collapse

METHODS =
[:to_actor, :to_subject, :to_json, :to_hash, :inspect]
@@api_key =
nil

Class Method Summary collapse

Class Method Details

._base_register_event(actor, action, subject = {}) ⇒ Object



55
56
57
58
59
60
61
62
63
64
65
66
67
# File 'lib/eotb.rb', line 55

def self._base_register_event(actor, action, subject = {})
  unless ENV['RAILS_ENV'] == 'test'
  action = { "event#{@@counter}[action]" => action.to_s }    
    event = (hash_format(actor, :actor)).merge(action).merge(hash_format(subject, :subject))

    @@events.merge! event
    if (@@counter == @@reset)
      send    
    else
      @@counter += 1
    end
  end
end

._json_register_event(json) ⇒ Object



48
49
50
51
52
53
# File 'lib/eotb.rb', line 48

def self._json_register_event(json)
  json = JSON.parse json
  args = [json["actor"],json["action"]]
  args << json["subject"] if json["subject"]
  self._base_register_event(*args)
end

.api_keyObject



33
34
35
# File 'lib/eotb.rb', line 33

def self.api_key
  @@api_key
end

.configure(api_key) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/eotb.rb', line 13

def self.configure(api_key)
  @@host = "beta.beholder.ragnarson.com"
  @@port = '80'
  @@api_key = api_key
  @@uri = URI.parse('http://' + @@host + ':' + @@port + '/events/' + api_key)
  @@post = Net::HTTP::Post.new(@@uri.path)
  @@events = {}
  @@counter = 1
  @@reset = 100
  
  Thread.new do
    Timer.every(600.0) { |elapsed| 
      unless @@events.empty?
        @@counter = @@reset  
        send
      end
    }
  end unless ENV['RAILS_ENV'] == 'test'
end

.hash_flatten(hash) ⇒ Object



89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/eotb.rb', line 89

def self.hash_flatten(hash)
  hash.inject({}) do |h, (k, v)|
    if v.is_a?(Hash)
      hash_flatten(v).each do |sk, sv|
        h[[k] + sk] = sv
      end
    else
      k = k ? [k] : []
      h[k] = v
    end
    h
  end
end

.hash_format(hash, type) ⇒ Object



103
104
105
106
107
108
109
110
111
112
113
# File 'lib/eotb.rb', line 103

def self.hash_format(hash, type)
  if hash.is_a?(Hash)
    h = hash_flatten(hash).map do |k, v|
      key = k.map{ |e| "[#{e}]" }.join
      "\"event#{@@counter}[#{type}]#{key}\" => #{value_format(v)}"
    end.join(', ')
  else
    h = "\"event#{@@counter}[#{type}]\" => #{value_format(hash)}"
  end
  eval "{#{h.to_s}}"
end

.register_event(*args) ⇒ Object



37
38
39
40
41
42
43
44
45
46
# File 'lib/eotb.rb', line 37

def self.register_event(*args)
  case args.size
    when 1
      self._json_register_event(*args)
    when 2,3
      self._base_register_event(*args)
    else
      raise ArgumentError, "wrong number of arguments (#{args.size} for 1,2 or 3)"
  end
end

.sendObject



69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
# File 'lib/eotb.rb', line 69

def self.send
  @@post.set_form_data(@@events)
  @@counter = 1
  begin
  Timeout::timeout(2) {
    Net::HTTP.new(@@uri.host, @@uri.port).start.request(@@post)
  }
  rescue => e
   	logger = Logger.new("log/#{ENV['RAILS_ENV']}.log")
    logger.error "ERROR eotb gem: " + e.to_s
  rescue Timeout::Error => e
   	logger = Logger.new("log/#{ENV['RAILS_ENV']}.log")
    logger.error "ERROR eotb gem: " + e.to_s
  end
end

.value_format(value) ⇒ Object



85
86
87
# File 'lib/eotb.rb', line 85

def self.value_format(value)
  value.send METHODS.find { |m| m if value.respond_to? m }
end