Sha256: 73388790a1c0c23bdbde9f9d29fb9ac6acca61ecfe478f644f99f5b116bc0a5d

Contents?: true

Size: 1.34 KB

Versions: 1

Compression:

Stored size: 1.34 KB

Contents

module ActionNetworkRest
  class People < Base
    def base_path
      'people/'
    end

    def create(person_data, tags: [])
      post_body = {'person' => person_data}
      if tags.any?
        post_body['add_tags'] = tags
      end

      response = client.post_request base_path, post_body
      object_from_response(response)
    end

    def unsubscribe(id)
      request_body = {email_addresses: [{status: 'unsubscribed'}]}
      response = client.put_request "#{base_path}#{url_escape(id)}", request_body
      object_from_response(response)
    end

    def find_by_email(email)
      # This works for parsing exactly 1 person's info out of the response.
      # The response we get from Action Network is expected to have
      #
      # "_embedded": {
      #   "osdi:people": [{
      #       "identifiers": [
      #           "action_network:c947bcd0-929e-11e3-a2e9-12313d316c29"
      #            ....
      #        ]
      #    }]
      # }
      #
      url_encoded_filter_string = url_escape("email_address eq '#{email}'")
      response = client.get_request "#{base_path}?filter=#{url_encoded_filter_string}"
      person_object = response.body[:_embedded][osdi_key].first
      if person_object.present?
        set_action_network_id_on_object(person_object)
      end
    end

    private

    def osdi_key
      'osdi:people'
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
action_network_rest-0.5.0 lib/action_network_rest/people.rb