lib/punchblock/component/asterisk/agi/command.rb in punchblock-1.9.4 vs lib/punchblock/component/asterisk/agi/command.rb in punchblock-2.0.0.beta1
- old
+ new
@@ -5,144 +5,37 @@
module Asterisk
module AGI
class Command < ComponentNode
register :command, :agi
- def self.new(options = {})
- super().tap do |new_node|
- options.each_pair { |k,v| new_node.send :"#{k}=", v }
- end
- end
+ attribute :name
+ attribute :params, Array, default: []
- def name
- read_attr :name
- end
-
- def name=(other)
- write_attr :name, other
- end
-
- ##
- # @return [Array[String]] array of values of params
- #
- def params_array
- params.map(&:value)
- end
-
- ##
- # @return [Array[Param]] params
- #
- def params
- find('//ns:param', :ns => self.class.registered_ns).map do |i|
- Param.new i
+ def inherit(xml_node)
+ xml_node.xpath('//ns:param', ns: self.class.registered_ns).to_a.each do |param|
+ params << param[:value]
end
+ super
end
- ##
- # @param [Hash, Array] params A hash of key-value param pairs, or an array of Param objects
- #
- def params=(params)
- find('//ns:param', :ns => self.class.registered_ns).each(&:remove)
- [params].flatten.each { |i| self << Param.new(i) } if params.is_a? Array
- end
-
- def inspect_attributes # :nodoc:
- [:name, :params_array] + super
- end
-
- class Param < RayoNode
- ##
- # @param [String] name
- # @param [String] value
- #
- def self.new(value)
- super(:param).tap do |new_node|
- case value
- when Nokogiri::XML::Node
- new_node.inherit value
- else
- new_node.value = value
- end
- end
- end
-
- # The Header's value
- # @return [String]
- def value
- read_attr :value
- end
-
- # Set the Header's value
- # @param [String] value the new value for the param
- def value=(value)
- write_attr :value, value
- end
-
- def inspect_attributes # :nodoc:
- [:value] + super
- end
- end
-
class Complete
class Success < Event::Complete::Reason
register :success, :agi_complete
- def node_with_name(name)
- n = if self.class.registered_ns
- find_first "ns:#{name}", :ns => self.class.registered_ns
- else
- find_first name
- end
+ attribute :code, Integer
+ attribute :result, Integer
+ attribute :data
- unless n
- self << (n = RayoNode.new(name, self.document))
- n.namespace = self.class.registered_ns
+ def inherit(xml_node)
+ [:code, :result, :data].each do |attr|
+ node = xml_node.at_xpath "ns:#{attr}", ns: self.class.registered_ns
+ self.send "#{attr}=", node.text if node
end
- n
+ super
end
-
- def code_node
- node_with_name 'code'
- end
-
- def result_node
- node_with_name 'result'
- end
-
- def data_node
- node_with_name 'data'
- end
-
- def code
- code_node.text.to_i
- end
-
- def code=(other)
- code_node.content = other
- end
-
- def result
- result_node.text.to_i
- end
-
- def result=(other)
- result_node.content = other
- end
-
- def data
- data_node.text
- end
-
- def data=(other)
- data_node.content = other
- end
-
- def inspect_attributes
- [:code, :result, :data]
- end
end
- end # Complete
- end # Command
- end # AGI
- end # Asterisk
- end # Component
-end # Punchblock
+ end
+ end
+ end
+ end
+ end
+end