summaryrefslogtreecommitdiff
path: root/contrib/smsweb/smswsc
diff options
context:
space:
mode:
authorJames Maki <jmaki@multitech.com>2010-05-10 14:26:36 -0500
committerJames Maki <jmaki@multitech.com>2010-05-10 14:26:36 -0500
commit9ba8adf164b316a3d6914b3b187f371f6e19066d (patch)
treecc4579c4141b42ed51cd25a4beb1ae733d8f03ac /contrib/smsweb/smswsc
parent088fee0dd65a2d11dfac58afec8871b3a3cfc376 (diff)
downloadsms-utils-9ba8adf164b316a3d6914b3b187f371f6e19066d.tar.gz
sms-utils-9ba8adf164b316a3d6914b3b187f371f6e19066d.tar.bz2
sms-utils-9ba8adf164b316a3d6914b3b187f371f6e19066d.zip
Add sms web service example0.0.3
Diffstat (limited to 'contrib/smsweb/smswsc')
-rw-r--r--contrib/smsweb/smswsc/builder.rb23
-rw-r--r--contrib/smsweb/smswsc/phonebook_entry.rb56
-rw-r--r--contrib/smsweb/smswsc/sms_message.rb62
-rw-r--r--contrib/smsweb/smswsc/utils.rb63
4 files changed, 204 insertions, 0 deletions
diff --git a/contrib/smsweb/smswsc/builder.rb b/contrib/smsweb/smswsc/builder.rb
new file mode 100644
index 0000000..a6e25a9
--- /dev/null
+++ b/contrib/smsweb/smswsc/builder.rb
@@ -0,0 +1,23 @@
+require 'builder'
+
+module SMSWSC
+ XmlOptions = {
+ :version => "1.0",
+ :encoding => "UTF-8",
+ :indent => 0,
+ }
+
+ def self.new_builder(xml)
+ builder = Builder::XmlMarkup.new(
+ :target => xml,
+ :indent => SMSWSC::XmlOptions[:indent]
+ )
+ builder.instruct!(
+ :xml,
+ :version => SMSWSC::XmlOptions[:version],
+ :encoding => SMSWSC::XmlOptions[:encoding]
+ )
+
+ return builder
+ end
+end
diff --git a/contrib/smsweb/smswsc/phonebook_entry.rb b/contrib/smsweb/smswsc/phonebook_entry.rb
new file mode 100644
index 0000000..ef13bc4
--- /dev/null
+++ b/contrib/smsweb/smswsc/phonebook_entry.rb
@@ -0,0 +1,56 @@
+require 'smswsc/builder'
+require 'rexml/document'
+
+module SMSWSC
+
+ class PhonebookEntry
+ attr_accessor :name
+ attr_accessor :addr_type
+ attr_accessor :addr
+ attr_accessor :uri
+
+ def initialize(options = {})
+ @addr_type = options["addr-type"]
+ @addr = options["addr"]
+ @name = options["name"]
+ end
+
+ def uri=(value)
+ @uri = value
+ end
+
+ def self.load_xml(parent)
+ entry = PhonebookEntry.new
+
+ parent.each_element do |element|
+ case element.name
+ when "addr-type"
+ entry.addr_type = element.text.to_s
+ when "addr"
+ entry.addr = element.text.to_s
+ when "name"
+ entry.name = element.text.to_s
+ when "uri"
+ entry.uri = URI.parse(element.text.to_s)
+ end
+ end
+
+ return entry
+ end
+
+ def to_xml(builder = nil, element = "phonebook-entry")
+ xml = ""
+ unless builder
+ builder = SMSWSC.new_builder(xml)
+ end
+
+ builder.tag!(element.to_s) {
+ builder.tag! "addr-type", @addr_type
+ builder.tag! "addr", @addr
+ builder.tag! "name", @name
+ }
+
+ return xml
+ end
+ end
+end
diff --git a/contrib/smsweb/smswsc/sms_message.rb b/contrib/smsweb/smswsc/sms_message.rb
new file mode 100644
index 0000000..787b58b
--- /dev/null
+++ b/contrib/smsweb/smswsc/sms_message.rb
@@ -0,0 +1,62 @@
+require 'smswsc/builder'
+require 'rexml/document'
+require 'base64'
+
+module SMSWSC
+
+ class SMSMessage
+ attr_accessor :message_status
+ attr_accessor :addr_type
+ attr_accessor :addr
+ attr_accessor :user_data
+ attr_accessor :uri
+
+ def initialize(options = {})
+ @message_status = options["message_status"]
+ @addr_type = options["addr-type"]
+ @addr = options["addr"]
+ @user_data = options["user-data"]
+ end
+
+ def uri=(value)
+ @uri = value
+ end
+
+ def self.load_xml(parent)
+ message = SMSMessage.new
+
+ parent.each_element do |element|
+ case element.name
+ when "message-status"
+ message.message_status = element.text.to_s
+ when "addr-type"
+ message.addr_type = element.text.to_s
+ when "addr"
+ message.addr = element.text.to_s
+ when "user-data"
+ message.user_data = Base64.decode64(element.text.to_s)
+ when "uri"
+ message.uri = URI.parse(element.text.to_s)
+ end
+ end
+
+ return message
+ end
+
+ def to_xml(builder = nil, element = "sms-message")
+ xml = ""
+ unless builder
+ builder = SMSWSC.new_builder(xml)
+ end
+
+ builder.tag!(element.to_s) {
+ builder.tag! "message-status", @message_status
+ builder.tag! "addr-type", @addr_type
+ builder.tag! "addr", @addr
+ builder.tag! "user-data", Base64.encode64(@user_data)
+ }
+
+ return xml
+ end
+ end
+end
diff --git a/contrib/smsweb/smswsc/utils.rb b/contrib/smsweb/smswsc/utils.rb
new file mode 100644
index 0000000..fa07efd
--- /dev/null
+++ b/contrib/smsweb/smswsc/utils.rb
@@ -0,0 +1,63 @@
+require 'cgi'
+
+class Time
+ # try rfc3339
+ # try sql
+ # try rfc822
+ def self.rfcdate(str)
+ if str =~ /\A(\d{4})-(\d{2})-(\d{2})[T ](\d{2})\:(\d{2})\:(\d{2})/
+ return Time.utc($1.to_i, $2.to_i, $3.to_i, $4.to_i, $5.to_i, $6.to_i).localtime
+ elsif str =~ /\A\w{3}, (\d{1,2}) (\w{3}) (\d{4}) (\d{2})\:(\d{2})\:(\d{2})/
+ return Time.utc($3.to_i, $2, $1.to_i, $4.to_i, $5.to_i, $6.to_i).localtime
+ else
+ return nil
+ end
+ end
+end
+
+class Array
+ def urlpath
+ args, atoms = self.flatten.partition { |a| a.is_a?(Hash) }
+ args = args.flatten.inject { |s, v| s.merge!(v) }
+
+ front = atoms.join('/').squeeze('/')
+
+ if args
+ rear = args.inject('?') { |s, (k, v)|
+ s << CGI::escape(k.to_s) + "=" + CGI::escape(v.to_s) + ";"
+ } [0 .. -2]
+
+ front + rear
+ else
+ front
+ end
+ end
+end
+
+module SMSWSC
+ module Utils
+
+ # Assemble a reference from arguments.
+ #
+ # ref("/path", "to", "it", {:q => "test"}) => "/path/to/it?q=test"
+
+ def ref(*atoms)
+ args, atoms = atoms.flatten.partition{|a| a.is_a?(Hash) }
+ args = args.flatten.inject { |s, v| s.merge!(v) }
+
+ front = atoms.join('/').squeeze('/')
+
+ if args
+ rear = args.inject('?') { |s, (k, v)|
+ s << CGI::escape(k.to_s) + "=" + CGI::escape(v.to_s) + ";"
+ } [0 .. -2]
+
+ front + rear
+ else
+ front
+ end
+ end
+ module_function :ref
+
+ end
+end