module Slackr::Channel

Attributes

connection[RW]

Public Instance Methods

history(channel) click to toggle source
# File lib/slackr/channel.rb, line 19
def history(channel)
  request  = request_for(history_url(channel))
  response = make_request(request)
  messages = response["messages"]
  while response["has_more"] do
    oldest_timestamp = oldest_message(response["messages"])["ts"]
    request  = request_for(history_url(channel, oldest_timestamp))
    response = make_request(request)
    messages += response["messages"]
  end
  response.merge("messages" => messages)
end
init(connection) click to toggle source
# File lib/slackr/channel.rb, line 9
def init(connection)
  @connection = connection
  return self
end
list() click to toggle source
# File lib/slackr/channel.rb, line 14
def list
  request = request_for(url_for('list'))
  make_request(request)
end

Private Instance Methods

history_url(channel, timestamp=nil) click to toggle source
# File lib/slackr/channel.rb, line 42
def history_url(channel, timestamp=nil)
  base = "#{url_for('history')}&channel=#{channel}&count=1000"
  return base unless timestamp
  "#{base}&latest=#{timestamp}"
end
make_request(request) click to toggle source
# File lib/slackr/channel.rb, line 48
def make_request(request)
  response = connection.http_request(request)
  if response.code != "200"
    raise Slackr::ServiceError, "Slack.com - #{response.code} - #{response.body}"
  end
  JSON.parse(response.body)
end
oldest_message(messages) click to toggle source
# File lib/slackr/channel.rb, line 56
def oldest_message(messages)
  messages.min_by { |message| message["ts"]}
end
request_for(url) click to toggle source
# File lib/slackr/channel.rb, line 38
def request_for(url)
  Net::HTTP::Get.new(url)
end
url_for(action) click to toggle source
# File lib/slackr/channel.rb, line 34
def url_for(action)
  "#{connection.base_url}/api/channels.#{action}?token=#{connection.token}"
end