class RayyanStore::Client
Constants
- CONNECT_TIMEOUT
- READ_TIMEOUT
Public Class Methods
new()
click to toggle source
# File lib/rayyan-store.rb, line 12 def initialize raise 'RAYYAN_STORE_URL environment variable not found' unless ENV['RAYYAN_STORE_URL'] @url = ENV['RAYYAN_STORE_URL'] # Excon.stub({}, {:body => 'OK', :status => 200}) end
Public Instance Methods
add_note(review_id, article_id, user_id, note_id, note_text)
click to toggle source
# File lib/rayyan-store.rb, line 209 def add_note(review_id, article_id, user_id, note_id, note_text) post_request "/reviews/#{review_id}/articles/#{article_id}/users/#{user_id}/notes/#{note_id}",{ note_text: note_text } end
batch_insert_suggestion_rating(review_id, inserts_list)
click to toggle source
# File lib/rayyan-store.rb, line 181 def batch_insert_suggestion_rating(review_id, inserts_list) # inserts_list is an array of dicts of the form: # {article_id: <article_id>, # score: <rating_score_float>, # star: <star_cutoff_uint>} post_request '/batch-insert-suggestion-rating', { review_id: review_id, inserts_list: inserts_list } end
batch_update_customization(review_id, updates_list, log_enabled = true)
click to toggle source
# File lib/rayyan-store.rb, line 133 def batch_update_customization(review_id, updates_list, log_enabled = true) post_request '/batch-update-customization', { review_id: review_id, updates_list: updates_list, log_enabled: log_enabled } end
batch_update_dedup_user_action(review_id, updates_list)
click to toggle source
# File lib/rayyan-store.rb, line 165 def batch_update_dedup_user_action(review_id, updates_list) post_request '/batch-update-dedup', { review_id: review_id, updates_list: updates_list } end
create_review(review_id, version = nil)
click to toggle source
# File lib/rayyan-store.rb, line 18 def create_review(review_id, version = nil) post_request("/reviews/#{review_id}", {version: version}) end
customizations_count(review_ids, start_date, end_date)
click to toggle source
# File lib/rayyan-store.rb, line 234 def customizations_count(review_ids, start_date, end_date) get_request '/customizations-count', { start_date: start_date, end_date: end_date }, { review_ids: review_ids } end
delete_by_file_id(review_id, file_id)
click to toggle source
# File lib/rayyan-store.rb, line 44 def delete_by_file_id(review_id, file_id) delete_request "/delete-by-file-id/#{file_id}", { review_id: review_id } end
delete_customization(review_id, article_id, user_id, key, log_enabled = true)
click to toggle source
# File lib/rayyan-store.rb, line 123 def delete_customization(review_id, article_id, user_id, key, log_enabled = true) delete_request '/customization', { review_id: review_id, article_id: article_id, user_id: user_id, key: key, log_enabled: log_enabled } end
delete_fulltext(review_id, article_id, fulltext_id, is_public)
click to toggle source
# File lib/rayyan-store.rb, line 200 def delete_fulltext(review_id, article_id, fulltext_id, is_public) delete_request '/delete-fulltext', { review_id: review_id, article_id: article_id, fulltext_id: fulltext_id, is_public: is_public } end
delete_highlight(review_id, category, keyword, user_id)
click to toggle source
# File lib/rayyan-store.rb, line 268 def delete_highlight(review_id, category, keyword, user_id) delete_request( "/reviews/#{review_id}/highlights/category/#{category}", nil, { user_id: user_id, keyword: keyword } ) end
delete_note(review_id, article_id, user_id, note_id)
click to toggle source
# File lib/rayyan-store.rb, line 221 def delete_note(review_id, article_id, user_id, note_id) delete_request "/reviews/#{review_id}/articles/#{article_id}/users/#{user_id}/notes/#{note_id}" end
delete_review(review_id)
click to toggle source
# File lib/rayyan-store.rb, line 22 def delete_review(review_id) delete_request "/reviews/#{review_id}" end
edit_note(review_id, article_id, user_id, note_id, note_text)
click to toggle source
# File lib/rayyan-store.rb, line 215 def edit_note(review_id, article_id, user_id, note_id, note_text) patch_request "/reviews/#{review_id}/articles/#{article_id}/users/#{user_id}/notes/#{note_id}",{ note_text: note_text } end
export(review_id, source, last_id, length) { |result| ... }
click to toggle source
# File lib/rayyan-store.rb, line 50 def export(review_id, source, last_id, length) response = get_request('/export', { review_id: review_id, source: source, last_id: last_id, length: length }) response['objects'].each do |result| yield result end response['last_id'] end
facet(review_id, key, user_ids, limit = 10)
click to toggle source
# File lib/rayyan-store.rb, line 104 def facet(review_id, key, user_ids, limit = 10) get_request("/facet/#{key}", { review_id: review_id, user_ids: user_ids ? user_ids.join(',') : nil, limit: limit }) end
get_highlights(review_id, category)
click to toggle source
# File lib/rayyan-store.rb, line 264 def get_highlights(review_id, category) get_request("/reviews/#{review_id}/highlights/category/#{category}") end
import(review_id, articles, target = 'articles', version = nil)
click to toggle source
# File lib/rayyan-store.rb, line 35 def import(review_id, articles, target = 'articles', version = nil) post_request('/import', { review_id: review_id, articles: articles.map{|a| a.select{|k, v| v && v != ''}}, target: target, version: version })["article_ids"] end
insert_customization(review_id, article_id, user_id, key, value = 1, log_enabled = true)
click to toggle source
# File lib/rayyan-store.rb, line 112 def insert_customization(review_id, article_id, user_id, key, value = 1, log_enabled = true) post_request '/customization', { review_id: review_id, article_id: article_id, user_id: user_id, key: key, value: value, log_enabled: log_enabled } end
insert_dedup_results(review_id, dedup_results, nullify = true)
click to toggle source
# File lib/rayyan-store.rb, line 149 def insert_dedup_results(review_id, dedup_results, nullify = true) post_request '/insert-dedup', { review_id: review_id, dedup_results: dedup_results, nullify: nullify } end
insert_fulltext(review_id, article_id, fulltext_obj)
click to toggle source
# File lib/rayyan-store.rb, line 192 def insert_fulltext(review_id, article_id, fulltext_obj) post_request '/insert-fulltext', { review_id: review_id, article_id: article_id, fulltext_obj: fulltext_obj } end
insert_highlights(review_id, category, highlights, user_id = nil)
click to toggle source
# File lib/rayyan-store.rb, line 253 def insert_highlights(review_id, category, highlights, user_id = nil) query_params = {} query_params[:user_id] = user_id if user_id post_request( "/reviews/#{review_id}/highlights/category/#{category}", { highlights: highlights }, query_params ) end
insert_suggestion_rating(review_id, article_id, score, stars)
click to toggle source
# File lib/rayyan-store.rb, line 172 def insert_suggestion_rating(review_id, article_id, score, stars) post_request '/insert-suggestion-rating', { review_id: review_id, article_id: article_id, score: score, stars: stars } end
last_customization(review_id, user_id, key)
click to toggle source
# File lib/rayyan-store.rb, line 141 def last_customization(review_id, user_id, key) get_request 'last-customization', { review_id: review_id, user_id: user_id, key: key } end
query(review_id, filter = {}, start_index = 0, length = 30, return_total = false, sort_key = 'id', sort_dir = 'asc') { |article| ... }
click to toggle source
# File lib/rayyan-store.rb, line 80 def query(review_id, filter = {}, start_index = 0, length = 30, return_total = false, sort_key = 'id', sort_dir = 'asc') response = get_request('/query', { review_id: review_id, start_index: start_index, length: length, return_total: if return_total then 1 else 0 end, sort_key: sort_key, sort_dir: sort_dir }, { filter: filter }) response["articles"].each {|article| yield article if block_given? } response["total"] end
review_version(review_id)
click to toggle source
Returns the version of a review. @param review_id [Int] The id of the review. @return [Int|nil] The version of the review if it exists or nil.
# File lib/rayyan-store.rb, line 29 def review_version(review_id) version = get_request "/reviews/#{review_id}/version" version = version.to_i if version.is_a? String version end
stream_export(review_id, source, filter = {}) { |object| ... }
click to toggle source
# File lib/rayyan-store.rb, line 63 def stream_export(review_id, source, filter = {}) parser = Yajl::Parser.new(:symbolize_keys => true) parser.on_parse_complete = lambda do |object| # server is returning multiple json objects corresponding to results yield object end streamer = lambda do |chunk, remaining_bytes, total_bytes| parser << chunk end chunked_get_request('/stream-export', { review_id: review_id, source: source }, streamer, { filter: filter }) end
time_spent(review_id, user_id, threshold, preamble)
click to toggle source
# File lib/rayyan-store.rb, line 225 def time_spent(review_id, user_id, threshold, preamble) get_request '/time-spent', { review_id: review_id, user_id: user_id, threshold: threshold, preamble: preamble } end
topk_users_labels(review_ids, start_date, end_date, topk_limit)
click to toggle source
# File lib/rayyan-store.rb, line 243 def topk_users_labels(review_ids, start_date, end_date, topk_limit) get_request '/topk-users-labels', { start_date: start_date, end_date: end_date, topk_limit: topk_limit }, { review_ids: review_ids } end
total(review_id)
click to toggle source
# File lib/rayyan-store.rb, line 98 def total(review_id) get_request('/total', { review_id: review_id })["total"] end
update_dedup_user_action(review_id, article_id, user_action)
click to toggle source
# File lib/rayyan-store.rb, line 157 def update_dedup_user_action(review_id, article_id, user_action) post_request '/update-dedup', { review_id: review_id, article_id: article_id, user_action: user_action } end
Private Instance Methods
chunked_get_request(path, query, streamer_block, body = nil)
click to toggle source
# File lib/rayyan-store.rb, line 322 def chunked_get_request(path, query, streamer_block, body = nil) request :get, path, query, body, streamer_block end
connection()
click to toggle source
# File lib/rayyan-store.rb, line 278 def connection # @connection ||= Excon.new(@url, persistent: false, mock: true) @connection ||= Excon.new( @url, persistent: false, connect_timeout: CONNECT_TIMEOUT, read_timeout: READ_TIMEOUT ) end
delete_request(path, body = nil, query = nil)
click to toggle source
# File lib/rayyan-store.rb, line 338 def delete_request(path, body = nil, query = nil) request :delete, path, query, body end
get_request(path, query = nil, body = nil)
click to toggle source
# File lib/rayyan-store.rb, line 326 def get_request(path, query = nil, body = nil) request :get, path, query, body end
patch_request(path, body = nil)
click to toggle source
# File lib/rayyan-store.rb, line 334 def patch_request(path, body = nil) request :patch, path, nil, body end
post_request(path, body = nil, query = nil)
click to toggle source
# File lib/rayyan-store.rb, line 330 def post_request(path, body = nil, query = nil) request :post, path, query, body end
request(method, path, query = nil, body = nil, streamer_block = nil)
click to toggle source
# File lib/rayyan-store.rb, line 289 def request(method, path, query = nil, body = nil, streamer_block = nil) # Extract Review ID from request review_id = query && (query[:review_id] || query[:review_ids]) || \ body && (body[:review_id] || body[:review_ids]) || \ path.split('/')[2] # requests with multiple review_ids are not supported # by the proxy. Set X-Review-ID to nil so it fails in # the proxy. Remove this once proxy has support. review_id = nil if (query && query.key?(:review_ids)) || \ (body && body.key?(:review_ids)) options = { path: path, query: query, body: body ? JSON.generate(body) : nil, headers: { "Content-Type" => "application/json", "X-Review-ID" => review_id } } if streamer_block options[:response_block] = streamer_block end response = connection.send(method, options) unless response.status == 200 raise Exception.new "Error in #{method.upcase} #{path} [#{response.status}]: #{response.body}" end unless streamer_block JSON.parse(response.body) rescue response.body end end