class PixiClient::ResponseParser
Constants
- SQL_ROWSET1_SCHEMA_NS
Attributes
response_body[RW]
rows[RW]
sql_messages[RW]
Public Class Methods
new(response_body)
click to toggle source
# File lib/pixi_client/response_parser.rb, line 9 def initialize(response_body) self.response_body = response_body self.rows = [] self.sql_messages = [] end
Public Instance Methods
parse!()
click to toggle source
# File lib/pixi_client/response_parser.rb, line 15 def parse! parse_sql_messages parse_rowset end
Private Instance Methods
identity(value)
click to toggle source
# File lib/pixi_client/response_parser.rb, line 119 def identity(value) value end
parse_row(row)
click to toggle source
# File lib/pixi_client/response_parser.rb, line 62 def parse_row(row) OpenStruct.new.tap do |parsed_row| rowset_schema.each do |conversion| attr_name = conversion[:name].to_sym converted_value = send(conversion[:method], row[attr_name]) parsed_row.send(:"#{attr_name}=", converted_value) end end end
parse_rowset()
click to toggle source
# File lib/pixi_client/response_parser.rb, line 46 def parse_rowset unparsed_rows.each do |unparsed_row| self.rows << parse_row(unparsed_row) end end
parse_sql_message(unparsed_message)
click to toggle source
# File lib/pixi_client/response_parser.rb, line 37 def parse_sql_message(unparsed_message) OpenStruct.new.tap do |parsed_message| parsed_message.message_class = unparsed_message[:class] [:line_number, :message, :number, :procedure, :server, :source, :state].each do |attr| parsed_message.send(:"#{attr}=", unparsed_message[attr]) end end end
parse_sql_messages()
click to toggle source
# File lib/pixi_client/response_parser.rb, line 22 def parse_sql_messages unparsed_messages.each do |unparsed_message| self.sql_messages << parse_sql_message(unparsed_message) end end
rowset_schema()
click to toggle source
# File lib/pixi_client/response_parser.rb, line 72 def rowset_schema if @rowset_schema.nil? schemas = response_body[:sql_row_set][:schema] schemas = [schemas] unless schemas.is_a?(Array) @rowset_schema = schemas.find { |schema| schema[:@target_namespace] == SQL_ROWSET1_SCHEMA_NS } || fail('Impossible to process response body: any schema definition found!') @rowset_schema = rowset_schema_to_conversion_hash(@rowset_schema) end @rowset_schema end
rowset_schema_to_conversion_hash(schema)
click to toggle source
# File lib/pixi_client/response_parser.rb, line 83 def rowset_schema_to_conversion_hash(schema) field_list = schema[:element][:complex_type][:sequence][:element][:complex_type][:sequence][:element] field_list = [field_list] unless field_list.is_a?(Array) field_list.reduce([]) do |memo, field| conversion = {} conversion[:name] = underscore(field[:@name]) if field[:@type] conversion[:method] = schema_type_to_conversion_method(field[:@type]) else conversion[:method] = schema_type_to_conversion_method(field[:simple_type][:restriction][:@base]) end memo << conversion end end
schema_type_to_conversion_method(schema_type)
click to toggle source
# File lib/pixi_client/response_parser.rb, line 100 def schema_type_to_conversion_method(schema_type) case(schema_type) when 'sqltypes:int' then :to_integer when 'sqltypes:datetime' then :to_time when 'sqltypes:bit' then :to_boolean when 'sqltypes:varchar' then :identity else :identity end end
to_boolean(value)
click to toggle source
# File lib/pixi_client/response_parser.rb, line 127 def to_boolean(value) value.to_i == 1 end
to_integer(value)
click to toggle source
# File lib/pixi_client/response_parser.rb, line 123 def to_integer(value) value.to_i end
to_time(value)
click to toggle source
# File lib/pixi_client/response_parser.rb, line 131 def to_time(value) return '' if value.nil? Time.parse(value.to_s) end
underscore(word)
click to toggle source
Extract from Rails ActiveSupport::Inflector
# File lib/pixi_client/response_parser.rb, line 111 def underscore(word) word.gsub(/::/, '/'). gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2'). gsub(/([a-z\d])([A-Z])/,'\1_\2'). tr("-", "_"). downcase end
unparsed_messages()
click to toggle source
# File lib/pixi_client/response_parser.rb, line 28 def unparsed_messages unless @unparsed_messages @unparsed_messages = response_body[:sql_message] || [] @unparsed_messages = [@unparsed_messages] unless @unparsed_messages.is_a?(Array) end @unparsed_messages end
unparsed_rows()
click to toggle source
# File lib/pixi_client/response_parser.rb, line 52 def unparsed_rows return [] if response_body[:sql_row_set].nil? return [] if response_body[:sql_row_set][:diffgram].nil? return [] if response_body[:sql_row_set][:diffgram][:sql_row_set1].nil? rowset = response_body[:sql_row_set][:diffgram][:sql_row_set1][:row] rowset.is_a?(Array) && rowset || [rowset] end