class SmsCtrl::Case

Attributes

errors[RW]
expires_in[RW]
mobile_regexp[RW]
retry_limit[RW]
sender[RW]

Public Class Methods

new(name, options = {}) click to toggle source
# File lib/sms_ctrl/case.rb, line 6
def initialize name, options = {}
  @name = name
  options = SmsCtrl.default_options.merge(options)

  self.retry_limit   = options[:retry_limit]
  self.expires_in    = options[:expires_in]
  self.mobile_regexp = options[:mobile_regexp]
  self.sender        = options[:sender]

  if options[:errors]
    self.errors = SmsCtrl.default_errors.merge(options[:errors])
  else
    self.errors = SmsCtrl.default_errors
  end
end

Public Instance Methods

check_code(mobile, code) click to toggle source

check match

# File lib/sms_ctrl/case.rb, line 66
def check_code mobile, code
  cache_code = SmsCtrl.cache.read(code_cache_key(mobile.to_s))
  return false if cache_code.nil?
  cache_code.to_s == code.to_s
end
code_for(mobile) click to toggle source
# File lib/sms_ctrl/case.rb, line 61
def code_for mobile
  SmsCtrl.cache.read(code_cache_key(mobile.to_s))
end
send_sms(mobile, code, params = {}) click to toggle source
# File lib/sms_ctrl/case.rb, line 22
def send_sms mobile, code, params = {}
  mobile = mobile.to_s

  unless mobile =~ mobile_regexp
    return {
      success: false,
      error: errors[:illegal_mobile],
      error_type: :illegal_mobile
    }
  end

  if retry_limit > 0 && SmsCtrl.cache.read(retry_limit_key(mobile))
    return {
      success: false,
      error: errors[:retry_limit],
      error_type: :retry_limit }
  end

  if SmsCtrl.debug
    code = '123456'
    data = 'debug send ok'
  else
    data = @sender.call(mobile, code, params)
  end

  result = {
    success: true,
    data: data
  }

  if retry_limit > 0
    SmsCtrl.cache.write(retry_limit_key(mobile), 'true', expires_in: retry_limit)
  end

  SmsCtrl.cache.write(code_cache_key(mobile), code, expires_in: expires_in)

  result
end

Private Instance Methods

code_cache_key(mobile) click to toggle source
# File lib/sms_ctrl/case.rb, line 79
def code_cache_key mobile
  "sms_ctrl:#{@name}:code_cache_key:#{mobile}"
end
retry_limit_key(mobile) click to toggle source

keys

# File lib/sms_ctrl/case.rb, line 75
def retry_limit_key mobile
  "sms_ctrl:#{@name}:retry_limit_key:#{mobile}"
end