Method: DataMapper::Persevere::Query#to_json_query

Defined in:
lib/persevere_adapter/query.rb

#to_json_queryObject

Convert a DataMapper Query to a JSON Query.

Parameters:

  • query (Query)

    The DataMapper query object passed in



102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
# File 'lib/persevere_adapter/query.rb', line 102

def to_json_query      
  # Body of main function

  json_query = ''
  field_ops = Array.new
  outfields = Array.new
  
  json_query += self.to_json_query_filter

  self.fields.each do |field|
    if field.respond_to?(:operator)
      field_ops << case field.operator
      when :count then
        if field.target.is_a?(DataMapper::Property)
          "[?#{field.target.field}!=undefined].length"
        else # field.target is all.
          ".length"
        end
      when :min
        if field.target.kind_of?(DataMapper::Property::DateTime) || 
          field.target.kind_of?(DataMapper::Property::Time) || 
          field.target.kind_of?(DataMapper::Property::Date)
          "[=#{field.target.field}]"
        else
          ".min(?#{field.target.field})"
        end
      when :max
        if field.target.kind_of?(DataMapper::Property::DateTime) || 
          field.target.kind_of?(DataMapper::Property::Time) || 
          field.target.kind_of?(DataMapper::Property::Date)
          "[=#{field.target.field}]"
        else
          ".max(?#{field.target.field})"
        end
      when :sum
        ".sum(?#{field.target.field})"
      when :avg
        "[=#{field.target.field}]"
      end
    else
      outfields << "'#{field.field}':#{field.field}"
    end
  end

  json_query += field_ops.join("")

  json_query += self.to_json_query_ordering

  json_query += "[={" + outfields.join(',') + "}]" unless outfields.empty?


  # puts json_query, headers
  return json_query, self.json_query_headers
end