module DueSmsCounter

Constants

VERSION

Public Class Methods

calc_char_and_sms_count(sms) click to toggle source
# File lib/due_sms_counter.rb, line 55
def calc_char_and_sms_count(sms)
  result = calc_char_count(sms)
  result[:sms_count] = calc_sms_count(result[:char_count], result[:is_unicode])
  result
end
calc_char_count(sms) click to toggle source
# File lib/due_sms_counter.rb, line 20
def calc_char_count(sms)
  sms = (sms || '').split('')
  is_7_bits = (sms + B7_CHARS).uniq.length == B7_CHARS.length
  if is_7_bits
    { char_count: sms.length + count_2chars_sized(sms),
      is_unicode: false }
  else
    { char_count: sms.length,
      is_unicode: true }
  end
end
calc_max_char_count(sms_count) click to toggle source
# File lib/due_sms_counter.rb, line 32
def calc_max_char_count(sms_count)
  {
    gsm7: (
      B7_SMS_COUNT[sms_count.to_s] ||
      B7_SMS_COUNT['max']
    )[1],
    unicode: (
      UNICODE_SMS_COUNT[sms_count.to_s] ||
      UNICODE_SMS_COUNT['max']
    )[1]
  }
end
calc_sms_count(char_count, is_unicode) click to toggle source
# File lib/due_sms_counter.rb, line 45
def calc_sms_count(char_count, is_unicode)
  base = is_unicode ? UNICODE_SMS_COUNT : B7_SMS_COUNT
  sms_count = 0
  while 42 do
    break if !base[sms_count.to_s] || (base[sms_count.to_s][1] >= char_count)
    sms_count += 1
  end
  sms_count
end
can_be_sent?(sms, max_sms) click to toggle source
# File lib/due_sms_counter.rb, line 12
def can_be_sent?(sms, max_sms)
  char_count = calc_char_count(sms)
  max_char   = calc_max_char_count(max_sms)
  is_unicode = char_count[:is_unicode]

  char_count[:char_count] <= max_char[is_unicode ? :unicode : :gsm7]
end
count_2chars_sized(sms) click to toggle source
# File lib/due_sms_counter.rb, line 61
def count_2chars_sized(sms)
  sms.reduce(0) do |count, letter|
    count + (B7_2SIZED_CHARS.include?(letter) ? 1 : 0)
  end
end