class SmsValidation::Sms
Constants
- ILLEGAL_CHARACTERS
- LEGAL_CHARACTERS
- MAX_LENGTH
- MAX_SECTION_LENGTH
- MESSAGE_WHEN_SPLIT_MESSAGE
Attributes
messages[R]
phone[R]
Public Class Methods
new(phone, message)
click to toggle source
# File lib/sms_validation/sms.rb, line 17 def initialize(phone, message) phone = phone.to_s raise InvalidPhoneNumberError, "Phone number must be ten digits" unless /\A[0-9]{10}\z/.match(phone) raise InvalidPhoneNumberError, "Phone number cannot begin with a \"#{phone[0]}\"" if ['0','1'].include?(phone[0].to_s) raise InvalidMessageError, "Message cannot be blank" if message.empty? SmsValidation.configuration.logger.warn { "WARNING: Some characters may be lost because the message must be broken into at least 1000 sections" } if message.size > (999 * MAX_SECTION_LENGTH) illegal_characters = message.scan(ILLEGAL_CHARACTERS).to_a raise InvalidMessageError, "Message cannot contain the following special characters: #{illegal_characters.uniq.join(', ')}" unless illegal_characters.size.zero? @messages = (message.size > MAX_LENGTH) ? SmsValidation::Sms.__send__(SmsValidation.configuration.on_message_too_long, message) : [message.dup] @phone = "1#{phone}" end
raise_error(message)
click to toggle source
# File lib/sms_validation/sms.rb, line 37 def raise_error(message) raise MessageTooLongError, "Message cannot be longer than #{MAX_LENGTH} characters" end
section_counter(size)
click to toggle source
# File lib/sms_validation/sms.rb, line 47 def section_counter(size) size / MAX_SECTION_LENGTH + ((size % MAX_SECTION_LENGTH).zero? ? 0 : 1) end
split(message)
click to toggle source
# File lib/sms_validation/sms.rb, line 51 def split(message) sections = section_counter(message.size) SmsValidation.log { "Splitting message into #{sections} messages due to length." } split_message = (sections - 1).times.collect do |i| first_char = i * MAX_SECTION_LENGTH SmsValidation.log { "Section ##{i + 1} of ##{sections} contains characters #{first_char + 1} thru #{first_char + MAX_SECTION_LENGTH} of #{message.size}" } "(MSG #{i+1}/#{sections}): #{message[first_char, MAX_SECTION_LENGTH]}" end first_char = (sections-1)*MAX_SECTION_LENGTH SmsValidation.log { "Section ##{sections} of ##{sections} contains characters #{first_char + 1} thru #{message.size} of #{message.size}" } split_message << "(MSG #{sections}/#{sections}): #{message[first_char..-1]}" end
truncate(message)
click to toggle source
# File lib/sms_validation/sms.rb, line 41 def truncate(message) truncated_message = message[0,MAX_LENGTH] SmsValidation.log { "Truncating message due to length. Message was: \"#{message}\" but will now be \"#{truncated_message}\"" } [truncated_message] end
Public Instance Methods
message()
click to toggle source
# File lib/sms_validation/sms.rb, line 29 def message @message ||= begin raise StandardError, MESSAGE_WHEN_SPLIT_MESSAGE unless 1 == messages.size messages.first end end