lib/blather/stanza/message.rb in blather-0.3.4 vs lib/blather/stanza/message.rb in blather-0.4.0
- old
+ new
@@ -6,17 +6,29 @@
class Message < Stanza
VALID_TYPES = [:chat, :error, :groupchat, :headline, :normal]
register :message
- def initialize(to = nil, body = nil, type = :chat)
- super()
- self.to = to
- self.type = type
- self.body = body
+ def self.import(node)
+ klass = nil
+ node.children.each { |e| break if klass = class_from_registration(e.element_name, (e.namespace.href if e.namespace)) }
+
+ if klass && klass != self
+ klass.import(node)
+ else
+ new(node[:type]).inherit(node)
+ end
end
+ def self.new(to = nil, body = nil, type = :chat)
+ node = super(:message)
+ node.to = to
+ node.type = type
+ node.body = body
+ node
+ end
+
VALID_TYPES.each do |valid_type|
define_method("#{valid_type}?") { self.type == valid_type }
end
##
@@ -24,35 +36,12 @@
def type=(type)
raise ArgumentError, "Invalid Type (#{type}), use: #{VALID_TYPES*' '}" if type && !VALID_TYPES.include?(type.to_sym)
super
end
- def body=(body)
- remove_child :body
- self << XMPPNode.new('body', body) if body
- end
-
- def body
- content_from :body
- end
-
- def subject=(subject)
- remove_child :subject
- self << XMPPNode.new('subject', subject) if subject
- end
-
- def subject
- content_from :subject
- end
-
- def thread=(thread)
- remove_child :thread
- self << XMPPNode.new('thread', thread) if thread
- end
-
- def thread
- content_from :thread
- end
+ content_attr_accessor :body
+ content_attr_accessor :subject
+ content_attr_accessor :thread
end
end #Stanza
end
\ No newline at end of file