require_relative"base"require_relative"exceptions"# Adapter for the Email Alert API## @see https://github.com/alphagov/email-alert-api# @api documentedclassGdsApi::EmailAlertApi<GdsApi::Base# Get or Post subscriber list## @param attributes [Hash] document_type, links, tags used to search existing subscriber listsdeffind_or_create_subscriber_list(attributes)find_subscriber_list(attributes)rescueGdsApi::HTTPNotFoundcreate_subscriber_list(attributes)end# Get a subscriber list## @param attributes [Hash] document_type, links, tags used to search existing subscriber listsdeffind_subscriber_list(attributes)tags=attributes["tags"]links=attributes["links"]document_type=attributes["document_type"]email_document_supertype=attributes["email_document_supertype"]government_document_supertype=attributes["government_document_supertype"]combine_mode=attributes["combine_mode"]iftags&&linksmessage="please provide either tags or links (or neither), but not both"raiseArgumentError,messageendparams={}params[:tags]=tagsiftagsparams[:links]=linksiflinksparams[:document_type]=document_typeifdocument_typeparams[:email_document_supertype]=email_document_supertypeifemail_document_supertypeparams[:government_document_supertype]=government_document_supertypeifgovernment_document_supertypeparams[:combine_mode]=combine_modeifcombine_modequery_string=nested_query_string(params)get_json("#{endpoint}/subscriber-lists?"+query_string)end# Post a subscriber list## @param attributes [Hash] document_type, links, tags used to search existing subscriber listsdefcreate_subscriber_list(attributes)post_json("#{endpoint}/subscriber-lists",attributes)end# Post a content change## @param content_change [Hash] Valid content change attributesdefcreate_content_change(content_change,headers={})post_json("#{endpoint}/content-changes",content_change,headers)end# Post a message## @param message [Hash] Valid message attributesdefcreate_message(message,headers={})post_json("#{endpoint}/messages",message,headers)end# Unpublishing alert## @param message [Hash] content_id## Used by email-alert-service to send a message to email-alert-api# when an unpublishing message is put on the Rabbitmq queue by# publishing-apidefsend_unpublish_message(message)post_json("#{endpoint}/unpublish-messages",message)end# Get topic matches## @param attributes [Hash] tags, links, document_type,# email_document_supertype, government_document_supertype## @return [Hash] topics, enabled, disableddeftopic_matches(attributes)query_string=nested_query_string(attributes)get_json("#{endpoint}/topic-matches.json?#{query_string}")end# Unsubscribe subscriber from subscription## @param [string] Subscription uuid## @return [nil]defunsubscribe(uuid)post_json("#{endpoint}/unsubscribe/#{uri_encode(uuid)}")end# Unsubscribe subscriber from everything## @param [integer] Subscriber id## @return [nil]defunsubscribe_subscriber(id)delete_json("#{endpoint}/subscribers/#{uri_encode(id)}")end# Subscribe## @return [Hash] subscription_iddefsubscribe(subscriber_list_id:,address:,frequency: "immediately",skip_confirmation_email: false)post_json("#{endpoint}/subscriptions",subscriber_list_id: subscriber_list_id,address: address,frequency: frequency,skip_confirmation_email: skip_confirmation_email,)end# Get a Subscriber List## @return [Hash] subscriber_list: {# id# title# created_at# updated_at# document_type# tags# links# email_document_supertype# government_document_supertype# subscriber_count# }defget_subscriber_list(slug:)get_json("#{endpoint}/subscriber-lists/#{uri_encode(slug)}")end# Get a Subscription## @return [Hash] subscription: {# id# subscriber_list# subscriber# created_at# updated_at# ended_at# ended_reason# frequency# source# }defget_subscription(id)get_json("#{endpoint}/subscriptions/#{uri_encode(id)}")end# Get the latest Subscription that has the same subscriber_list# and email as the Subscription associated with the `id` passed.# This may or may not be the same Subscription.## @return [Hash] subscription: {# id# subscriber_list# subscriber# created_at# updated_at# ended_at# ended_reason# frequency# source# }defget_latest_matching_subscription(id)get_json("#{endpoint}/subscriptions/#{uri_encode(id)}/latest")end# Get Subscriptions for a Subscriber## @param [integer] Subscriber id# @param [string] Subscription order - title, created_at## @return [Hash] subscriber, subscriptionsdefget_subscriptions(id:,order: nil)iforderget_json("#{endpoint}/subscribers/#{uri_encode(id)}/subscriptions?order=#{uri_encode(order)}")elseget_json("#{endpoint}/subscribers/#{uri_encode(id)}/subscriptions")endend# Patch a Subscriber## @param [integer] Subscriber id# @param [string] Subscriber new_address## @return [Hash] subscriberdefchange_subscriber(id:,new_address:)patch_json("#{endpoint}/subscribers/#{uri_encode(id)}",new_address: new_address,)end# Patch a Subscription## @param [string] Subscription id# @param [string] Subscription frequency## @return [Hash] subscriptiondefchange_subscription(id:,frequency:)patch_json("#{endpoint}/subscriptions/#{uri_encode(id)}",frequency: frequency,)end# Verify a subscriber has control of a provided email## @param [string] address Address to send verification email to# @param [string] destination Path on GOV.UK that subscriber will be emailed## @return [Hash] subscriber#defsend_subscriber_verification_email(address:,destination:)post_json("#{endpoint}/subscribers/auth-token",address: address,destination: destination,)end# Verify a subscriber intends to be added to a subscription## @param [string] address Address to send verification email to# @param [string] frequency How often the subscriber wishes to be notified of new items# @param [string] topic_id The slugs/ID for the topic being subscribed to## return [Hash] subscription#defsend_subscription_verification_email(address:,frequency:,topic_id:)post_json("#{endpoint}/subscriptions/auth-token",address: address,frequency: frequency,topic_id: topic_id,)endprivatedefnested_query_string(params)Rack::Utils.build_nested_query(params)endend