Module: Reactor::WhereQuery

Included in:
Cm::Group, Cm::User
Defined in:
lib/reactor/tools/where_query.rb

Instance Method Summary collapse

Instance Method Details

#where(key, value) ⇒ Object



3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# File 'lib/reactor/tools/where_query.rb', line 3

def where(key, value)
  request = Cm::XmlRequest.prepare do |xml|
    xml.where_tag!(base_name) do
      xml.tag!(key) do
        xml.text!(value) if value
      end
    end

    xml.get_tag!(base_name) do
      attributes.each do |_, xml_attribute|
        xml.tag!(xml_attribute.name)
      end
    end
  end

  response = request.execute!
  result = response.xpath("//#{base_name}")
  result = [result] unless result.is_a?(Array)
  result.map do |elem|
    values = response_handler.multiple(elem, attributes.values)
    instance = new
    values.each do |name, response_value|
      pair = attributes.find { |_n, a| a.name.to_sym == name.to_sym }
      attribute = pair[0]
      instance.send(:"#{attribute}=", response_value)
    end
    instance
  end
rescue Cm::XmlRequestError
  []
end