slack_messaging 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ed1a41806773a2013660b33d83b26c0e66e674df00c67a5f669b2e891baf24c5
4
- data.tar.gz: d57f53b3c1510be3be48b580667308bee30a7eae8500584fe7870e7ce5abc116
3
+ metadata.gz: bd3e90f703693ae103c78862c1c506cc48dcab4f04065d4aee1b6e60a9cab9da
4
+ data.tar.gz: 9cf11baa6f0d033e3c944a7a6d30255eb4ed94233a3a54cfa277c59566bdd91b
5
5
  SHA512:
6
- metadata.gz: '09a09b96d5ead64faa64566187efc058491fbdf44b0ef1bce5f0eee20f8185f8e496333afa079b6e0956e9cab461c262017712a83daa29da238c89203a6efa9b'
7
- data.tar.gz: 7d9cdd032f88b3aeafc365a1f9784f56bb750f6a285b405fb662cd5cc46e28ffad2bf43471a075a1301ca1c68bc78555c4aaea2ab8b8088e7e46fe4e93409cdd
6
+ metadata.gz: cc3b3d202c84093c07a6d0aae39f05dad04aa16a7b28fb66a57b4399e4f1bccdff049909d92fba9a56431a4171422d589a3b616c56b7ee72dad2aca0d48e5560
7
+ data.tar.gz: cab8ff992b73a96e41f4f8cb996df80b644ec304a58292d728f54ba5b3965695d4421c5f1df6819aad530981be893a1bfe8fb2c51cf2338142440787f3eff390
data/Gemfile.lock ADDED
@@ -0,0 +1,106 @@
1
+ PATH
2
+ remote: .
3
+ specs:
4
+ slack_messaging (2.2.0)
5
+ activesupport (~> 6.0)
6
+ gli (~> 2.10)
7
+ hashie (~> 4.1)
8
+ highline (~> 2.0)
9
+ httparty (~> 0.18)
10
+ json (~> 2.5)
11
+ rack (~> 2.2)
12
+
13
+ GEM
14
+ remote: https://rubygems.org/
15
+ specs:
16
+ activesupport (6.1.2.1)
17
+ concurrent-ruby (~> 1.0, >= 1.0.2)
18
+ i18n (>= 1.6, < 2)
19
+ minitest (>= 5.1)
20
+ tzinfo (~> 2.0)
21
+ zeitwerk (~> 2.3)
22
+ coderay (1.1.3)
23
+ concurrent-ruby (1.1.8)
24
+ diff-lcs (1.4.4)
25
+ faker (2.15.1)
26
+ i18n (>= 1.6, < 2)
27
+ ffi (1.14.2)
28
+ formatador (0.2.5)
29
+ gli (2.19.2)
30
+ guard (2.16.2)
31
+ formatador (>= 0.2.4)
32
+ listen (>= 2.7, < 4.0)
33
+ lumberjack (>= 1.0.12, < 2.0)
34
+ nenv (~> 0.1)
35
+ notiffany (~> 0.0)
36
+ pry (>= 0.9.12)
37
+ shellany (~> 0.0)
38
+ thor (>= 0.18.1)
39
+ guard-compat (1.2.1)
40
+ guard-rspec (4.7.3)
41
+ guard (~> 2.1)
42
+ guard-compat (~> 1.1)
43
+ rspec (>= 2.99.0, < 4.0)
44
+ hashie (4.1.0)
45
+ highline (2.0.3)
46
+ httparty (0.18.1)
47
+ mime-types (~> 3.0)
48
+ multi_xml (>= 0.5.2)
49
+ i18n (1.8.8)
50
+ concurrent-ruby (~> 1.0)
51
+ json (2.5.1)
52
+ listen (3.4.1)
53
+ rb-fsevent (~> 0.10, >= 0.10.3)
54
+ rb-inotify (~> 0.9, >= 0.9.10)
55
+ lumberjack (1.2.8)
56
+ method_source (1.0.0)
57
+ mime-types (3.3.1)
58
+ mime-types-data (~> 3.2015)
59
+ mime-types-data (3.2020.1104)
60
+ minitest (5.14.3)
61
+ multi_xml (0.6.0)
62
+ nenv (0.3.0)
63
+ notiffany (0.1.3)
64
+ nenv (~> 0.1)
65
+ shellany (~> 0.0)
66
+ pry (0.14.0)
67
+ coderay (~> 1.1)
68
+ method_source (~> 1.0)
69
+ rack (2.2.3)
70
+ rake (13.0.3)
71
+ rb-fsevent (0.10.4)
72
+ rb-inotify (0.10.1)
73
+ ffi (~> 1.0)
74
+ rspec (3.10.0)
75
+ rspec-core (~> 3.10.0)
76
+ rspec-expectations (~> 3.10.0)
77
+ rspec-mocks (~> 3.10.0)
78
+ rspec-core (3.10.1)
79
+ rspec-support (~> 3.10.0)
80
+ rspec-expectations (3.10.1)
81
+ diff-lcs (>= 1.2.0, < 2.0)
82
+ rspec-support (~> 3.10.0)
83
+ rspec-mocks (3.10.2)
84
+ diff-lcs (>= 1.2.0, < 2.0)
85
+ rspec-support (~> 3.10.0)
86
+ rspec-support (3.10.2)
87
+ shellany (0.0.1)
88
+ thor (1.1.0)
89
+ tzinfo (2.0.4)
90
+ concurrent-ruby (~> 1.0)
91
+ zeitwerk (2.4.2)
92
+
93
+ PLATFORMS
94
+ x86_64-darwin-19
95
+
96
+ DEPENDENCIES
97
+ bundler (~> 2.2)
98
+ faker (~> 2.15)
99
+ guard-rspec (~> 4.3)
100
+ pry (~> 0.13)
101
+ rake (~> 13.0)
102
+ rspec (~> 3.9)
103
+ slack_messaging!
104
+
105
+ BUNDLED WITH
106
+ 2.2.9
data/README.md CHANGED
@@ -26,42 +26,56 @@ gem install slack_messaging
26
26
 
27
27
  This project requires a config file that should look like this:
28
28
 
29
- ```
29
+ ```yml
30
30
  slack:
31
31
  channel: <AWESOME CHANNEL NAME>
32
32
  username: <AWESOME USER NAME>
33
33
  webhook_url: <SLACK WEBHOOK URL>
34
- icon_emoji: ":<SOME EMOJI>:"
34
+ icon_emoji: ':<SOME EMOJI>:'
35
35
  ```
36
36
 
37
- The default is for the file to be named `~/.slack_messaging.yml`, but a different path can be passed in like this:
37
+ To generate this file at `~/.slack_messaging.yml`, please run this command:
38
38
 
39
+ ```bash
40
+ slack-messaging setup
39
41
  ```
40
- $ slack-messaging --config="/PATH/TO/FILE/config.yml" slack
42
+
43
+ To obtain the webhook URL, go to [this link](https://api.slack.com/messaging/webhooks).
44
+
45
+ If you'd like to create the config file at a different directory, I recommend using the `setup` command, and then manually moving the file to your desired location:
46
+
47
+ ```bash
48
+ slack-messaging setup
49
+ # Walk through the prompts to create the file
50
+ mv ~/.slack_messaging.yml /PATH/TO/FILE/config.yml
41
51
  ```
42
52
 
43
- To obtain the webhook url, go to [this link](https://api.slack.com/incoming-webhooks).
53
+ And then you can pass in that specific file location like this:
44
54
 
45
- Okay, now the project will be ready to rock and roll.
55
+ ```bash
56
+ slack-messaging --config="/PATH/TO/FILE/config.yml" slack
57
+ ```
58
+
59
+ Once the config file is set up, the project is ready to go!
46
60
 
47
61
  To print a friendly message to Slack, run:
48
62
 
49
- ```
63
+ ```bash
50
64
  slack-messaging slack
51
65
  ```
52
66
 
53
- from the main directory. Here, no specific message is being given to print to Slack, so slack_messaging will choose a random quote. The random quotes are selected using the [Quotable API](http://api.quotable.io/).
67
+ Here, no specific message is being given to print to Slack, so slack_messaging will choose a random quote. The random quotes are selected using the [Quotable API](http://api.quotable.io/).
54
68
 
55
69
  However, what if you wanted to print something specific? Well, you can! Just run:
56
70
 
57
- ```
58
- slack-messaging slack "MESSAGE 1"
71
+ ```bash
72
+ slack-messaging slack 'MESSAGE 1'
59
73
  ```
60
74
 
61
75
  You can even print multiple messages at once:
62
76
 
63
- ```
64
- slack-messaging slack "MESSAGE 1" "MESSAGE 2" "MESSAGE 3" ... "MESSAGE N"
77
+ ```bash
78
+ slack-messaging slack 'MESSAGE 1' 'MESSAGE 2' 'MESSAGE 3' ... 'MESSAGE N'
65
79
  ```
66
80
 
67
81
  The output of slack_messaging will look something like this:
data/bin/slack-messaging CHANGED
@@ -10,23 +10,31 @@ version SlackMessaging::VERSION
10
10
 
11
11
  wrap_help_text :verbatim
12
12
 
13
- flag [:config], :desc => 'SlackMessaging config file path', :default_value => SlackMessaging::DefaultPaths.config
13
+ flag [:config], :desc => 'Slack Messaging config file path', :default_value => SlackMessaging::DefaultPaths.config
14
14
 
15
15
  program_long_desc """
16
16
  DOCUMENTATION
17
+ For documentation and help in setting up your configuration files,
18
+ see Slack Messaging's GitHub repo: https://github.com/emmahsax/slack_messaging
17
19
  """
18
20
 
19
21
  desc 'Prints a variety of messages to Slack'
20
22
  command 'slack' do |c|
23
+ pre do |global, command, options, args|
24
+ SlackMessaging::Config.load(global[:config])
25
+ true
26
+ end
27
+
21
28
  c.action do |global_options, options, args|
22
29
  SlackMessaging::Slack.execute(args, options)
23
30
  end
24
31
  end
25
32
 
26
- pre do |global,command,options,args|
27
- SlackMessaging::Config.load(global[:config])
28
- SlackMessaging::Config.set_config_options(global)
29
- true
33
+ desc 'Sets up a Slack Messaging config file at ~/.slack_messaging.yml'
34
+ command 'setup' do |c|
35
+ c.action do ||
36
+ SlackMessaging::Setup.execute
37
+ end
30
38
  end
31
39
 
32
40
  exit run(ARGV)
@@ -0,0 +1,33 @@
1
+ module SlackMessaging
2
+ class HighlineCli
3
+ def ask(prompt)
4
+ highline_client.ask(prompt) do |conf|
5
+ conf.readline = true
6
+ end.to_s
7
+ end
8
+
9
+ def ask_yes_no(prompt)
10
+ answer = highline_client.ask(prompt) do |conf|
11
+ conf.readline = true
12
+ end.to_s
13
+
14
+ answer.empty? ? true : !!(answer =~ /^y/i)
15
+ end
16
+
17
+ def ask_options(prompt, choices)
18
+ choices_as_string_options = ''
19
+ choices.each { |choice| choices_as_string_options << "#{choices.index(choice) + 1}. #{choice}\n" }
20
+ compiled_prompt = "#{prompt}\n#{choices_as_string_options.strip}"
21
+
22
+ index = highline_client.ask(compiled_prompt) do |conf|
23
+ conf.readline = true
24
+ end.to_i - 1
25
+
26
+ choices[index]
27
+ end
28
+
29
+ private def highline_client
30
+ @highline_client ||= HighLine.new
31
+ end
32
+ end
33
+ end
@@ -0,0 +1,81 @@
1
+ module SlackMessaging
2
+ class Setup
3
+ def self.execute
4
+ if config_file_exists?
5
+ answer = highline.ask_yes_no("It looks like the #{default_config} file already exists. Do you wish to replace it? (y/n)")
6
+
7
+ unless answer
8
+ puts "\nExiting because you selected to not replace the #{default_config} file..."
9
+ exit
10
+ end
11
+ end
12
+
13
+ create_or_update_config_file(ask_config_questions)
14
+ end
15
+
16
+ private
17
+
18
+ def self.create_or_update_config_file(answers)
19
+ contents = generate_config_file(answers)
20
+ puts "\nCreating or updating your #{default_config} file..."
21
+ File.open(default_config, 'w') { |file| file.puts contents }
22
+ puts "\nDone!"
23
+ end
24
+
25
+ def self.generate_config_file(answers)
26
+ file_contents = ''
27
+ file_contents << "slack:\n"
28
+ file_contents << " channel: #{answers[:channel].tr('#', '').strip}\n"
29
+ file_contents << " username: #{answers[:username].strip}\n"
30
+ file_contents << " webhook_url: #{answers[:webhook_url].strip}\n"
31
+ file_contents << " icon_emoji: '#{answers[:icon_emoji].strip}'"
32
+ file_contents
33
+ end
34
+
35
+ def self.config_file_exists?
36
+ File.exists?(default_config)
37
+ end
38
+
39
+ def self.ask_config_questions
40
+ answers = {}
41
+
42
+ answers[:webhook_url] = ask_question(
43
+ "\nWhat is your Slack webhook URL? If you don't have one yet, please navigate" \
44
+ " to https://api.slack.com/messaging/webhooks to create one, and then come back" \
45
+ " here and paste it in the Terminal."
46
+ )
47
+
48
+ unless answers[:webhook_url]
49
+ puts "\nExiting because Slack webhoook is required..."
50
+ exit
51
+ end
52
+
53
+ answers[:channel] = ask_question(
54
+ "\nWhat slack channel do you wish to post to? (default is \"#general\")"
55
+ ) || 'general'
56
+
57
+ answers[:username] = ask_question(
58
+ "\nWhat slack username do you wish to post as? (default is \"Let's Get Quoty\")"
59
+ ) || "Let's Get Quoty"
60
+
61
+ answers[:icon_emoji] = ask_question(
62
+ "\nWhat emoji would you like to post with (include the colons at the beginning and end of the emoji name)? (default is \":mailbox_with_mail:\")"
63
+ ) || ":mailbox_with_mail:"
64
+
65
+ answers
66
+ end
67
+
68
+ def self.ask_question(prompt)
69
+ answer = highline.ask(prompt)
70
+ answer.empty? ? nil : answer
71
+ end
72
+
73
+ def self.highline
74
+ @highline ||= SlackMessaging::HighlineCli.new
75
+ end
76
+
77
+ def self.default_config
78
+ SlackMessaging::DefaultPaths.config
79
+ end
80
+ end
81
+ end
@@ -1,3 +1,3 @@
1
1
  module SlackMessaging
2
- VERSION = '2.1.1'
2
+ VERSION = '2.2.0'
3
3
  end
@@ -2,16 +2,18 @@ require 'spec_helper'
2
2
  require 'slack_messaging'
3
3
 
4
4
  describe SlackMessaging::Config do
5
+ subject { SlackMessaging::Config }
6
+
5
7
  context 'config key methods' do
6
8
  it 'should return nil when not set' do
7
- expect(SlackMessaging::Config.doesnt_exist).to eql(nil)
8
- expect(SlackMessaging::Config.doesnt_exist?).to eql(false)
9
+ expect(subject.doesnt_exist).to eql(nil)
10
+ expect(subject.doesnt_exist?).to eql(false)
9
11
  end
10
12
 
11
13
  it 'should return the config value when set' do
12
14
  config_value = Faker::Lorem.word
13
- SlackMessaging::Config.new_value = config_value
14
- expect(SlackMessaging::Config.new_value).to eql(config_value)
15
+ subject.new_value = config_value
16
+ expect(subject.new_value).to eql(config_value)
15
17
  end
16
18
  end
17
19
 
@@ -35,19 +37,19 @@ describe SlackMessaging::Config do
35
37
  before do
36
38
  allow(YAML).to receive(:load_file).and_return(config_file)
37
39
  allow(File).to receive(:exist?).and_return(true)
38
- SlackMessaging::Config.load(Faker::Lorem.word)
40
+ subject.load(Faker::Lorem.word)
39
41
  end
40
42
 
41
43
  it 'calling a method corresponding to a key in the file should return the value' do
42
- expect(SlackMessaging::Config.domain).to eql(domain)
43
- expect(SlackMessaging::Config.slack).to be_kind_of(Hash)
44
- expect(SlackMessaging::Config.slack[:slack_option]).to eql(true)
44
+ expect(subject.domain).to eql(domain)
45
+ expect(subject.slack).to be_kind_of(Hash)
46
+ expect(subject.slack[:slack_option]).to eql(true)
45
47
  end
46
48
 
47
49
  it 'overwriting values should work' do
48
- expect(SlackMessaging::Config.slack).to be_kind_of(Hash)
49
- SlackMessaging::Config.slack = sentence
50
- expect(SlackMessaging::Config.slack).to eql(sentence)
50
+ expect(subject.slack).to be_kind_of(Hash)
51
+ subject.slack = sentence
52
+ expect(subject.slack).to eql(sentence)
51
53
  end
52
54
  end
53
55
  end
@@ -0,0 +1,49 @@
1
+ require 'spec_helper'
2
+ require 'slack_messaging'
3
+
4
+ describe SlackMessaging::HighlineCli do
5
+ let(:response) { double(:response, readline: true, to_i: 3) }
6
+ let(:highline_client) { double(:highline_cli, ask: response) }
7
+
8
+ before do
9
+ allow(HighLine).to receive(:new).and_return(highline_client)
10
+ end
11
+
12
+ describe '#ask' do
13
+ it 'should ask the highline client ask'do
14
+ expect(highline_client).to receive(:ask)
15
+ subject.ask(Faker::Lorem.sentence)
16
+ end
17
+
18
+ it 'should return a string' do
19
+ expect(subject.ask(Faker::Lorem.sentence)).to be_a(String)
20
+ end
21
+ end
22
+
23
+ describe '#ask_yes_no' do
24
+ it 'should ask the highline client ask'do
25
+ expect(highline_client).to receive(:ask)
26
+ subject.ask_yes_no(Faker::Lorem.sentence)
27
+ end
28
+
29
+ it 'should return a boolean' do
30
+ expect(subject.ask_yes_no(Faker::Lorem.sentence)).to be_falsey
31
+ end
32
+
33
+ it 'should return true if we say yes' do
34
+ allow(response).to receive(:to_s).and_return('y')
35
+ expect(subject.ask_yes_no(Faker::Lorem.sentence)).to be_truthy
36
+ end
37
+ end
38
+
39
+ describe '#ask_options' do
40
+ it 'should ask the highline client ask'do
41
+ expect(highline_client).to receive(:ask)
42
+ subject.ask_options(Faker::Lorem.sentence, ['one', 'two', 'three'])
43
+ end
44
+
45
+ it 'should return a string from the options' do
46
+ expect(subject.ask_options(Faker::Lorem.sentence, ['one', 'two', 'three'])).to be_a(String)
47
+ end
48
+ end
49
+ end
@@ -26,14 +26,16 @@ describe SlackMessaging::NotifySlack do
26
26
  SlackMessaging::Config.load(Faker::Lorem.word)
27
27
  end
28
28
 
29
+ subject { SlackMessaging::NotifySlack }
30
+
29
31
  it 'should call HTTParty' do
30
32
  expect(HTTParty).to receive(:post)
31
- message = SlackMessaging::NotifySlack.new(sentence)
33
+ message = subject.new(sentence)
32
34
  message.perform
33
35
  end
34
36
 
35
37
  it 'should define certain values' do
36
- message = SlackMessaging::NotifySlack.new(sentence)
38
+ message = subject.new(sentence)
37
39
  expect(message.text).to eq(sentence)
38
40
  expect(message.channel).to eq(channel)
39
41
  expect(message.username).to eq(username)
@@ -16,28 +16,30 @@ describe SlackMessaging::RandomMessage do
16
16
  allow(HTTParty).to receive(:get).and_return(quote_object)
17
17
  end
18
18
 
19
+ subject { SlackMessaging::RandomMessage }
20
+
19
21
  it 'should get a string message' do
20
- message = SlackMessaging::RandomMessage.acquire_random_quote
22
+ message = subject.acquire_random_quote
21
23
  expect(message).to be_instance_of(String)
22
24
  end
23
25
 
24
26
  it 'should get a message that includes a newline' do
25
- message = SlackMessaging::RandomMessage.acquire_random_quote
27
+ message = subject.acquire_random_quote
26
28
  expect(message.include?("\n")).to eq(true)
27
29
  end
28
30
 
29
31
  it 'should get a message that includes a —' do
30
- message = SlackMessaging::RandomMessage.acquire_random_quote
32
+ message = subject.acquire_random_quote
31
33
  expect(message.include?('—')).to eq(true)
32
34
  end
33
35
 
34
36
  it 'should use HTTParty to ping an API' do
35
37
  expect(HTTParty).to receive(:get)
36
- SlackMessaging::RandomMessage.acquire_random_quote
38
+ subject.acquire_random_quote
37
39
  end
38
40
 
39
41
  it 'should have the JSON parse the response content twice' do
40
42
  expect(JSON).to receive(:parse).at_least(2).times.and_return(JSON.parse(quote_json))
41
- SlackMessaging::RandomMessage.acquire_random_quote
43
+ subject.acquire_random_quote
42
44
  end
43
45
  end
@@ -0,0 +1,132 @@
1
+ require 'spec_helper'
2
+ require 'slack_messaging'
3
+
4
+ describe SlackMessaging::Setup do
5
+ let(:response) { double(:response, readline: true, to_s: Faker::Lorem.sentence) }
6
+ let(:highline_cli) { double(:highline_cli, ask: response, ask_yes_no: true) }
7
+ let(:answers) do
8
+ {
9
+ channel: Faker::Lorem.word,
10
+ username: Faker::Lorem.word,
11
+ webhook_url: Faker::Internet.url,
12
+ icon_emoji: ":#{Faker::Lorem.word}:"
13
+ }
14
+ end
15
+
16
+ before do
17
+ allow(SlackMessaging::HighlineCli).to receive(:new).and_return(highline_cli)
18
+ allow(subject).to receive(:puts)
19
+ end
20
+
21
+ after do
22
+ SlackMessaging::Setup.instance_variable_set("@highline", nil)
23
+ end
24
+
25
+ subject { SlackMessaging::Setup }
26
+
27
+ describe '#self.execute' do
28
+ it 'should ask a question if the config file exists' do
29
+ allow(File).to receive(:exists?).and_return(true)
30
+ expect(highline_cli).to receive(:ask_yes_no).and_return(true)
31
+ allow(subject).to receive(:create_or_update_config_file).and_return(true)
32
+ allow(subject).to receive(:ask_config_questions).and_return(true)
33
+ subject.execute
34
+ end
35
+
36
+ it 'should call to create or update the config file' do
37
+ allow(File).to receive(:exists?).and_return(true)
38
+ allow(highline_cli).to receive(:ask_yes_no).and_return(true)
39
+ expect(subject).to receive(:create_or_update_config_file).and_return(true)
40
+ expect(subject).to receive(:ask_config_questions).and_return(true)
41
+ subject.execute
42
+ end
43
+
44
+ it 'should exit if the user opts not to continue' do
45
+ allow(File).to receive(:exists?).and_return(true)
46
+ allow(highline_cli).to receive(:ask_yes_no).and_return(false)
47
+ expect(subject).not_to receive(:create_or_update_config_file)
48
+ expect(subject).not_to receive(:ask_config_questions)
49
+ expect{ subject.execute }.to raise_error(SystemExit)
50
+ end
51
+ end
52
+
53
+ describe '#self.create_or_update_config_file' do
54
+ it 'should generate the file based on the answers to the questions' do
55
+ expect(subject).to receive(:generate_config_file)
56
+ allow(File).to receive(:open).and_return(nil)
57
+ subject.send(:create_or_update_config_file, answers)
58
+ end
59
+
60
+ it 'should open the file for writing' do
61
+ allow(subject).to receive(:generate_config_file)
62
+ expect(File).to receive(:open).and_return(nil)
63
+ subject.send(:create_or_update_config_file, answers)
64
+ end
65
+ end
66
+
67
+ describe '#self.generate_config_file' do
68
+ it 'returns a string' do
69
+ expect(subject.send(:generate_config_file, answers)).to be_a(String)
70
+ end
71
+ end
72
+
73
+ describe '#self.config_file_exists?' do
74
+ it 'should return true if the file exists' do
75
+ allow(File).to receive(:exists?).and_return(true)
76
+ expect(subject.send(:config_file_exists?)).to eq(true)
77
+ end
78
+
79
+ it 'should return false if the file does not exist' do
80
+ allow(File).to receive(:exists?).and_return(false)
81
+ expect(subject.send(:config_file_exists?)).to eq(false)
82
+ end
83
+ end
84
+
85
+ describe '#self.ask_question' do
86
+ it 'should use highline to ask a question' do
87
+ expect(highline_cli).to receive(:ask).and_return('')
88
+ subject.send(:ask_question, Faker::Lorem.sentence)
89
+ end
90
+
91
+ it 'should return nil if the highline client gets an empty string' do
92
+ allow(highline_cli).to receive(:ask).and_return('')
93
+ expect(subject.send(:ask_question, Faker::Lorem.sentence)).to be_nil
94
+ end
95
+
96
+ it 'should return the answer if it is given' do
97
+ answer = Faker::Lorem.sentence
98
+ allow(highline_cli).to receive(:ask).and_return(answer)
99
+ expect(subject.send(:ask_question, Faker::Lorem.sentence)).to be(answer)
100
+ end
101
+ end
102
+
103
+ describe '#self.ask_config_questions' do
104
+ it 'should call to ask at least four questions' do
105
+ expect(subject).to receive(:ask_question).at_least(4).times
106
+ subject.send(:ask_config_questions)
107
+ end
108
+
109
+ it 'should exit if the slack URL is not given' do
110
+ allow(subject).to receive(:ask_question).and_return(nil)
111
+ expect{ subject.send(:ask_config_questions) }.to raise_error(SystemExit)
112
+ end
113
+
114
+ it 'should return the defaults if nothing is given' do
115
+ slack_url = Faker::Internet.url
116
+ allow(subject).to receive(:ask_question).with(
117
+ "\nWhat is your Slack webhook URL? If you don't have one yet, please navigate" \
118
+ " to https://api.slack.com/messaging/webhooks to create one, and then come back" \
119
+ " here and paste it in the Terminal."
120
+ ).and_return(slack_url)
121
+ allow(subject).to receive(:ask_question).and_return(nil)
122
+ expect(subject.send(:ask_config_questions)).to eq(
123
+ {
124
+ channel: 'general',
125
+ username: "Let's Get Quoty",
126
+ webhook_url: slack_url,
127
+ icon_emoji: ":mailbox_with_mail:"
128
+ }
129
+ )
130
+ end
131
+ end
132
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: slack_messaging
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emma Sax
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-02-21 00:00:00.000000000 Z
11
+ date: 2021-02-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -200,6 +200,7 @@ extensions: []
200
200
  extra_rdoc_files: []
201
201
  files:
202
202
  - Gemfile
203
+ - Gemfile.lock
203
204
  - Guardfile
204
205
  - LICENSE
205
206
  - QuoteExample.png
@@ -209,13 +210,17 @@ files:
209
210
  - lib/slack_messaging.rb
210
211
  - lib/slack_messaging/config.rb
211
212
  - lib/slack_messaging/default_paths.rb
213
+ - lib/slack_messaging/highline_cli.rb
212
214
  - lib/slack_messaging/notify_slack.rb
213
215
  - lib/slack_messaging/random_message.rb
216
+ - lib/slack_messaging/setup.rb
214
217
  - lib/slack_messaging/slack.rb
215
218
  - lib/slack_messaging/version.rb
216
219
  - spec/slack_messaging/config_spec.rb
220
+ - spec/slack_messaging/highline_cli_spec.rb
217
221
  - spec/slack_messaging/notify_slack_spec.rb
218
222
  - spec/slack_messaging/random_message_spec.rb
223
+ - spec/slack_messaging/setup_spec.rb
219
224
  - spec/spec_helper.rb
220
225
  homepage: https://github.com/emmahsax/slack_messaging
221
226
  licenses:
@@ -243,5 +248,7 @@ summary: Personalized Slack Messages
243
248
  test_files:
244
249
  - spec/spec_helper.rb
245
250
  - spec/slack_messaging/config_spec.rb
251
+ - spec/slack_messaging/highline_cli_spec.rb
246
252
  - spec/slack_messaging/notify_slack_spec.rb
247
253
  - spec/slack_messaging/random_message_spec.rb
254
+ - spec/slack_messaging/setup_spec.rb