slack_messaging 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: e6742192033a64bb2935e5af6486ea356d54684f501515f22eb8a24c200fff61
4
- data.tar.gz: 0d880c5cd858c778f06c9047e911927a1cb2ab2ee6b53a89b20b9e23a61ad2a9
3
+ metadata.gz: b90f38dcdaf24ec98961f9cf3311570daf0087c1308b63483762d158f04161f7
4
+ data.tar.gz: 5e8fdef06dd5285ff63d922ca7e1b8e18eef0149104e26a155d8d1bb5916576e
5
5
  SHA512:
6
- metadata.gz: 8458be91785ae94772e960f5f0705a2a611b36c286f694d0eb0ac4abe86fdd9d6867aa89d45dc9c44d721dbdb7bd9f34365ca5121f1d85ac0fd027d33439dbf4
7
- data.tar.gz: 7485f64ff53624785968f06a25e109a8042aa1e7e63412d7c7a40b78da8209f643e06f62130b3c8e7ba8d0677db2445950b2a9fca0ceb5199b03c71d10592bd3
6
+ metadata.gz: 2461540b052fc9a790da9e2e11da01b496d08260db928c61c7e11dcd67add9a75e15feab6f03f8dcb029807db6f6205a3fa517d358bc629f606732bed3397b7f
7
+ data.tar.gz: 17dcb6ba4aa5f6c98d29611c3e08bb05080aa009c66de4e97ded5194fb31dd3296d4bae091ec9eedc59f142e8d4d862c1d28809a705a0f5282652c1f4f6b049c
data/Gemfile.lock CHANGED
@@ -1,11 +1,11 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- slack_messaging (3.0.0)
4
+ slack_messaging (3.1.0)
5
5
  activesupport (~> 6.0)
6
6
  gli (~> 2.10)
7
7
  hashie (~> 4.1)
8
- highline (~> 2.0)
8
+ highline_wrapper (~> 0.1.0)
9
9
  httparty (~> 0.18)
10
10
  json (~> 2.5)
11
11
  rack (~> 2.2)
@@ -44,6 +44,8 @@ GEM
44
44
  rspec (>= 2.99.0, < 4.0)
45
45
  hashie (4.1.0)
46
46
  highline (2.0.3)
47
+ highline_wrapper (0.1.0)
48
+ highline (~> 2.0)
47
49
  httparty (0.18.1)
48
50
  mime-types (~> 3.0)
49
51
  multi_xml (>= 0.5.2)
@@ -120,7 +122,7 @@ DEPENDENCIES
120
122
  pry (~> 0.13)
121
123
  rake (~> 13.0)
122
124
  rspec (~> 3.9)
123
- rubocop
125
+ rubocop (~> 1.10)
124
126
  slack_messaging!
125
127
 
126
128
  BUNDLED WITH
data/README.md CHANGED
@@ -86,7 +86,7 @@ I hope you enjoy printing fun and specialized messages to Slack!
86
86
 
87
87
  ### Tests
88
88
 
89
- To run the tests, run `bundle exec rspec` from the command line. GitHub Actions will also run the tests upon every commit to make sure they're up to date and that everything is working correctly. Locally, you can also run `bundle exec guard` to automatically run tests as you develop! There are currently only tests for the `notify_slack` and `random_message` classes. Feel free to help us add more!
89
+ To run the tests, run `bundle exec rspec` from the command line. GitHub Actions will also run the tests upon every commit to make sure they're up to date and that everything is working correctly. Locally, you can also run `bundle exec guard` to automatically run tests as you develop!
90
90
 
91
91
  ## Contributing
92
92
 
@@ -3,7 +3,7 @@
3
3
  require 'yaml'
4
4
  require 'hashie'
5
5
  require 'httparty'
6
- require 'highline'
6
+ require 'highline_wrapper'
7
7
  require 'json'
8
8
 
9
9
  files = "#{File.expand_path(File.join(File.dirname(File.absolute_path(__FILE__)), 'slack_messaging'))}/**/*.rb"
@@ -36,21 +36,17 @@ module SlackMessaging
36
36
  File.exist?(default_config)
37
37
  end
38
38
 
39
- # rubocop:disable Metrics/MethodLength:
39
+ # rubocop:disable Metrics/MethodLength
40
40
  def self.ask_config_questions
41
41
  answers = {}
42
42
 
43
43
  answers[:webhook_url] = ask_question(
44
44
  "What is your Slack webhook URL? If you don't have one yet, please navigate" \
45
45
  ' to https://api.slack.com/messaging/webhooks to create one, and then come back' \
46
- ' here and paste it in the Terminal.'
46
+ ' here and paste it in the Terminal.',
47
+ required: true
47
48
  )
48
49
 
49
- unless answers[:webhook_url]
50
- puts "\nExiting because Slack webhoook is required..."
51
- exit
52
- end
53
-
54
50
  answers[:channel] = ask_question(
55
51
  "\nWhat slack channel do you wish to post to? (default is \"#general\")"
56
52
  ) || 'general'
@@ -68,13 +64,25 @@ module SlackMessaging
68
64
  end
69
65
  # rubocop:enable Metrics/MethodLength
70
66
 
71
- def self.ask_question(prompt)
67
+ # rubocop:disable Metrics/MethodLength
68
+ def self.ask_question(prompt, required: false)
72
69
  answer = highline.ask(prompt)
73
- answer.empty? ? nil : answer
70
+
71
+ if required
72
+ if answer.empty?
73
+ puts "\nThis question is required.\n\n"
74
+ ask_question(prompt, required: true)
75
+ else
76
+ answer
77
+ end
78
+ else
79
+ answer.empty? ? nil : answer
80
+ end
74
81
  end
82
+ # rubocop:enable Metrics/MethodLength
75
83
 
76
84
  def self.highline
77
- @highline ||= SlackMessaging::HighlineCli.new
85
+ @highline ||= HighlineWrapper.new
78
86
  end
79
87
 
80
88
  def self.default_config
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SlackMessaging
4
- VERSION = '3.0.0'
4
+ VERSION = '3.1.0'
5
5
  end
@@ -28,20 +28,18 @@ describe SlackMessaging::NotifySlack do
28
28
  SlackMessaging::Config.load(Faker::Lorem.word)
29
29
  end
30
30
 
31
- subject { SlackMessaging::NotifySlack }
31
+ subject { SlackMessaging::NotifySlack.new(sentence) }
32
32
 
33
33
  it 'should call HTTParty' do
34
34
  expect(HTTParty).to receive(:post)
35
- message = subject.new(sentence)
36
- message.perform
35
+ subject.perform
37
36
  end
38
37
 
39
38
  it 'should define certain values' do
40
- message = subject.new(sentence)
41
- expect(message.text).to eq(sentence)
42
- expect(message.channel).to eq(channel)
43
- expect(message.username).to eq(username)
44
- expect(message.webhook_url).to eq(webhook)
45
- expect(message.icon_emoji).to eq(emoji)
39
+ expect(subject.text).to eq(sentence)
40
+ expect(subject.channel).to eq(channel)
41
+ expect(subject.username).to eq(username)
42
+ expect(subject.webhook_url).to eq(webhook)
43
+ expect(subject.icon_emoji).to eq(emoji)
46
44
  end
47
45
  end
@@ -4,8 +4,7 @@ require 'spec_helper'
4
4
  require 'slack_messaging'
5
5
 
6
6
  describe SlackMessaging::Setup do
7
- let(:response) { double(:response, readline: true, to_s: Faker::Lorem.sentence) }
8
- let(:highline_cli) { double(:highline_cli, ask: response, ask_yes_no: true) }
7
+ let(:highline_wrapper) { double(:highline_wrapper, ask: Faker::Lorem.word, ask_yes_no: true) }
9
8
  let(:answers) do
10
9
  {
11
10
  channel: Faker::Lorem.word,
@@ -16,7 +15,7 @@ describe SlackMessaging::Setup do
16
15
  end
17
16
 
18
17
  before do
19
- allow(SlackMessaging::HighlineCli).to receive(:new).and_return(highline_cli)
18
+ allow(HighlineWrapper).to receive(:new).and_return(highline_wrapper)
20
19
  allow(subject).to receive(:puts)
21
20
  end
22
21
 
@@ -30,7 +29,7 @@ describe SlackMessaging::Setup do
30
29
  it 'should ask a question if the config file exists' do
31
30
  allow(subject).to receive(:config_file_exists?).and_return(true)
32
31
  allow(File).to receive(:exists?).and_return(true)
33
- expect(highline_cli).to receive(:ask_yes_no).and_return(true)
32
+ expect(highline_wrapper).to receive(:ask_yes_no).and_return(true)
34
33
  allow(subject).to receive(:create_or_update_config_file).and_return(true)
35
34
  allow(subject).to receive(:ask_config_questions).and_return(true)
36
35
  subject.execute
@@ -38,7 +37,7 @@ describe SlackMessaging::Setup do
38
37
 
39
38
  it 'should call to create or update the config file' do
40
39
  allow(File).to receive(:exists?).and_return(true)
41
- allow(highline_cli).to receive(:ask_yes_no).and_return(true)
40
+ allow(highline_wrapper).to receive(:ask_yes_no).and_return(true)
42
41
  expect(subject).to receive(:create_or_update_config_file).and_return(true)
43
42
  expect(subject).to receive(:ask_config_questions).and_return(true)
44
43
  subject.execute
@@ -47,7 +46,7 @@ describe SlackMessaging::Setup do
47
46
  it 'should skip if the user opts not to continue' do
48
47
  allow(subject).to receive(:config_file_exists?).and_return(true)
49
48
  allow(File).to receive(:exists?).and_return(true)
50
- allow(highline_cli).to receive(:ask_yes_no).and_return(false)
49
+ allow(highline_wrapper).to receive(:ask_yes_no).and_return(false)
51
50
  expect(subject).not_to receive(:create_or_update_config_file)
52
51
  expect(subject).not_to receive(:ask_config_questions)
53
52
  subject.execute
@@ -88,49 +87,69 @@ describe SlackMessaging::Setup do
88
87
 
89
88
  describe '#self.ask_question' do
90
89
  it 'should use highline to ask a question' do
91
- expect(highline_cli).to receive(:ask).and_return('')
90
+ expect(highline_wrapper).to receive(:ask).and_return('')
92
91
  subject.send(:ask_question, Faker::Lorem.sentence)
93
92
  end
94
93
 
95
94
  it 'should return nil if the highline client gets an empty string' do
96
- allow(highline_cli).to receive(:ask).and_return('')
95
+ allow(highline_wrapper).to receive(:ask).and_return('')
97
96
  expect(subject.send(:ask_question, Faker::Lorem.sentence)).to be_nil
98
97
  end
99
98
 
100
99
  it 'should return the answer if it is given' do
101
100
  answer = Faker::Lorem.sentence
102
- allow(highline_cli).to receive(:ask).and_return(answer)
101
+ allow(highline_wrapper).to receive(:ask).and_return(answer)
103
102
  expect(subject.send(:ask_question, Faker::Lorem.sentence)).to be(answer)
104
103
  end
105
104
  end
106
105
 
107
106
  describe '#self.ask_config_questions' do
108
107
  it 'should call to ask at least four questions' do
109
- expect(subject).to receive(:ask_question).at_least(4).times
108
+ expect(subject).to receive(:ask_question).at_least(4).times.and_return(Faker::Lorem.word)
110
109
  subject.send(:ask_config_questions)
111
110
  end
112
111
 
113
- it 'should exit if the slack URL is not given' do
114
- allow(subject).to receive(:ask_question).and_return(nil)
115
- expect { subject.send(:ask_config_questions) }.to raise_error(SystemExit)
112
+ it 'should recurse if the slack URL is not given' do
113
+ allow(highline_wrapper).to receive(:ask).with(
114
+ "What is your Slack webhook URL? If you don't have one yet, please navigate" \
115
+ ' to https://api.slack.com/messaging/webhooks to create one, and then come back' \
116
+ ' here and paste it in the Terminal.'
117
+ ).and_return('', Faker::Internet.url)
118
+ allow(highline_wrapper).to receive(:ask).with(
119
+ "\nWhat slack channel do you wish to post to? (default is \"#general\")"
120
+ ).and_return('')
121
+ allow(highline_wrapper).to receive(:ask).with(
122
+ "\nWhat slack username do you wish to post as? (default is \"Let's Get Quoty\")"
123
+ ).and_return('')
124
+ allow(highline_wrapper).to receive(:ask).with(
125
+ "\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:\")"
126
+ ).and_return('')
127
+ expect(subject).to receive(:ask_question).at_least(:twice).and_call_original
128
+ subject.send(:ask_config_questions)
116
129
  end
117
130
 
118
131
  it 'should return the defaults if nothing is given' do
119
132
  slack_url = Faker::Internet.url
133
+ defaults = {
134
+ channel: 'general',
135
+ username: "Let's Get Quoty",
136
+ webhook_url: slack_url,
137
+ icon_emoji: ':mailbox_with_mail:'
138
+ }
120
139
  allow(subject).to receive(:ask_question).with(
121
- "\nWhat is your Slack webhook URL? If you don't have one yet, please navigate" \
122
- ' to https://api.slack.com/messaging/webhooks to create one, and then come back' \
123
- ' here and paste it in the Terminal.'
140
+ "What is your Slack webhook URL? If you don't have one yet, please navigate to https://api.slack.com/messaging/webhooks to create one, and then come back here and paste it in the Terminal.",
141
+ required: true
124
142
  ).and_return(slack_url)
125
- allow(subject).to receive(:ask_question).and_return(nil)
126
- expect(subject.send(:ask_config_questions)).to eq(
127
- {
128
- channel: 'general',
129
- username: "Let's Get Quoty",
130
- webhook_url: slack_url,
131
- icon_emoji: ':mailbox_with_mail:'
132
- }
133
- )
143
+ allow(subject).to receive(:ask_question).with(
144
+ "\nWhat slack channel do you wish to post to? (default is \"#general\")"
145
+ ).and_return(nil)
146
+ allow(subject).to receive(:ask_question).with(
147
+ "\nWhat slack username do you wish to post as? (default is \"Let's Get Quoty\")"
148
+ ).and_return(nil)
149
+ allow(subject).to receive(:ask_question).with(
150
+ "\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:\")"
151
+ ).and_return(nil)
152
+ expect(subject.send(:ask_config_questions)).to eq(defaults)
134
153
  end
135
154
  end
136
155
  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: 3.0.0
4
+ version: 3.1.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-03-01 00:00:00.000000000 Z
11
+ date: 2021-03-02 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -53,19 +53,19 @@ dependencies:
53
53
  - !ruby/object:Gem::Version
54
54
  version: '4.1'
55
55
  - !ruby/object:Gem::Dependency
56
- name: highline
56
+ name: highline_wrapper
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '2.0'
61
+ version: 0.1.0
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: '2.0'
68
+ version: 0.1.0
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: httparty
71
71
  requirement: !ruby/object:Gem::Requirement
@@ -196,16 +196,16 @@ dependencies:
196
196
  name: rubocop
197
197
  requirement: !ruby/object:Gem::Requirement
198
198
  requirements:
199
- - - ">="
199
+ - - "~>"
200
200
  - !ruby/object:Gem::Version
201
- version: '0'
201
+ version: '1.10'
202
202
  type: :development
203
203
  prerelease: false
204
204
  version_requirements: !ruby/object:Gem::Requirement
205
205
  requirements:
206
- - - ">="
206
+ - - "~>"
207
207
  - !ruby/object:Gem::Version
208
- version: '0'
208
+ version: '1.10'
209
209
  description: Sending Personalized Slack Messages to a Slack channel of your choice.
210
210
  email:
211
211
  executables:
@@ -224,14 +224,12 @@ files:
224
224
  - lib/slack_messaging.rb
225
225
  - lib/slack_messaging/config.rb
226
226
  - lib/slack_messaging/default_paths.rb
227
- - lib/slack_messaging/highline_cli.rb
228
227
  - lib/slack_messaging/notify_slack.rb
229
228
  - lib/slack_messaging/random_message.rb
230
229
  - lib/slack_messaging/send.rb
231
230
  - lib/slack_messaging/setup.rb
232
231
  - lib/slack_messaging/version.rb
233
232
  - spec/slack_messaging/config_spec.rb
234
- - spec/slack_messaging/highline_cli_spec.rb
235
233
  - spec/slack_messaging/notify_slack_spec.rb
236
234
  - spec/slack_messaging/random_message_spec.rb
237
235
  - spec/slack_messaging/setup_spec.rb
@@ -262,7 +260,6 @@ summary: Personalized Slack Messages
262
260
  test_files:
263
261
  - spec/spec_helper.rb
264
262
  - spec/slack_messaging/config_spec.rb
265
- - spec/slack_messaging/highline_cli_spec.rb
266
263
  - spec/slack_messaging/notify_slack_spec.rb
267
264
  - spec/slack_messaging/random_message_spec.rb
268
265
  - spec/slack_messaging/setup_spec.rb
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module SlackMessaging
4
- class HighlineCli
5
- def ask(prompt)
6
- highline_client.ask(prompt) do |conf|
7
- conf.readline = true
8
- end.to_s
9
- end
10
-
11
- def ask_yes_no(prompt)
12
- answer = highline_client.ask(prompt) do |conf|
13
- conf.readline = true
14
- end.to_s
15
-
16
- answer.empty? ? true : !!(answer =~ /^y/i)
17
- end
18
-
19
- def ask_options(prompt, choices)
20
- choices_as_string_options = ''.dup
21
- choices.each { |choice| choices_as_string_options << "#{choices.index(choice) + 1}. #{choice}\n" }
22
- compiled_prompt = "#{prompt}\n#{choices_as_string_options.strip}"
23
-
24
- index = highline_client.ask(compiled_prompt) do |conf|
25
- conf.readline = true
26
- end.to_i - 1
27
-
28
- choices[index]
29
- end
30
-
31
- private def highline_client
32
- @highline_client ||= HighLine.new
33
- end
34
- end
35
- end
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require 'spec_helper'
4
- require 'slack_messaging'
5
-
6
- describe SlackMessaging::HighlineCli do
7
- let(:response) { double(:response, readline: true, to_i: 3) }
8
- let(:highline_client) { double(:highline_cli, ask: response) }
9
-
10
- before do
11
- allow(HighLine).to receive(:new).and_return(highline_client)
12
- end
13
-
14
- describe '#ask' do
15
- it 'should ask the highline client ask' do
16
- expect(highline_client).to receive(:ask)
17
- subject.ask(Faker::Lorem.sentence)
18
- end
19
-
20
- it 'should return a string' do
21
- expect(subject.ask(Faker::Lorem.sentence)).to be_a(String)
22
- end
23
- end
24
-
25
- describe '#ask_yes_no' do
26
- it 'should ask the highline client ask' do
27
- expect(highline_client).to receive(:ask)
28
- subject.ask_yes_no(Faker::Lorem.sentence)
29
- end
30
-
31
- it 'should return a boolean' do
32
- expect(subject.ask_yes_no(Faker::Lorem.sentence)).to be_falsey
33
- end
34
-
35
- it 'should return true if we say yes' do
36
- allow(response).to receive(:to_s).and_return('y')
37
- expect(subject.ask_yes_no(Faker::Lorem.sentence)).to be_truthy
38
- end
39
- end
40
-
41
- describe '#ask_options' do
42
- it 'should ask the highline client ask' do
43
- expect(highline_client).to receive(:ask)
44
- subject.ask_options(Faker::Lorem.sentence, %w[one two three])
45
- end
46
-
47
- it 'should return a string from the options' do
48
- expect(subject.ask_options(Faker::Lorem.sentence, %w[one two three])).to be_a(String)
49
- end
50
- end
51
- end