Module: Schlep

Extended by:
Schlep
Included in:
Schlep
Defined in:
lib/schlep.rb,
lib/schlep/version.rb

Constant Summary collapse

VERSION =
"0.5.0"

Instance Attribute Summary collapse

Instance Method Summary collapse

Instance Attribute Details

#redis_urlObject



80
81
82
# File 'lib/schlep.rb', line 80

def redis_url
  @redis_url ||= ENV["REDIS_URL"] or ENV["REDISTOGO_URL"]
end

Instance Method Details

#appObject



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

def app
  @app ||= ""
end

#app=(string) ⇒ Object



16
17
18
# File 'lib/schlep.rb', line 16

def app=(string)
  @app = sanitize string
end

#configure {|_self| ... } ⇒ Object

Yields:

  • (_self)

Yield Parameters:

  • _self (Schlep)

    the object that the method was called on



20
21
22
# File 'lib/schlep.rb', line 20

def configure
  yield self
end

#envelope(type, message, options = {}) ⇒ Object



24
25
26
27
28
29
30
31
32
# File 'lib/schlep.rb', line 24

def envelope(type, message, options = {})
  {
    :timestamp => timestamp,
    :app =>       options[:app]  || app,
    :host =>      options[:host] || host,
    :type =>      type,
    :message =>   serialize_message(message)
  }
end

#event(type, message, options = {}) ⇒ Object



34
35
36
# File 'lib/schlep.rb', line 34

def event(type, message, options = {})
  events type, [message], options
end

#events(type, messages, options = {}) ⇒ Object



38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/schlep.rb', line 38

def events(type, messages, options = {})
  options.keys.each { |k| options[k] = sanitize(options[k]) }

  messages.map! { |message| envelope(type, message, options).to_json }

  suppress_redis_errors do
    redis.pipelined do
      while messages.any?
        redis.rpush key, messages.shift
      end
    end
  end
end

#hostObject



52
53
54
# File 'lib/schlep.rb', line 52

def host
  @host ||= sanitize `hostname`
end

#host=(string) ⇒ Object



56
57
58
# File 'lib/schlep.rb', line 56

def host=(string)
  @host = sanitize string
end

#keyObject



60
61
62
# File 'lib/schlep.rb', line 60

def key
  @key ||= :schlep
end

#redisObject



64
65
66
# File 'lib/schlep.rb', line 64

def redis
  @redis ||= Redis.new redis_options
end

#redis_optionsObject



68
69
70
71
72
73
74
75
76
77
78
# File 'lib/schlep.rb', line 68

def redis_options
  return {} unless redis_url

  parsed_url = URI::parse(redis_url)

  {
    :host     => parsed_url.host,
    :port     => parsed_url.port,
    :password => parsed_url.password
  }
end

#resetObject



84
85
86
87
88
# File 'lib/schlep.rb', line 84

def reset
  %w[app host redis redis_url].each do |ivar|
    instance_variable_set "@#{ivar}", nil
  end
end

#serialize_message(message) ⇒ Object



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

def serialize_message(message)
  return message unless
    message.is_a? String and
    message.match /\{.+\}/

  begin
    JSON.parse message
  rescue JSON::ParserError
    message
  end
end

#timestampObject



102
103
104
# File 'lib/schlep.rb', line 102

def timestamp
  Time.now.to_f
end