class Sufia::Arkivo::CreateSubscriptionJob

Attributes

user[R]

Public Instance Methods

perform(user_key) click to toggle source
# File lib/sufia/arkivo/create_subscription_job.rb, line 9
def perform(user_key)
  @user = ::User.find_by_user_key(user_key)
  validate_user!

  # post json to API
  response = post_to_api
  # parse results
  subscription_path = response.headers['Location']
  # create subscription
  user.arkivo_subscription = subscription_path
  user.save
end

Private Instance Methods

log_and_raise(message) click to toggle source
# File lib/sufia/arkivo/create_subscription_job.rb, line 35
def log_and_raise(message)
  logger.error "*** Arkivo error: #{message}: #{user}"
  raise SubscriptionError, message
end
logger() click to toggle source
# File lib/sufia/arkivo/create_subscription_job.rb, line 24
def logger
  ActiveFedora::Base.logger
end
new_subscription_json() click to toggle source
# File lib/sufia/arkivo/create_subscription_job.rb, line 48
def new_subscription_json
  {
    url: Sufia::Zotero.publications_url(@user.zotero_userid),
    plugins: [
      {
        name: "sufia",
        options: { token: @user.arkivo_token }
      }
    ]
  }.to_json
end
post_to_api() click to toggle source
# File lib/sufia/arkivo/create_subscription_job.rb, line 40
def post_to_api
  Faraday.new(url: Sufia::Arkivo.config[:url]).post do |request|
    request.url Sufia::Arkivo.new_subscription_url
    request.headers['Content-Type'] = 'application/json'
    request.body = new_subscription_json
  end
end
validate_user!() click to toggle source
# File lib/sufia/arkivo/create_subscription_job.rb, line 28
def validate_user!
  log_and_raise('User not found') if user.blank?
  log_and_raise('User does not have an Arkivo token') if user.arkivo_token.blank?
  log_and_raise('User has not yet connected with Zotero') if user.zotero_userid.blank?
  log_and_raise('User already has a subscription') if user.arkivo_subscription.present?
end