Sha256: 19635182e98f8f02e79f72c5d1e6591efed5686d658fa25f8f6912f25bba31fb

Contents?: true

Size: 1.7 KB

Versions: 16

Compression:

Stored size: 1.7 KB

Contents

module Sufia
  module Arkivo
    class SubscriptionError < RuntimeError
    end

    class CreateSubscriptionJob < ActiveJob::Base
      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
          ActiveFedora::Base.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: 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

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

Version data entries

16 entries across 16 versions & 1 rubygems

Version Path
sufia-7.4.1 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.4.0 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.3.1 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.3.0 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.3.0.rc3 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.3.0.rc2 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.3.0.rc1 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.2.0 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.1.0 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.0.0 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.0.0.rc2 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.0.0.rc1 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.0.0.beta4 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.0.0.beta3 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.0.0.beta2 lib/sufia/arkivo/create_subscription_job.rb
sufia-7.0.0.beta1 lib/sufia/arkivo/create_subscription_job.rb