From 01bb58ce1ac5b9e7db4b9db11f577870f0e0c3af Mon Sep 17 00:00:00 2001 From: Alex Robertson Date: Sat, 14 Mar 2020 15:47:34 -0700 Subject: [PATCH 1/4] First draft --- lib/channel.rb | 34 ++++++++++++++++++++++++++++++++++ lib/receiver.rb | 27 +++++++++++++++++++++++++++ lib/slack.rb | 31 ++++++++++++++++++++++++++++--- lib/user.rb | 37 +++++++++++++++++++++++++++++++++++++ lib/workspace.rb | 31 +++++++++++++++++++++++++++++++ 5 files changed, 157 insertions(+), 3 deletions(-) create mode 100644 lib/channel.rb create mode 100644 lib/receiver.rb create mode 100644 lib/user.rb create mode 100644 lib/workspace.rb diff --git a/lib/channel.rb b/lib/channel.rb new file mode 100644 index 00000000..e83d7681 --- /dev/null +++ b/lib/channel.rb @@ -0,0 +1,34 @@ +require 'httpparty' + +class channel Date: Sun, 15 Mar 2020 19:50:25 -0700 Subject: [PATCH 2/4] What have I even done? --- .gitignore | 5 ++- DEVELOPMENT.md | 6 +++ Rakefile | 7 +++- lib/channel.rb | 52 +++++++++++++------------ lib/receiver.rb | 47 ++++++++++++++--------- lib/slack.rb | 86 +++++++++++++++++++++++++++++------------- lib/user.rb | 83 ++++++++++++++++++++++------------------ lib/workspace.rb | 80 +++++++++++++++++++++++++-------------- test/channel_test.rb | 14 +++++++ test/receiver_test.rb | 21 +++++++++++ test/slack_test.rb | 0 test/user_test.rb | 14 +++++++ test/workspace_test.rb | 21 +++++++++++ 13 files changed, 299 insertions(+), 137 deletions(-) create mode 100644 DEVELOPMENT.md create mode 100644 test/channel_test.rb create mode 100644 test/receiver_test.rb create mode 100644 test/slack_test.rb create mode 100644 test/user_test.rb create mode 100644 test/workspace_test.rb diff --git a/.gitignore b/.gitignore index 3ff4fada..a7163fef 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,8 @@ .DS_Store -# Ignore environemnt variables +# Ignore environment variables .env + + + diff --git a/DEVELOPMENT.md b/DEVELOPMENT.md new file mode 100644 index 00000000..9d5edcae --- /dev/null +++ b/DEVELOPMENT.md @@ -0,0 +1,6 @@ +# Slack CLI Development + +## Commands +1. `rake` - executes the CLI (_same as `rake_run`_) +1. `rake run` - executes the CLI +1. `rake test` - runs unit tests diff --git a/Rakefile b/Rakefile index 0c2d13fe..a61c6097 100644 --- a/Rakefile +++ b/Rakefile @@ -1,9 +1,14 @@ +require 'rake/task' require 'rake/testtask' +task :run do + sh "ruby lib/slack.rb" +end + Rake::TestTask.new do |t| t.libs = ["lib"] t.warning = true t.test_files = FileList['test/*_test.rb'] end -task default: :test +task default: :run diff --git a/lib/channel.rb b/lib/channel.rb index e83d7681..3709682d 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,34 +1,36 @@ -require 'httpparty' +require_relative 'workspace.rb' +require_relative 'receiver.rb' -class channel Date: Sun, 15 Mar 2020 20:59:50 -0700 Subject: [PATCH 3/4] Wave one functionality without tests. --- lib/channel.rb | 11 ++++++----- lib/slack.rb | 7 ++----- lib/user.rb | 20 +++++++------------- lib/workspace.rb | 4 ++++ 4 files changed, 19 insertions(+), 23 deletions(-) diff --git a/lib/channel.rb b/lib/channel.rb index 3709682d..38755c61 100644 --- a/lib/channel.rb +++ b/lib/channel.rb @@ -1,3 +1,6 @@ +require 'httparty' +require 'table_print' + require_relative 'workspace.rb' require_relative 'receiver.rb' @@ -18,16 +21,14 @@ def summary end def self.show_all - response = SlackCLI::Channel.get("https://slack.com/api/conversations.list") - + clap_back = SlackCLI::Channel.get_url("https://slack.com/api/conversations.list") channels = [] - clap_back["channels"].each do |i| channels << SlackCLI::Channel.new( name: i["name"], id: i["id"], - focus: i["focus"], - headcount: i[""] #revisit this and fill out later + focus: i["topic"]["value"], + headcount: i["num_members"] ) end return channels diff --git a/lib/slack.rb b/lib/slack.rb index 4f875859..edf22256 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -5,7 +5,6 @@ require 'httparty' Dotenv.load -puts ENV require_relative 'workspace.rb' require_relative 'receiver.rb' @@ -34,14 +33,14 @@ def self.main case input when 1 puts "The users of this program are:\n" - tp workspace.expose_users, "real name", "username", "name" + tp workspace.expose_users, "legal_name", "id", "name" break when 2 puts "Enter a username to send your message to:\n" puts workspace.choose_user when 3 puts "The channels of this program are:\n" - tp workspace.channels, "name", "username", "focus", "headcount" + tp workspace.expose_channels, "name", "id", "focus", "headcount" break when 4 puts "Enter a channel name to post your message to:\n" @@ -65,7 +64,5 @@ def self.main puts "Thank you for using the Ada Slack CLI\n\n" end end - puts "$PROGRAM_NAME" - puts $PROGRAM_NAME main if __FILE__ == $PROGRAM_NAME end \ No newline at end of file diff --git a/lib/user.rb b/lib/user.rb index 5d6ad4a7..42889a55 100644 --- a/lib/user.rb +++ b/lib/user.rb @@ -3,7 +3,6 @@ require_relative 'workspace.rb' require_relative 'receiver.rb' -require_relative 'workspace.rb' module SlackCLI @@ -11,11 +10,11 @@ class User < Receiver attr_reader :legal_name, :status_text, :status_emoji - def initialize( legal_name:, status_text:, status_emoji:, name:, id:) - super(id: username, name: name) - + def initialize(legal_name:, status_text:, status_emoji:, id:, name:) + super(id: id, name: name) + @legal_name = legal_name - @status_text = status_text #TODO come back to these variables after it's clear what they're there for + @status_text = status_text @status_emoji = status_emoji end @@ -25,22 +24,17 @@ def summary def self.show_all clap_back = SlackCLI::User.get_url("https://slack.com/api/users.list") - puts "Ralph" users = [] - puts clap_back - clap_back["headcount"].each do |spec| - puts "Ralph 3" + clap_back["members"].each do |spec| users << SlackCLI::User.new( + legal_name: spec["real_name"], name: spec["name"], - id: spec["username"], + id: spec["id"], status_text: spec["profile"]["status_text"], status_emoji: spec["profile"]["status_emoji"] ) - puts "Ralph 4" end - puts "Ralph 5" return users - puts "Ralph 6" end end end \ No newline at end of file diff --git a/lib/workspace.rb b/lib/workspace.rb index 201d978b..b4686880 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -44,6 +44,10 @@ def expose_users @users = SlackCLI::User.show_all end + def expose_channels + @channels = SlackCLI::Channel.show_all + end + # Play with this further def speak body_talk = gets.chomp From 72c3f20bae578f156575bb6d7d7a7ba50448b500 Mon Sep 17 00:00:00 2001 From: Alex Robertson Date: Mon, 16 Mar 2020 00:11:32 -0700 Subject: [PATCH 4/4] Completed wave 1-3 functionality sans tests. --- lib/receiver.rb | 3 +-- lib/slack.rb | 19 +++++++++---------- lib/workspace.rb | 41 ++++++++++++++++++++++++++--------------- 3 files changed, 36 insertions(+), 27 deletions(-) diff --git a/lib/receiver.rb b/lib/receiver.rb index eb60e9ed..30cf091f 100644 --- a/lib/receiver.rb +++ b/lib/receiver.rb @@ -12,11 +12,10 @@ def initialize(id:, name:) @name = name end - # https://api.slack.com/methods/chat.postMessage def give_slack(body_talk) clap_back = HTTParty.post("https://slack.com/api/chat.postMessage", query: {token: ENV['BOT_TOKEN'], channel: self.id, text: body_talk}) - unless response.code == 200 || response["ok"] != false + unless clap_back.code == 200 || clap_back["ok"] != false raise ArgumentError.new("Whoops. Someone dropped the butter on the cat toy: #{clap_back["error"]}") end return clap_back diff --git a/lib/slack.rb b/lib/slack.rb index edf22256..73b5cff5 100755 --- a/lib/slack.rb +++ b/lib/slack.rb @@ -29,7 +29,8 @@ def self.main puts "Please enter the number entry you'd like to execute:" input = gets.chomp.to_i - while input != 7 do + # function exits when input == 7 + while true do case input when 1 puts "The users of this program are:\n" @@ -46,22 +47,20 @@ def self.main puts "Enter a channel name to post your message to:\n" puts workspace.choose_channel when 5 - until workspace.chosen != nil - puts "Please enter a username or channel name." - input = gets.chomp.to_i - puts input.summary - end + workspace.deets when 6 puts "Enter the message you'd like to send here:\n\n" body_talk = gets.chomp + workspace.speak(body_talk) + when 7 + puts "Thank you for using the Ada Slack CLI\n\n" + return else puts "Hmm, I might have the memory of a goldfish; I don't remember that option being listed. Try again now?\n\n" input = gets.chomp.to_i end - end - - if input == 7 - puts "Thank you for using the Ada Slack CLI\n\n" + puts "Please enter a new command." + input = gets.chomp.to_i end end main if __FILE__ == $PROGRAM_NAME diff --git a/lib/workspace.rb b/lib/workspace.rb index b4686880..0a3a8410 100644 --- a/lib/workspace.rb +++ b/lib/workspace.rb @@ -16,28 +16,31 @@ def initialize end def choose_channel - sought = gets.chomp + sought = gets.chomp.downcase + + expose_channels channels.each do |channel| if channel.name == sought || channel.id == sought @chosen = channel - return "Your entry, #{chosen.name} has been chosen." + return "Selected #{channel.name}." end - end - - @chosen = nil - return "That channel couldn't be recognized." - end + end + return "Could not find channel." + end def choose_user - sought = gets.chomp + sought = gets.chomp.downcase + + expose_users users.each do |user| - if user.name == sought || channel.id == sought - @chosen = channel - return "Your entry, #{chosen.name} has been chosen." + if user.name == sought || user.id == sought + @chosen = user + return "Selected #{user.name}." end end + return "Could not find user." end def expose_users @@ -48,10 +51,18 @@ def expose_channels @channels = SlackCLI::Channel.show_all end - # Play with this further - def speak - body_talk = gets.chomp - @chosen.speak(body_talk) + def deets + if @chosen + @chosen.summary + return + end + puts "" + end + + def speak(body_talk) + unless @chosen == nil + @chosen.give_slack(body_talk) + end end end end \ No newline at end of file