class TestEmailRedis::Helpers
Public Class Methods
add_email_to_redis(mail)
click to toggle source
# File lib/test_email_redis/helpers.rb, line 27 def self.add_email_to_redis(mail) # user_id = get_user_id_from_mail mail # data = {from: mail.from, to: mail.to, in_reply_to: mail.in_reply_to, parts: []} mail.parts.each do |m| data[:parts] << {body: m.body.to_s} end #$redis.rpush key, data.to_json # generate uid uid = "#{(Time.now.utc.to_f * 1000.0).to_i.to_s}_#{Gexcore::Common.random_string_digits(2)}" $redis.hset redis_key_emails_content, uid, data.to_json # by to_email $redis.rpush redis_key_emails_for_user(user_id), uid end
clean_emails_all()
click to toggle source
# File lib/test_email_redis/helpers.rb, line 55 def self.clean_emails_all $redis.del redis_key_emails_content keys = $redis.keys redis_key_emails_for_email_base+'*' keys.each do |key| $redis.del key end end
clean_emails_for_user(user_id)
click to toggle source
# File lib/test_email_redis/helpers.rb, line 51 def self.clean_emails_for_user(user_id) $redis.del redis_key_emails_for_user(user_id) end
config()
click to toggle source
# File lib/test_email_redis/helpers.rb, line 3 def self.config TestEmailRedis.config end
get_last_email_for_user(user_id, wait=true, opts={})
click to toggle source
# File lib/test_email_redis/helpers.rb, line 113 def self.get_last_email_for_user(user_id, wait=true, opts={}) timeout_secs = opts[:timeout] || 60 # wait if needed ok_wait = true if wait ok_wait = wait_for_new_email_for_user user_id, opts end # no email received return nil unless ok_wait # key = redis_key_emails_for_user(user_id) v = $redis.rpop key # push element back to the list $redis.rpush key, v # get content content = $redis.hget redis_key_emails_content, v # parse data = JSON.parse(content) data end
get_user_id_from_mail(mail)
click to toggle source
# File lib/test_email_redis/helpers.rb, line 8 def self.get_user_id_from_mail(mail) # save to redis field_to_email = TestEmailRedis.field_user_id if field_to_email user_id =mail.send(field_to_email.to_sym) else user_id = mail.to if user_id.is_a? Array user_id = user_id[0] end end user_id end
n_emails_for_user(user_id)
click to toggle source
# File lib/test_email_redis/helpers.rb, line 109 def self.n_emails_for_user(user_id) $redis.llen redis_key_emails_for_user(user_id) end
redis_key_emails_content()
click to toggle source
settings
# File lib/test_email_redis/helpers.rb, line 145 def self.redis_key_emails_content config[:redis_prefix]+":emails:content" end
redis_key_emails_for_email_base()
click to toggle source
# File lib/test_email_redis/helpers.rb, line 149 def self.redis_key_emails_for_email_base config[:redis_prefix]+":emails:by_user:" end
redis_key_emails_for_user(user_id)
click to toggle source
# File lib/test_email_redis/helpers.rb, line 153 def self.redis_key_emails_for_user(user_id) redis_key_emails_for_email_base+user_id.to_s end
wait_for_new_email_for_user(user_id, opts={})
click to toggle source
### get emails
def self.get_last_email v = $redis.rpop redis_key_emails_content return v if v.nil? data = JSON.parse(v) data end
# File lib/test_email_redis/helpers.rb, line 80 def self.wait_for_new_email_for_user(user_id, opts={}) key = redis_key_emails_for_user(user_id) # timeout_secs = opts[:timeout] || 60 n0 = opts[:n_old_emails] || 0 # ok = false n = nil begin timeout timeout_secs do while 1==1 do n = $redis.llen key if n > n0 ok = true break end sleep 1 end end rescue => e end ok end