Class: SmsValidation::Sms
- Inherits:
-
Object
- Object
- SmsValidation::Sms
show all
- Defined in:
- lib/sms_validation/sms.rb
Defined Under Namespace
Classes: InvalidMessageError, InvalidPhoneNumberError, MessageTooLongError
Constant Summary
collapse
- MAX_LENGTH =
160
- MAX_SECTION_LENGTH =
MAX_LENGTH - "(MSG XXX/XXX): ".size
- MESSAGE_WHEN_SPLIT_MESSAGE =
"This message was split because it is too long to fit into a single SMS. Instead of #message, use #messages or change SmsValidation.configuration.on_message_too_long to something other than :split"
- LEGAL_CHARACTERS =
"~\`!\"#\$\%&'\(\)*+,-.\/:;<=>?@_£¤¥§¿i¡ÄÅÃÆÇÉÑÖØÜßâáäåãæçèéìíñòöøóùüú\n\r\t ©"
- ILLEGAL_CHARACTERS =
/([^a-zA-Z0-9#{LEGAL_CHARACTERS}\\])/
Instance Attribute Summary collapse
Class Method Summary
collapse
Instance Method Summary
collapse
Constructor Details
#initialize(phone, message) ⇒ Sms
Returns a new instance of Sms.
17
18
19
20
21
22
23
24
25
26
27
|
# 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
|
Instance Attribute Details
#messages ⇒ Object
Returns the value of attribute messages.
15
16
17
|
# File 'lib/sms_validation/sms.rb', line 15
def messages
@messages
end
|
#phone ⇒ Object
Returns the value of attribute phone.
15
16
17
|
# File 'lib/sms_validation/sms.rb', line 15
def phone
@phone
end
|
Class Method Details
.raise_error(message) ⇒ Object
37
38
39
|
# 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) ⇒ Object
.split(message) ⇒ Object
51
52
53
54
55
56
57
58
59
60
61
62
|
# 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) ⇒ Object
41
42
43
44
45
|
# 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
|
Instance Method Details
#message ⇒ Object
29
30
31
32
33
34
|
# 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
|