Module: Droid::Utils

Defined in:
lib/droid/utils.rb,
lib/droid/heroku.rb

Class Method Summary collapse

Class Method Details

.create_event_hashObject



28
29
30
31
# File 'lib/droid/utils.rb', line 28

def self.create_event_hash
  s = Time.now.to_s + self.object_id.to_s + rand(100).to_s
  'd' + Digest::MD5.hexdigest(s)
end

.data_summary(json) ⇒ Object



90
91
92
93
94
95
96
97
98
# File 'lib/droid/utils.rb', line 90

def self.data_summary(json)
  return '-> (empty)' if json.empty?
  summary = json.map do |k,v|
    v = v.to_s
    v = v[0..37] + '...' if v.size > 40
    "#{k}=#{v}"
  end.join(', ')
  "-> #{summary}"
end

.extract_custom_headers(hash, opts = {}, popts = {}) ⇒ Object



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

def self.extract_custom_headers(hash, opts={}, popts={})
  popts[:headers] ||= {}
  headers = popts[:headers]

  headers[:published_on] ||= hash.delete('published_on') || opts[:published_on] || Time.now.getgm.to_i
  headers[:ttl] ||= hash.delete('ttl') || (opts[:ttl] || Droid::DEFAULT_TTL).to_i
  headers[:reply_to] ||= opts[:reply_to] if opts[:reply_to]

  # this is the event hash that gets transferred through various publish/reply actions
  headers[:event_hash] ||= hash.delete('event_hash') || opts[:event_hash] || create_event_hash

  # this value should be unique for each published/received message pair
  headers[:message_id] ||= create_event_hash

  # some strange behavior with integers makes it better to
  # convert all amqp headers to strings to avoid any problems
  headers.each { |k,v| headers[k] = v.to_s }

  [hash, headers]
end

.format_data_summary(data, headers) ⇒ Object



100
101
102
# File 'lib/droid/utils.rb', line 100

def self.format_data_summary(data, headers)
  "(data) " + Droid::Utils.data_summary(data) + " (headers) " + Droid::Utils.data_summary(headers)
end

.format_publish(data, opts = {}, popts = {}) ⇒ Object

Raises:



54
55
56
57
58
59
60
61
62
# File 'lib/droid/utils.rb', line 54

def self.format_publish(data, opts={}, popts={})
  raise Droid::BadPayload unless data.is_a?(Hash)

  hash, headers = extract_custom_headers(data, opts, popts)

  popts[:content_type] ||= 'application/json'

  [hash.to_json, popts]
end

.generate_name_for_instance(name) ⇒ Object



69
70
71
# File 'lib/droid/utils.rb', line 69

def self.generate_name_for_instance(name)
  "#{name}.#{Socket.gethostname}"
end

.generate_queue(exchange_name, second_name = nil) ⇒ Object



64
65
66
67
# File 'lib/droid/utils.rb', line 64

def self.generate_queue(exchange_name, second_name=nil)
  second_name ||= $$
  "#{generate_name_for_instance(exchange_name)}.#{second_name}"
end

.generate_reply_to(name) ⇒ Object



73
74
75
# File 'lib/droid/utils.rb', line 73

def self.generate_reply_to(name)
  "temp.reply.#{name}.#{self.generate_sym}"
end

.generate_symObject



77
78
79
80
81
82
83
84
85
86
87
88
# File 'lib/droid/utils.rb', line 77

def self.generate_sym
  values = [
    rand(0x0010000),
    rand(0x0010000),
    rand(0x0010000),
    rand(0x0010000),
    rand(0x0010000),
    rand(0x1000000),
    rand(0x1000000),
  ]
  "%04x%04x%04x%04x%04x%06x%06x" % values
end

.parse_custom_headers(headers) ⇒ Object



15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/droid/utils.rb', line 15

def self.parse_custom_headers(headers)
  return { } unless headers

  h = headers.dup

  h[:published_on] = h[:published_on].to_i

  h[:ttl] = h[:ttl].to_i rescue -1
  h[:ttl] = -1 if h[:ttl] == 0

  h
end

.parse_message(raw) ⇒ Object



10
11
12
13
# File 'lib/droid/utils.rb', line 10

def self.parse_message(raw)
  return { } unless raw
  JSON.parse(raw)
end