Sha256: 4eecbb9d535eccc454d5ca5e820cf05e785338fd55dddf43d1b1f834a376ecba

Contents?: true

Size: 1.66 KB

Versions: 29

Compression:

Stored size: 1.66 KB

Contents

# frozen_string_literal: true
module Hyrax
  module Arkivo
    class SubscriptionError < RuntimeError
    end

    class CreateSubscriptionJob < Hyrax::ApplicationJob
      attr_reader :user

      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

      def logger
        Hyrax.logger
      end

      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

      def log_and_raise(message)
        logger.error "*** Arkivo error: #{message}: #{user}"
        raise SubscriptionError, message
      end

      def post_to_api
        Faraday.new(url: Hyrax::Arkivo.config[:url]).post do |request|
          request.url Hyrax::Arkivo.new_subscription_url
          request.headers['Content-Type'] = 'application/json'
          request.body = new_subscription_json
        end
      end

      def new_subscription_json
        {
          url: Hyrax::Zotero.publications_url(@user.zotero_userid),
          plugins: [
            {
              name: "hyrax",
              options: { token: @user.arkivo_token }
            }
          ]
        }.to_json
      end
    end
  end
end

Version data entries

29 entries across 29 versions & 1 rubygems

Version Path
hyrax-5.1.0.pre.beta1 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-5.0.4 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-5.0.3 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-5.0.2 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-5.0.1 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-5.0.0 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-5.0.0.rc3 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-5.0.0.rc2 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-5.0.0.rc1 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-3.6.0 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-4.0.0 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-4.0.0.rc3 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-4.0.0.rc2 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-4.0.0.rc1 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-3.5.0 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-4.0.0.beta2 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-3.4.2 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-4.0.0.beta1 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-3.4.1 lib/hyrax/arkivo/create_subscription_job.rb
hyrax-3.4.0 lib/hyrax/arkivo/create_subscription_job.rb