lib/list.rb in createsend-0.1.1 vs lib/list.rb in createsend-0.2.0
- old
+ new
@@ -1,186 +1,185 @@
require 'createsend'
require 'json'
-# Represents a subscriber list and associated functionality.
-class List
- attr_reader :list_id
+module CreateSend
+ # Represents a subscriber list and associated functionality.
+ class List
+ attr_reader :list_id
- def initialize(list_id)
- @list_id = list_id
- end
+ def initialize(list_id)
+ @list_id = list_id
+ end
- # Creates a new list for a client.
- def self.create(client_id, title, unsubscribe_page, confirmed_opt_in, confirmation_success_page)
- options = { :body => {
- :Title => title,
- :UnsubscribePage => unsubscribe_page,
- :ConfirmedOptIn => confirmed_opt_in,
- :ConfirmationSuccessPage => confirmation_success_page }.to_json }
- response = CreateSend.post "/lists/#{client_id}.json", options
- response.parsed_response
- end
+ # Creates a new list for a client.
+ def self.create(client_id, title, unsubscribe_page, confirmed_opt_in, confirmation_success_page)
+ options = { :body => {
+ :Title => title,
+ :UnsubscribePage => unsubscribe_page,
+ :ConfirmedOptIn => confirmed_opt_in,
+ :ConfirmationSuccessPage => confirmation_success_page }.to_json }
+ response = CreateSend.post "/lists/#{client_id}.json", options
+ response.parsed_response
+ end
- # Deletes this list.
- def delete
- response = CreateSend.delete "/lists/#{list_id}.json", {}
- end
+ # Deletes this list.
+ def delete
+ response = CreateSend.delete "/lists/#{list_id}.json", {}
+ end
- # Creates a new custom field for this list.
- def create_custom_field(field_name, data_type, options=[])
- options = { :body => {
- :FieldName => field_name,
- :DataType => data_type,
- :Options => options }.to_json }
- response = post "customfields", options
- response.parsed_response
- end
+ # Creates a new custom field for this list.
+ def create_custom_field(field_name, data_type, options=[])
+ options = { :body => {
+ :FieldName => field_name,
+ :DataType => data_type,
+ :Options => options }.to_json }
+ response = post "customfields", options
+ response.parsed_response
+ end
- # Deletes a custom field associated with this list.
- def delete_custom_field(custom_field_key)
- custom_field_key = CGI.escape(custom_field_key)
- response = CreateSend.delete "/lists/#{list_id}/customfields/#{custom_field_key}.json", {}
- end
+ # Deletes a custom field associated with this list.
+ def delete_custom_field(custom_field_key)
+ custom_field_key = CGI.escape(custom_field_key)
+ response = CreateSend.delete "/lists/#{list_id}/customfields/#{custom_field_key}.json", {}
+ end
- # Updates the options of a multi-optioned custom field on this list.
- def update_custom_field_options(custom_field_key, new_options, keep_existing_options)
- custom_field_key = CGI.escape(custom_field_key)
- options = { :body => {
- :Options => new_options,
- :KeepExistingOptions => keep_existing_options }.to_json }
- response = put "customfields/#{custom_field_key}/options", options
- end
+ # Updates the options of a multi-optioned custom field on this list.
+ def update_custom_field_options(custom_field_key, new_options, keep_existing_options)
+ custom_field_key = CGI.escape(custom_field_key)
+ options = { :body => {
+ :Options => new_options,
+ :KeepExistingOptions => keep_existing_options }.to_json }
+ response = put "customfields/#{custom_field_key}/options", options
+ end
- # Gets the details of this list.
- def details
- response = CreateSend.get "/lists/#{list_id}.json", {}
- Hashie::Mash.new(response)
- end
+ # Gets the details of this list.
+ def details
+ response = CreateSend.get "/lists/#{list_id}.json", {}
+ Hashie::Mash.new(response)
+ end
- # Gets the custom fields for this list.
- def custom_fields
- response = get "customfields"
- response.map{|item| Hashie::Mash.new(item)}
- end
+ # Gets the custom fields for this list.
+ def custom_fields
+ response = get "customfields"
+ response.map{|item| Hashie::Mash.new(item)}
+ end
- # Gets the segments for this list.
- def segments
- response = get "segments"
- response.map{|item| Hashie::Mash.new(item)}
- end
+ # Gets the segments for this list.
+ def segments
+ response = get "segments"
+ response.map{|item| Hashie::Mash.new(item)}
+ end
- # Gets the stats for this list.
- def stats
- response = get "stats"
- Hashie::Mash.new(response)
- end
+ # Gets the stats for this list.
+ def stats
+ response = get "stats"
+ Hashie::Mash.new(response)
+ end
- # Gets the active subscribers for this list.
- def active(date, page=1, page_size=1000, order_field="email", order_direction="asc")
- options = { :query => {
- :date => date,
- :page => page,
- :pagesize => page_size,
- :orderfield => order_field,
- :orderdirection => order_direction } }
- response = get "active", options
- Hashie::Mash.new(response)
- end
+ # Gets the active subscribers for this list.
+ def active(date, page=1, page_size=1000, order_field="email", order_direction="asc")
+ options = { :query => {
+ :date => date,
+ :page => page,
+ :pagesize => page_size,
+ :orderfield => order_field,
+ :orderdirection => order_direction } }
+ response = get "active", options
+ Hashie::Mash.new(response)
+ end
- # Gets the bounced subscribers for this list.
- def bounced(date, page=1, page_size=1000, order_field="email", order_direction="asc")
- options = { :query => {
- :date => date,
- :page => page,
- :pagesize => page_size,
- :orderfield => order_field,
- :orderdirection => order_direction } }
- response = get "bounced", options
- Hashie::Mash.new(response)
- end
+ # Gets the bounced subscribers for this list.
+ def bounced(date, page=1, page_size=1000, order_field="email", order_direction="asc")
+ options = { :query => {
+ :date => date,
+ :page => page,
+ :pagesize => page_size,
+ :orderfield => order_field,
+ :orderdirection => order_direction } }
+ response = get "bounced", options
+ Hashie::Mash.new(response)
+ end
- # Gets the unsubscribed subscribers for this list.
- def unsubscribed(date, page=1, page_size=1000, order_field="email", order_direction="asc")
- options = { :query => {
- :date => date,
- :page => page,
- :pagesize => page_size,
- :orderfield => order_field,
- :orderdirection => order_direction } }
- response = get "unsubscribed", options
- Hashie::Mash.new(response)
- end
+ # Gets the unsubscribed subscribers for this list.
+ def unsubscribed(date, page=1, page_size=1000, order_field="email", order_direction="asc")
+ options = { :query => {
+ :date => date,
+ :page => page,
+ :pagesize => page_size,
+ :orderfield => order_field,
+ :orderdirection => order_direction } }
+ response = get "unsubscribed", options
+ Hashie::Mash.new(response)
+ end
- # Updates this list.
- def update(title, unsubscribe_page, confirmed_opt_in, confirmation_success_page)
- options = { :body => {
- :Title => title,
- :UnsubscribePage => unsubscribe_page,
- :ConfirmedOptIn => confirmed_opt_in,
- :ConfirmationSuccessPage => confirmation_success_page }.to_json }
- response = CreateSend.put "/lists/#{list_id}.json", options
- end
+ # Updates this list.
+ def update(title, unsubscribe_page, confirmed_opt_in, confirmation_success_page)
+ options = { :body => {
+ :Title => title,
+ :UnsubscribePage => unsubscribe_page,
+ :ConfirmedOptIn => confirmed_opt_in,
+ :ConfirmationSuccessPage => confirmation_success_page }.to_json }
+ response = CreateSend.put "/lists/#{list_id}.json", options
+ end
- # Please note: Any webhook-related methods below are not yet supported in production.
- # The gem version will be bumped when these are released in production.
+ # Gets the webhooks for this list.
+ def webhooks
+ response = get "webhooks"
+ response.map{|item| Hashie::Mash.new(item)}
+ end
- # Gets the webhooks for this list.
- def webhooks
- response = get "webhooks"
- response.map{|item| Hashie::Mash.new(item)}
- end
+ # Creates a new webhook for the specified events (an array of strings).
+ # Valid events are "Subscribe", "Deactivate", and "Update".
+ # Valid payload formats are "json", and "xml".
+ def create_webhook(events, url, payload_format)
+ options = { :body => {
+ :Events => events,
+ :Url => url,
+ :PayloadFormat => payload_format }.to_json }
+ response = post "webhooks", options
+ response.parsed_response
+ end
- # Creates a new webhook for the specified events (an array of strings).
- # Valid events are "Subscribe", "Unsubscribe", "Bounce", "Spam", and
- # "SubscriberUpdate". Valid payload formats are "json", and "xml".
- def create_webhook(events, url, payload_format)
- options = { :body => {
- :Events => events,
- :Url => url,
- :PayloadFormat => payload_format }.to_json }
- response = post "webhooks", options
- response.parsed_response
- end
+ # Tests that a post can be made to the endpoint specified for the webhook
+ # identified by webhook_id.
+ def test_webhook(webhook_id)
+ response = get "webhooks/#{webhook_id}/test"
+ true # An exception will be raised if any error occurs
+ end
- # Tests that a post can be made to the endpoint specified for the webhook
- # identified by webhook_id.
- def test_webhook(webhook_id)
- response = get "webhooks/#{webhook_id}/test"
- true # An exception will be raised if any error occurs
- end
+ # Deletes a webhook associated with this list.
+ def delete_webhook(webhook_id)
+ response = CreateSend.delete "/lists/#{list_id}/webhooks/#{webhook_id}.json", {}
+ end
- # Deletes a webhook associated with this list.
- def delete_webhook(webhook_id)
- response = CreateSend.delete "/lists/#{list_id}/webhooks/#{webhook_id}.json", {}
- end
+ # Activates a webhook associated with this list.
+ def activate_webhook(webhook_id)
+ options = { :body => '' }
+ response = put "webhooks/#{webhook_id}/activate", options
+ end
- # Activates a webhook associated with this list.
- def activate_webhook(webhook_id)
- options = { :body => '' }
- response = put "webhooks/#{webhook_id}/activate", options
- end
+ # De-activates a webhook associated with this list.
+ def deactivate_webhook(webhook_id)
+ options = { :body => '' }
+ response = put "webhooks/#{webhook_id}/deactivate", options
+ end
- # De-activates a webhook associated with this list.
- def deactivate_webhook(webhook_id)
- options = { :body => '' }
- response = put "webhooks/#{webhook_id}/deactivate", options
- end
+ private
- private
+ def get(action, options = {})
+ CreateSend.get uri_for(action), options
+ end
- def get(action, options = {})
- CreateSend.get uri_for(action), options
- end
+ def post(action, options = {})
+ CreateSend.post uri_for(action), options
+ end
- def post(action, options = {})
- CreateSend.post uri_for(action), options
- end
+ def put(action, options = {})
+ CreateSend.put uri_for(action), options
+ end
- def put(action, options = {})
- CreateSend.put uri_for(action), options
- end
+ def uri_for(action)
+ "/lists/#{list_id}/#{action}.json"
+ end
- def uri_for(action)
- "/lists/#{list_id}/#{action}.json"
end
-
end
\ No newline at end of file