class Bberg::Requests::ReferenceDataRequest
A class for preforming reference data requets.
Constants
- DEFAULT_OPTIONS
Public Class Methods
new(session_options, identifiers, options_arg = {})
click to toggle source
Create new instance. @param [Bberg::Native::SessionOptions] session_options to specify how to connect session. @param [#each|String] identifiers a list of identifiers for this request @param [Hash] options_arg specification of what fields or other parameters to use for the request.
# File lib/bberg/requests/reference_data_request.rb, line 21 def initialize(session_options, identifiers, options_arg = {}) @session_options = session_options @identifiers = unless identifiers.respond_to? 'each' [identifiers] else identifiers end @options = DEFAULT_OPTIONS.merge(options_arg) end
Public Instance Methods
create_request()
click to toggle source
Create a reference data request.
# File lib/bberg/requests/reference_data_request.rb, line 34 def create_request request = @svc.createRequest("ReferenceDataRequest") @identifiers.each {|identifier| request.append("securities", identifier) } @options.each do |key, value| next if key == :fields or key == :overrides request.set(key.to_s, convert_value_to_bberg(value)) end @options[:fields].each {|f| request.append("fields", f) } overrides = request.getElement("overrides") @options[:overrides].each do |field_id, value| new_override = overrides.appendElement() new_override.setElement("fieldId", field_id.to_s) new_override.setElement("value", convert_value_to_bberg(value)) end @request = request end
parse_response(event)
click to toggle source
Parse event for ReferenceDataResponse. @return [Hash] event parsed into a Hash format.
# File lib/bberg/requests/reference_data_request.rb, line 57 def parse_response(event) iter = event.messageIterator() result = Hash.new while iter.hasNext() message = iter.next() raise Bberg::BbergException.new("Got a response with incorrect correlation id!") if message.correlationID != @req_id msg_type = message.messageType().toString() raise Bberg::BbergException.new("Expected message of type ReferenceDataResponse but got #{msg_type}") if msg_type != "ReferenceDataResponse" security_data_array = message.getElement("securityData") (0..(security_data_array.numValues - 1)).each do |sec_num| security_data = security_data_array.getValueAsElement(sec_num) security_name = security_data.getElementAsString("security") field_data = security_data.getElement("fieldData") result[security_name] ||= Hash.new (0..(field_data.numElements - 1)).each do |field_num| field_element = field_data.getElement(field_num) values = if field_element.isArray process_array_type(field_element) else get_element_values(field_data, field_num) end result[security_name][field_element.name.toString] = values end end end result end
Private Instance Methods
get_element_values(sub_element)
click to toggle source
# File lib/bberg/requests/reference_data_request.rb, line 108 def get_element_values(sub_element) values = Hash.new iter = sub_element.elementIterator() while iter.hasNext() e = iter.next() values[e.name.toString] = case e.datatype.intValue() when Bberg::Native::Schema::Datatype::Constants::INT32 e.getValueAsInt32().to_i when Bberg::Native::Schema::Datatype::Constants::INT64 e.getValueAsInt64().to_i when Bberg::Native::Schema::Datatype::Constants::FLOAT32 e.getValueAsFloat32().to_f when Bberg::Native::Schema::Datatype::Constants::FLOAT64 e.getValueAsFloat64().to_f when Bberg::Native::Schema::Datatype::Constants::DATE convert_to_rb_date(e.getValueAsDate()) else raise Bberg::BbergException.new("Unsupported data type in response: #{e.datatype.to_s}") end end values end
process_array_type(element)
click to toggle source
PRIVATE ############################
# File lib/bberg/requests/reference_data_request.rb, line 94 def process_array_type(element) result = [] (0..(element.numValues - 1)).each do |num| sub_element = element.getValueAsElement(num) values = if sub_element.isArray process_array_type(sub_element) else get_element_values(sub_element) end result << values end result end