class Lableb::SDK

Public Class Methods

new(projectName, searchToken, indexingToken) click to toggle source
# File lib/lableb_sdk.rb, line 7
def initialize(projectName, searchToken, indexingToken)
  @projectName = projectName
  @searchToken = searchToken
  @indexingToken = indexingToken
  @apiURL = "https://api-bahuth.lableb.com/api/v1"
  @baseURL = "#{@apiURL}/#{@projectName}/collections"
  @client = Lableb::Client.new
  @customSessionID = nil
end

Public Instance Methods

autocomplete(collection, params, handler="suggest") click to toggle source

Gets autcomplete suggestions @param collection {String} - collection name in Lableb index @param params {Hash} - query string parameters @param handler {String} - autocomplete handler name

# File lib/lableb_sdk.rb, line 86
def autocomplete(collection, params, handler="suggest")
  params['token'] = @searchToken
  params['session_id'] = self.getSessionID()
  url = "#{@baseURL}/#{collection}/autocomplete/#{handler}"
  response = @client.getJSON(url, params)
  data = JSON.parse(response.body)
  code = response.code.to_i

  if code >= 400
    return data['response'], code
  end

  suggestionsWithFeedbackUrl = data['response']['results'].map.with_index do |suggestion, idx|
    suggestion['feedbackUrl'] = self.generateAutocompleteFeedbackUrl(collection, handler, suggestion, idx + 1, params[:q])
    suggestion
  end

  return {
    totalSuggestions: data['response']['found_documents'],
    suggestions: suggestionsWithFeedbackUrl
  }
end
convertDates(doc) click to toggle source

covert each date in a document to ISO8601 date string

# File lib/lableb_sdk.rb, line 194
def convertDates(doc)
  doc.each do | key, value |
    if key[-2..key.length] == "dt"
      doc[key] = self.toISODateString(value)
    elsif key[-3..key.length] == "dta"
      doc[key] = value.map{ | date | self.toISODateString(date) } 
    end
  end
  doc
end
delete(collection, id) click to toggle source

Deletes a document from Lableb index by id @param collection {String} - collection name in Lableb index @param id {String} - id of the document to be deleted

# File lib/lableb_sdk.rb, line 180
def delete(collection, id)
  url = "#{@baseURL}/#{collection}/documents/#{id}"
  response = @client.deleteJSON(url, { token: @indexingToken })
  data = JSON.parse(response.body)
  code = response.code.to_i

  if code >= 400
    return data['response'], code
  end

  return true, code
end
generateAutocompleteFeedbackUrl(collection, handler, suggestion, order, query) click to toggle source

generates autocomplete feedback url for an autocomplete suggestion

# File lib/lableb_sdk.rb, line 110
def generateAutocompleteFeedbackUrl(collection, handler, suggestion, order, query)
  params = {
    session_id: self.getSessionID(),
    token: @searchToken,
    query: query,
    item_order: order
  }

  if suggestion['url']
    params['url'] = suggestion['url']
  end

  qs = @client.buildQueryString(params)
  url = "#{@baseURL}/#{collection}/autocomplete/#{handler}/feedback/hits?#{qs}"
  return url
end
generateRecommendationFeedbackUrl(collection, handler, target, order) click to toggle source

generates recommendation hit feedback url, but the url needs to be completed with the source document params

# File lib/lableb_sdk.rb, line 156
def generateRecommendationFeedbackUrl(collection, handler, target, order)
  params = {
    session_id: self.getSessionID(),
    token: @searchToken,
    target_id: target['id'],
    item_order: order
  }

  if target['url']
    params['target_url'] = target['url']
  end

  if target['title']
    params['target_title'] = target['title']
  end

  qs = @client.buildQueryString(params)
  url = "#{@baseURL}/#{collection}/recommend/#{handler}/feedback/hits?#{qs}"
  return url
end
generateSearchFeedbackUrl(collection, handler, document, order, query) click to toggle source

generates a feedback url for a search result

# File lib/lableb_sdk.rb, line 69
def generateSearchFeedbackUrl(collection, handler, document, order, query)
  qs = @client.buildQueryString({
    session_id: self.getSessionID(),
    token: @searchToken,
    query: query,
    item_id: document['id'],
    item_order: order,
    url: document['url']
  })
  url = "#{@baseURL}/#{collection}/search/#{handler}/feedback/hits?#{qs}"
  return url
end
getSessionID() click to toggle source

returns the custom session id generator if it exists else generates and returns a random string

# File lib/lableb_sdk.rb, line 224
def getSessionID()
  if @customSessionID
    return @customSessionID.call()
  end
  return rand(7958661109946400884391936).to_s(36)
end
index(collection, documents) click to toggle source

Indexes documents to Lableb @param collection {String} - collection name in Lableb index @param document {Hash | Array} - docuemnts to index

# File lib/lableb_sdk.rb, line 20
def index(collection, documents)
  docs = nil
  if documents.kind_of? Array
    docs = documents.map{|document| self.convertDates(document)}
  else
    docs = [self.convertDates(documents)]
  end
  url = "#{@baseURL}/#{collection}/documents"
  response = @client.postJSON(url, docs, { token: @indexingToken })
  indexed = response.code.to_i < 400
  return indexed, response.code.to_i
end
recommend(collection, params, handler="recommend") click to toggle source

Gets related posts to the specified one in passed params @param collection {String} - collection name in Lableb index @param params {Hash} - query string parameters @param handler {String} - recommendation handler name

# File lib/lableb_sdk.rb, line 131
def recommend(collection, params, handler="recommend")
  params['token'] = @searchToken
  params['session_id'] = self.getSessionID()
  url = "#{@baseURL}/#{collection}/recommend/#{handler}"
  response = @client.getJSON(url, params)
  data = JSON.parse(response.body)
  code = response.code.to_i

  if code >= 400
    return data['response'], code
  end

  recommendationsWithFeedbackUrl = data['response']['results'].map.with_index do |recommendation, idx|
    recommendation['feedbackUrl'] = self.generateRecommendationFeedbackUrl(collection, handler, recommendation, idx + 1)
    recommendation
  end

  return {
    totalDocuments: data['response']['found_documents'],
    documents: recommendationsWithFeedbackUrl
  }
end
setSessionIDGenerator(method) click to toggle source

sets custom session id generator

# File lib/lableb_sdk.rb, line 218
def setSessionIDGenerator(method)
  @customSessionID = method
end
toISODateString(date) click to toggle source

convert a date object or a date string into ISO8601 date string

# File lib/lableb_sdk.rb, line 206
def toISODateString(date)
  str = ""
  if (date.kind_of? Date)
    str = date.to_s
  elsif date.is_a? String
    str = date
  end
  dt = DateTime.parse(str).iso8601.split('+')[0] + "Z"
  dt
end