Sha256: 5d48976abf389f11ac26f484e8c37a9496269a0d76765eb236d58f920782d2e4

Contents?: true

Size: 1.77 KB

Versions: 5

Compression:

Stored size: 1.77 KB

Contents

# frozen_string_literal: true

module Panoptes
  class Client
    module Subjects
      # Get list of subjects
      #
      # @param subject_set_id [Integer] filter by subject set
      # @return list of subjects
      def subjects(subject_set_id: nil, workflow_id: nil)
        query = {}
        query[:subject_set_id] = subject_set_id if subject_set_id
        query[:workflow_id] = workflow_id if workflow_id

        raise 'Must filter on at least one of subject_set_id, workflow_id' if query.empty?

        response = panoptes.paginate('/subjects', query)
        response.fetch('subjects')
      end

      # Fetch a subject given filters (including permissions)
      #
      # @param subject_id [Integer]
      # @param project_id [Integer]
      # @return nil or the subject
      def subject(subject_id, project_id: nil)
        query = {}
        query[:project_id] = project_id if project_id

        response = panoptes.get("/subjects/#{subject_id}", query)
        if response.fetch('subjects', []).count > 1
          raise StandardError, 'Unexpectedly many subjects returned'
        end

        response.fetch('subjects', []).fetch(0, nil)
      end

      # Retire a subject for a workflow
      #
      # @todo Add this endpoint to the Apiary docs and add a see-reference here.
      # @param workflow_id [Integer] the ID of a workflow
      # @param subject_id  [Integer] the ID of a subject associated with that workflow (through one of the assigned subject_sets)
      # @return nothing
      def retire_subject(workflow_id, subject_id, reason: nil)
        panoptes.post("/workflows/#{workflow_id}/retired_subjects",
                      admin: true,
                      subject_id: subject_id,
                      retirement_reason: reason)
        true
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
panoptes-client-1.2.1 lib/panoptes/client/subjects.rb
panoptes-client-1.2.0 lib/panoptes/client/subjects.rb
panoptes-client-1.1.1 lib/panoptes/client/subjects.rb
panoptes-client-1.1.0 lib/panoptes/client/subjects.rb
panoptes-client-1.0.0 lib/panoptes/client/subjects.rb