Sha256: 448eca7103dcbc6c534f14868096459e13068bcf003b0f5d585b034367bce75d

Contents?: true

Size: 1.59 KB

Versions: 5

Compression:

Stored size: 1.59 KB

Contents

# frozen_string_literal: true

module ActionNetworkRest
  class Base < Vertebrae::Model
    def get(id)
      response = client.get_request "#{base_path}#{url_escape(id)}"
      object_from_response(response)
    end

    def list(page: 1)
      response = client.get_request "#{base_path}?page=#{url_escape(page)}"
      objects = response.body.dig('_embedded', osdi_key)
      return [] if objects.nil?

      objects.each { |obj| set_action_network_id_on_object(obj) }

      objects
    end

    private

    def url_escape(string)
      CGI.escape(string.to_s)
    end

    def set_action_network_id_on_object(obj)
      # Takes an object which may contain an `identifiers` key, which may contain an action_network identifier
      # If so, we pull out the action_network identifier and stick it in a top-level key "action_network_id",
      # for the convenience of callers using the returned object.
      # "identifiers": [
      #   "action_network:d6bdf50e-c3a4-4981-a948-3d8c086066d7",
      #   "some_external_system:1",
      #   "another_external_system:57"
      # ]
      identifiers = obj[:identifiers] || []
      qualified_actionnetwork_id = identifiers.find do |id|
        id.split(':').first == 'action_network'
      end
      if qualified_actionnetwork_id.present?
        obj.action_network_id = qualified_actionnetwork_id.sub(/^action_network:/, '')
      end

      obj
    end

    def object_from_response(response)
      obj = response.body
      set_action_network_id_on_object(obj)
    end

    def action_network_url(path)
      client.connection.configuration.endpoint + path
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
action_network_rest-0.9.0 lib/action_network_rest/base.rb
action_network_rest-0.8.2 lib/action_network_rest/base.rb
action_network_rest-0.8.1 lib/action_network_rest/base.rb
action_network_rest-0.8.0 lib/action_network_rest/base.rb
action_network_rest-0.7.0 lib/action_network_rest/base.rb