lib/dss_reuters.rb in dss_reuters-0.7.0 vs lib/dss_reuters.rb in dss_reuters-0.8.0
- old
+ new
@@ -1,197 +1,7 @@
require "dotenv/load"
require "logger"
require "httparty"
require "dss_reuters/version"
+require_relative "dss_utilities"
require_relative "data_stream_api"
-
-module DssReuters
- class Config
- BASE_URI = "https://hosted.datascopeapi.reuters.com"
- LOG_LEVEL = ENV['DSS_LOG_LEVEL'] || 'INFO'
- DSS_USERNAME = ENV['DSS_USERNAME']
- DSS_PASSWORD = ENV['DSS_PASSWORD']
- end
-
- class Session
- include HTTParty
- base_uri Config::BASE_URI
-
- attr_reader :context, :token, :logger
-
- def configured?
- !Config::DSS_USERNAME.nil? and !Config::DSS_PASSWORD.nil?
- end
-
- def not_configured_error
- @logger.error "dss_reuters gem not configured. you will not be able to fetch data from dss reuters API"
- end
-
- def initialize
- @logger = ::Logger.new(STDOUT)
- @logger.level = Config::LOG_LEVEL
- login_path = "/RestApi/v1/Authentication/RequestToken"
- options = {
- headers: {
- "Prefer" => "respond-async",
- "Content-Type" => "application/json; odata=minimalmetadata"
- },
- body: {
- "Credentials" =>{
- "Username" => Config::DSS_USERNAME,
- "Password" => Config::DSS_PASSWORD
- }
- }.to_json
- }
- if configured?
- resp = self.class.post login_path, options
- @token = resp["value"]
- @context = resp["@odata.context"]
- @logger.debug resp
- else
- not_configured_error
- end
- end
- end
-
- class User
- include HTTParty
- base_uri Config::BASE_URI
-
- def initialize(session)
- @session = session
- path = "/RestApi/v1/Users/Users(#{Config::DSS_USERNAME})"
- options = {
- headers: {
- "Prefer" => "respond-async",
- "Authorization" => "Token #{@session.token}"
- }
- }
- if session.configured?
- resp = self.class.get path, options
- @session.logger.debug resp
- else
- session.not_configured_error
- end
- end
- end
-
- class OnDemandExtract
- include HTTParty
- base_uri Config::BASE_URI
- attr_reader :result
- attr_accessor :status, :location
-
- def camelize(str)
- str.to_s.split('_').collect(&:capitalize).join
- end
-
- def self.init_with_location(session, location)
- ins = self.new(session)
- ins.status = :in_progress
- ins.location = location
- ins
- end
-
- def initialize(session, identifiers=nil, type=nil, fields=nil, condition=nil)
- @session = session
- @status = :init
- path = "/RestApi/v1/Extractions/ExtractWithNotes"
-
- if fields
- options = {
- headers: {
- "Prefer" => "respond-async; wait=5",
- "Content-Type" => "application/json; odata=minimalmetadata",
- "Authorization" => "Token #{@session.token}"
- },
- body: {
- "ExtractionRequest" => {
- "@odata.type" => "#{camelize(type)}ExtractionRequest",
- "ContentFieldNames" => fields,
- "IdentifierList" => {
- "@odata.type" => "InstrumentIdentifierList",
- "InstrumentIdentifiers" => identifiers,
- "ValidationOptions" => nil,
- "UseUserPreferencesForValidationOptions" => false
- },
- "Condition" => condition
- }
- }.to_json
- }
- if session.configured?
- resp = self.class.post path, options
- if check_status(resp)
- @location = resp["location"]
- end
- @session.logger.debug resp
- else
- session.not_configured_error
- end
- end
- end
-
- def check_status(resp)
- if resp["status"] == "InProgress"
- @status = :in_progress
- else
- @status = :complete
- end
- end
-
- def get_result
- if @status == :in_progress
- options = {
- headers: {
- "Prefer" => "respond-async; wait=5",
- "Authorization" => "Token #{@session.token}"
- }
- }
- if @session.configured?
- @result = self.class.get @location, options
- check_status @result
- @session.logger.debug @result
- @status
- else
- @session.not_configured_error
- end
- end
- end
- end
-
- class Api
- attr_reader :session
-
- def initialize
- @session = Session.new
- end
-
- def get_user
- @user = User.new(@session)
- end
-
- def extract_with_location(location)
- OnDemandExtract.init_with_location(@session, location)
- end
-
- def extract_with_isin(isin_code, type=:composite, fields=nil, condition=nil)
- fields ||= [
- "Close Price",
- "Contributor Code Description",
- "Currency Code Description",
- "Dividend Yield",
- "Main Index",
- "Market Capitalization",
- "Market Capitalization - Local Currency",
- "Percent Change - Close Price - 1 Day",
- "Universal Close Price Date"
- ]
- identifiers = [
- {
- "Identifier" => isin_code,
- "IdentifierType" => "Isin"
- }
- ]
- OnDemandExtract.new(@session, identifiers, type, fields, condition)
- end
- end
-end
+require_relative "data_scope_api"