# encoding: utf-8
module Github
class Activity::Notifications < API
# List your notifications
#
# List all notifications for the current user, grouped by repository.
#
# = Parameters
# * :all - Optional boolean - true to show notifications marked as read.
# * :participating - Optional boolean - true to show only
# notifications in which the user is directly
# participating or mentioned.
# * :since - Optional string - filters out any notifications updated
# before the given time. The time should be passed in as
# UTC in the ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.
# Example: “2012-10-09T23:39:01Z”.
#
# = Examples
# github = Github.new oauth_token: 'token'
# github.activity.notifications.list
#
# List your notifications in a repository
#
# = Examples
# github = Github.new
# github.activity.notifications.list user: 'user-name', repo: 'repo-name'
#
def list(*args)
params = arguments(args) do
sift %w[ all participating since user repo]
end.params
response = if ( (user_name = params.delete("user")) &&
(repo_name = params.delete("repo")) )
get_request("/repos/#{user_name}/#{repo_name}/notifications", params)
else
get_request("/notifications", params)
end
return response unless block_given?
response.each { |el| yield el }
end
alias :all :list
# View a single thread
#
# = Examples
# github = Github.new oauth_token: 'token'
# github.activity.notifications.get 'thread_id'
# github.activity.notifications.get 'thread_id' { |thread| ... }
#
def get(*args)
arguments(args, :required => [:thread_id])
response = get_request("/notifications/threads/#{thread_id}", arguments.params)
return response unless block_given?
response.each { |el| yield el }
end
alias :find :get
# Mark as read
#
# Marking a notification as “read” removes it from the default view on GitHub.com.
#
# = Parameters
#
# * :unread - boolean - Changes the unread status of the threads.
# * :read - boolean - Inverse of "unread"
# * :last_read_at - optional string time - describes the last point
# that notifications were checked. Anything updated
# since this time will not be updated. Default: Now.
# Expected in ISO 8601 format: YYYY-MM-DDTHH:MM:SSZ.
# Example: “2012-10-09T23:39:01Z”.
#
# = Examples
# github = Github.new oauth_token: 'token'
# github.activity.notifications.mark read: true
#
# Mark notifications as read in a repository
#
# = Examples
# github.activity.notifications.mark user: 'user-name', repo: 'repo-name',
# read: true
#
# Mark a thread as read
#
# = Examples
# github.activity.notifications.mark thread_id: 'id', read: true
#
def mark(*args)
params = arguments(args) do
sift %w[ unread read last_read_at user repo thread_id]
end.params
if ( (user_name = params.delete("user")) &&
(repo_name = params.delete("repo")) )
put_request("/repos/#{user_name}/#{repo_name}/notifications", params)
elsif (thread_id = params.delete("thread_id"))
patch_request("/notifications/threads/#{thread_id}", params)
else
put_request("/notifications", params)
end
end
# Check to see if the current user is subscribed to a thread.
#
# = Examples
# github = Github.new oauth_token: 'token'
# github.activity.notifications.subscribed? 'thread-id'
#
def subscribed?(*args)
arguments(args, :required => [:thread_id])
get_request("/notifications/threads/#{thread_id}/subscription", arguments.params)
end
# Create a thread subscription
#
# This lets you subscribe to a thread, or ignore it. Subscribing to a thread
# is unnecessary if the user is already subscribed to the repository. Ignoring
# a thread will mute all future notifications (until you comment or get
# @mentioned).
#
# = Parameters
# * :subscribed - boolean - determines if notifications should be
# received from this thread.
# * :ignored - boolean - deterimines if all notifications should be
# blocked from this thread.
# = Examples
# github = Github.new oauth_token: 'token'
# github.activity.notifications.create 'thread-id',
# 'subscribed': true
# 'ignored': false
#
def create(*args)
arguments(args, :required => [:thread_id])
put_request("/notifications/threads/#{thread_id}/subscription", arguments.params)
end
# Delete a thread subscription
#
# = Examples
# github = Github.new oauth_token: 'token'
# github.activity.notifications.delete 'thread_id'
#
def delete(*args)
arguments(args, :required => [:thread_id])
delete_request("/notifications/threads/#{thread_id}/subscription", arguments.params)
end
alias :remove :delete
end # Activity::Notifications
end # Github