Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
65127cc
slack authentication set up
dnguye2 Mar 11, 2020
7899141
made loop to print out each channel
dnguye2 Mar 11, 2020
dbe9e8b
created workspace class with user and channel vars
dnguye2 Mar 11, 2020
2c9ab14
slack cli menu input created
dnguye2 Mar 12, 2020
93c782e
required slack and workspace ruby files
dnguye2 Mar 12, 2020
5cd04b1
base for list channels option completed
dnguye2 Mar 13, 2020
53117a4
initial set up of classes
dnguye2 Mar 13, 2020
199da7c
table print working
dnguye2 Mar 13, 2020
4b7307f
created list_channels method
dnguye2 Mar 13, 2020
9e7715c
list channels and list users methods made
dnguye2 Mar 13, 2020
21162cb
set up recipient class
dnguye2 Mar 14, 2020
a491fec
tested and added list channels method
dnguye2 Mar 14, 2020
3da4b37
removed unnecessary file
dnguye2 Mar 14, 2020
3f719ba
tested and added list user method
dnguye2 Mar 14, 2020
2014a56
added list user and channel methods+cleaned code
dnguye2 Mar 14, 2020
9d24980
cleaned up code
dnguye2 Mar 14, 2020
4cbb62f
casettes for list channels and users method
dnguye2 Mar 14, 2020
cb19637
added filter to remove slack token being public
dnguye2 Mar 14, 2020
2744867
added select user, channel, and details as options
dnguye2 Mar 14, 2020
1a2703d
created and tested select channel and user methods
dnguye2 Mar 16, 2020
9651cc7
cleaned up tests for select channel and user
dnguye2 Mar 16, 2020
b3aeea9
allowed slack_id for input for select channel+user
dnguye2 Mar 16, 2020
471b001
fixed workspace_test so it could be used offline
dnguye2 Mar 16, 2020
5e669c2
added send message method
dnguye2 Mar 16, 2020
674ce24
cleaned code and fixed wording of tests
dnguye2 Mar 16, 2020
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,5 +2,5 @@

.DS_Store

# Ignore environemnt variables
# Ignore environment variables
.env
37 changes: 37 additions & 0 deletions lib/channel.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
require_relative 'recipient'

class Channel < Recipient

attr_reader :member_count, :topic

def initialize(member_count:, topic:, name:, slack_id:)
super(name: name, slack_id: slack_id)

@member_count = member_count
@topic = topic
end

def details
tp self, "name", "topic", "member_count", "slack_id"
end

# =====Class methods=====
def self.list_all

response = Channel.get("https://slack.com/api/channels.list")

# parsing the data


channels = response["channels"].map do |item|
Channel.new(
member_count: (item["members"]).length,
topic: item["topic"]["value"],
name: item["name"],
slack_id: item["id"],
)
end

return channels
end
end
54 changes: 54 additions & 0 deletions lib/recipient.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,54 @@
require "httparty"
require 'dotenv'

Dotenv.load

class Recipient

attr_reader :slack_id, :name

def initialize(slack_id:, name:)
@slack_id = slack_id
@name = name
end

def send_message(text)
response = HTTParty.post("https://slack.com/api/chat.postMessage",
query: {token: ENV['SLACK_TOKEN'],
channel: self.slack_id,
text: text})
if response.code != 200 || response["ok"] == false
raise SlackAPIError, "We encountered a problem: #{response["error"]}"
end
end

def details
# implement in child class
end


# =====Class methods=====

# gets url, based off of API documentation
def self.get(url)
# send message using HTTParty
response = HTTParty.get(url, query: {token: ENV['SLACK_TOKEN']})

# accounting for errors
# slack still gives 200 code
if response.code != 200 || response["ok"] == false
raise SlackAPIError, "We encountered a problem: #{response["error"]}"
end

return response
end

def self.list_all
# to be defined in a child class
end

end


class SlackAPIError < Exception
end
77 changes: 73 additions & 4 deletions lib/slack.rb
Original file line number Diff line number Diff line change
@@ -1,12 +1,81 @@
#!/usr/bin/env ruby
# !/usr/bin/env ruby
require 'httparty'
require 'dotenv'
require 'table_print'
require_relative 'workspace'

def main
Dotenv.load

def get_user_choice
puts "\n"
puts "Welcome to the Ada Slack CLI!"
print "Please select one of the options:
(1) list users
(2) list channels
(3) select user
(4) select channel
(5) details
(6) send message
(7) quit
\n Selection: "


selection = gets.chomp

puts ""

return selection
end

def main
# interface layout inspired by instructor solar system implementation
program_running = true
workspace = Workspace.new


# TODO project
while program_running
user_choice = get_user_choice

puts "Thank you for using the Ada Slack CLI"
case user_choice.downcase
when "list users", "1"
tp workspace.users, "name", "real_name", "slack_id"

when "list channels", "2"
tp workspace.channels, "name", "topic", "member_count", "slack_id"

when "select user", "3"
print "Please provide a user name: "
puts workspace.select_user

when "select channel", "4"
print "Please provide a channel name: "
puts workspace.select_channel

when "details", "5"
if workspace.selected == nil
puts "No channel or user selected."
else
workspace.show_details
end

when "send message", "6"
if workspace.selected == nil
puts "No channel or user selected."
else
print "Enter your message: "
workspace.send_message
end

when "quit", "7"
program_running = false
puts "Thank you for using the Ada Slack CLI!"

else
puts "Invalid selection. Please provide a valid action."
end
end
end



main if __FILE__ == $PROGRAM_NAME
36 changes: 36 additions & 0 deletions lib/user.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,36 @@
require_relative 'recipient'

class User < Recipient

attr_reader :real_name

def initialize(real_name:, name: , slack_id:)
super(name: name, slack_id: slack_id)

@real_name = real_name
end


def details
tp self, "name", "real_name", "slack_id"
end

# =====Class methods=====
def self.list_all

response = User.get("https://slack.com/api/users.list")

# parsing the data


users = response["members"].map do |item|
User.new(
real_name: item["real_name"],
name: item["name"],
slack_id: item["id"],
)
end

return users
end
end
56 changes: 56 additions & 0 deletions lib/workspace.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,56 @@
require_relative 'channel'
require_relative 'user'

class Workspace

attr_reader :users, :channels, :selected

def initialize()
@users = User.list_all
@channels = Channel.list_all
@selected = nil
end

def get_user_input
gets.chomp
end

def select_user
user_input = get_user_input

users.each do |user|
if user.name == user_input || user.slack_id == user_input
@selected = user
return "#{selected.name} has been selected"
end
end

@selected = nil
return "User could not be found."
end

def select_channel
user_input = get_user_input

channels.each do |channel|
if channel.name == user_input || channel.slack_id == user_input
@selected = channel
return "#{selected.name} has been selected"
end
end

@selected = nil
return "Channel could not be found."
end

def show_details
@selected.details
end

def send_message
text = get_user_input

@selected.send_message(text)
end

end
Loading