slack_messaging 1.4.0 → 3.0.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 +4 -4
- data/Gemfile +2 -0
- data/Gemfile.lock +51 -28
- data/Guardfile +3 -1
- data/QuoteExample.png +0 -0
- data/README.md +35 -21
- data/Rakefile +2 -0
- data/bin/slack-messaging +21 -10
- data/lib/slack_messaging.rb +6 -1
- data/lib/slack_messaging/config.rb +3 -2
- data/lib/slack_messaging/default_paths.rb +4 -4
- data/lib/slack_messaging/highline_cli.rb +35 -0
- data/lib/slack_messaging/notify_slack.rb +2 -0
- data/lib/slack_messaging/random_message.rb +7 -25
- data/lib/slack_messaging/send.rb +22 -0
- data/lib/slack_messaging/setup.rb +84 -0
- data/lib/slack_messaging/version.rb +3 -1
- data/spec/slack_messaging/config_spec.rb +22 -18
- data/spec/slack_messaging/highline_cli_spec.rb +51 -0
- data/spec/slack_messaging/notify_slack_spec.rb +13 -9
- data/spec/slack_messaging/random_message_spec.rb +34 -11
- data/spec/slack_messaging/setup_spec.rb +136 -0
- data/spec/spec_helper.rb +4 -1
- metadata +66 -19
- data/OutputFile.png +0 -0
- data/lib/slack_messaging/slack.rb +0 -20
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: e6742192033a64bb2935e5af6486ea356d54684f501515f22eb8a24c200fff61
|
|
4
|
+
data.tar.gz: 0d880c5cd858c778f06c9047e911927a1cb2ab2ee6b53a89b20b9e23a61ad2a9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 8458be91785ae94772e960f5f0705a2a611b36c286f694d0eb0ac4abe86fdd9d6867aa89d45dc9c44d721dbdb7bd9f34365ca5121f1d85ac0fd027d33439dbf4
|
|
7
|
+
data.tar.gz: 7485f64ff53624785968f06a25e109a8042aa1e7e63412d7c7a40b78da8209f643e06f62130b3c8e7ba8d0677db2445950b2a9fca0ceb5199b03c71d10592bd3
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,29 +1,31 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
slack_messaging (
|
|
4
|
+
slack_messaging (3.0.0)
|
|
5
5
|
activesupport (~> 6.0)
|
|
6
6
|
gli (~> 2.10)
|
|
7
7
|
hashie (~> 4.1)
|
|
8
8
|
highline (~> 2.0)
|
|
9
|
-
httparty
|
|
9
|
+
httparty (~> 0.18)
|
|
10
|
+
json (~> 2.5)
|
|
10
11
|
rack (~> 2.2)
|
|
11
12
|
|
|
12
13
|
GEM
|
|
13
14
|
remote: https://rubygems.org/
|
|
14
15
|
specs:
|
|
15
|
-
activesupport (6.
|
|
16
|
+
activesupport (6.1.2.1)
|
|
16
17
|
concurrent-ruby (~> 1.0, >= 1.0.2)
|
|
17
|
-
i18n (>=
|
|
18
|
-
minitest (
|
|
19
|
-
tzinfo (~>
|
|
20
|
-
zeitwerk (~> 2.
|
|
18
|
+
i18n (>= 1.6, < 2)
|
|
19
|
+
minitest (>= 5.1)
|
|
20
|
+
tzinfo (~> 2.0)
|
|
21
|
+
zeitwerk (~> 2.3)
|
|
22
|
+
ast (2.4.2)
|
|
21
23
|
coderay (1.1.3)
|
|
22
|
-
concurrent-ruby (1.1.
|
|
24
|
+
concurrent-ruby (1.1.8)
|
|
23
25
|
diff-lcs (1.4.4)
|
|
24
|
-
faker (2.
|
|
26
|
+
faker (2.15.1)
|
|
25
27
|
i18n (>= 1.6, < 2)
|
|
26
|
-
ffi (1.
|
|
28
|
+
ffi (1.14.2)
|
|
27
29
|
formatador (0.2.5)
|
|
28
30
|
gli (2.19.2)
|
|
29
31
|
guard (2.16.2)
|
|
@@ -45,9 +47,10 @@ GEM
|
|
|
45
47
|
httparty (0.18.1)
|
|
46
48
|
mime-types (~> 3.0)
|
|
47
49
|
multi_xml (>= 0.5.2)
|
|
48
|
-
i18n (1.8.
|
|
50
|
+
i18n (1.8.8)
|
|
49
51
|
concurrent-ruby (~> 1.0)
|
|
50
|
-
|
|
52
|
+
json (2.5.1)
|
|
53
|
+
listen (3.4.1)
|
|
51
54
|
rb-fsevent (~> 0.10, >= 0.10.3)
|
|
52
55
|
rb-inotify (~> 0.9, >= 0.9.10)
|
|
53
56
|
lumberjack (1.2.8)
|
|
@@ -55,50 +58,70 @@ GEM
|
|
|
55
58
|
mime-types (3.3.1)
|
|
56
59
|
mime-types-data (~> 3.2015)
|
|
57
60
|
mime-types-data (3.2020.1104)
|
|
58
|
-
minitest (5.14.
|
|
61
|
+
minitest (5.14.3)
|
|
59
62
|
multi_xml (0.6.0)
|
|
60
63
|
nenv (0.3.0)
|
|
61
64
|
notiffany (0.1.3)
|
|
62
65
|
nenv (~> 0.1)
|
|
63
66
|
shellany (~> 0.0)
|
|
64
|
-
|
|
67
|
+
parallel (1.20.1)
|
|
68
|
+
parser (3.0.0.0)
|
|
69
|
+
ast (~> 2.4.1)
|
|
70
|
+
pry (0.14.0)
|
|
65
71
|
coderay (~> 1.1)
|
|
66
72
|
method_source (~> 1.0)
|
|
67
73
|
rack (2.2.3)
|
|
68
|
-
|
|
74
|
+
rainbow (3.0.0)
|
|
75
|
+
rake (13.0.3)
|
|
69
76
|
rb-fsevent (0.10.4)
|
|
70
77
|
rb-inotify (0.10.1)
|
|
71
78
|
ffi (~> 1.0)
|
|
79
|
+
regexp_parser (2.1.1)
|
|
80
|
+
rexml (3.2.4)
|
|
72
81
|
rspec (3.10.0)
|
|
73
82
|
rspec-core (~> 3.10.0)
|
|
74
83
|
rspec-expectations (~> 3.10.0)
|
|
75
84
|
rspec-mocks (~> 3.10.0)
|
|
76
|
-
rspec-core (3.10.
|
|
85
|
+
rspec-core (3.10.1)
|
|
77
86
|
rspec-support (~> 3.10.0)
|
|
78
|
-
rspec-expectations (3.10.
|
|
87
|
+
rspec-expectations (3.10.1)
|
|
79
88
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
80
89
|
rspec-support (~> 3.10.0)
|
|
81
|
-
rspec-mocks (3.10.
|
|
90
|
+
rspec-mocks (3.10.2)
|
|
82
91
|
diff-lcs (>= 1.2.0, < 2.0)
|
|
83
92
|
rspec-support (~> 3.10.0)
|
|
84
|
-
rspec-support (3.10.
|
|
93
|
+
rspec-support (3.10.2)
|
|
94
|
+
rubocop (1.10.0)
|
|
95
|
+
parallel (~> 1.10)
|
|
96
|
+
parser (>= 3.0.0.0)
|
|
97
|
+
rainbow (>= 2.2.2, < 4.0)
|
|
98
|
+
regexp_parser (>= 1.8, < 3.0)
|
|
99
|
+
rexml
|
|
100
|
+
rubocop-ast (>= 1.2.0, < 2.0)
|
|
101
|
+
ruby-progressbar (~> 1.7)
|
|
102
|
+
unicode-display_width (>= 1.4.0, < 3.0)
|
|
103
|
+
rubocop-ast (1.4.1)
|
|
104
|
+
parser (>= 2.7.1.5)
|
|
105
|
+
ruby-progressbar (1.11.0)
|
|
85
106
|
shellany (0.0.1)
|
|
86
|
-
thor (1.0
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
zeitwerk (2.4.
|
|
107
|
+
thor (1.1.0)
|
|
108
|
+
tzinfo (2.0.4)
|
|
109
|
+
concurrent-ruby (~> 1.0)
|
|
110
|
+
unicode-display_width (2.0.0)
|
|
111
|
+
zeitwerk (2.4.2)
|
|
91
112
|
|
|
92
113
|
PLATFORMS
|
|
93
|
-
|
|
114
|
+
x86_64-darwin-19
|
|
94
115
|
|
|
95
116
|
DEPENDENCIES
|
|
96
|
-
bundler (~> 2.
|
|
97
|
-
faker
|
|
117
|
+
bundler (~> 2.2)
|
|
118
|
+
faker (~> 2.15)
|
|
98
119
|
guard-rspec (~> 4.3)
|
|
120
|
+
pry (~> 0.13)
|
|
99
121
|
rake (~> 13.0)
|
|
100
122
|
rspec (~> 3.9)
|
|
123
|
+
rubocop
|
|
101
124
|
slack_messaging!
|
|
102
125
|
|
|
103
126
|
BUNDLED WITH
|
|
104
|
-
2.
|
|
127
|
+
2.2.9
|
data/Guardfile
CHANGED
|
@@ -1,4 +1,6 @@
|
|
|
1
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
guard :rspec, cmd: 'bundle exec rspec', all_on_start: true do
|
|
2
4
|
watch(%r{^spec/.+_spec\.rb$})
|
|
3
5
|
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
|
|
4
6
|
watch('spec/spec_helper.rb') { 'spec' }
|
data/QuoteExample.png
ADDED
|
Binary file
|
data/README.md
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# Slack Messaging [](https://github.com/emmahsax/slack_messaging/actions/workflows/main.yml)
|
|
2
2
|
|
|
3
3
|
This is a simple project designed to post messages to a given Slack channel as a bot.
|
|
4
4
|
|
|
@@ -26,47 +26,61 @@ 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
|
-
channel:
|
|
31
|
+
channel: <AWESOME CHANNEL NAME>
|
|
32
32
|
username: <AWESOME USER NAME>
|
|
33
|
-
webhook_url: <WEBHOOK URL>
|
|
34
|
-
icon_emoji:
|
|
33
|
+
webhook_url: <SLACK WEBHOOK URL>
|
|
34
|
+
icon_emoji: ':<SOME EMOJI>:'
|
|
35
35
|
```
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
To generate this file at `~/.slack_messaging.yml`, please run this command:
|
|
38
38
|
|
|
39
|
+
```bash
|
|
40
|
+
slack-messaging setup
|
|
39
41
|
```
|
|
40
|
-
|
|
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
|
-
|
|
53
|
+
And then you can pass in that specific file location like this:
|
|
44
54
|
|
|
45
|
-
|
|
55
|
+
```bash
|
|
56
|
+
slack-messaging --config="/PATH/TO/FILE/config.yml" send
|
|
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
|
-
```
|
|
50
|
-
slack-messaging
|
|
63
|
+
```bash
|
|
64
|
+
slack-messaging send
|
|
51
65
|
```
|
|
52
66
|
|
|
53
|
-
|
|
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
|
|
71
|
+
```bash
|
|
72
|
+
slack-messaging send 'MESSAGE 1'
|
|
59
73
|
```
|
|
60
74
|
|
|
61
75
|
You can even print multiple messages at once:
|
|
62
76
|
|
|
63
|
-
```
|
|
64
|
-
slack-messaging
|
|
77
|
+
```bash
|
|
78
|
+
slack-messaging send 'MESSAGE 1' 'MESSAGE 2' 'MESSAGE 3' ... 'MESSAGE N'
|
|
65
79
|
```
|
|
66
80
|
|
|
67
81
|
The output of slack_messaging will look something like this:
|
|
68
82
|
|
|
69
|
-
<img src="https://github.com/
|
|
83
|
+
<img src="https://github.com/emmahsax/slack_messaging/blob/main/QuoteExample.png" width="500">
|
|
70
84
|
|
|
71
85
|
I hope you enjoy printing fun and specialized messages to Slack!
|
|
72
86
|
|
|
@@ -76,11 +90,11 @@ To run the tests, run `bundle exec rspec` from the command line. GitHub Actions
|
|
|
76
90
|
|
|
77
91
|
## Contributing
|
|
78
92
|
|
|
79
|
-
To submit a feature request, bug ticket, etc, please submit an official [GitHub Issue](https://github.com/
|
|
93
|
+
To submit a feature request, bug ticket, etc, please submit an official [GitHub Issue](https://github.com/emmahsax/slack_messaging/issues/new).
|
|
80
94
|
|
|
81
|
-
To report any security vulnerabilities, please view this project's [Security Policy](https://github.com/
|
|
95
|
+
To report any security vulnerabilities, please view this project's [Security Policy](https://github.com/emmahsax/slack_messaging/security/policy).
|
|
82
96
|
|
|
83
|
-
|
|
97
|
+
When interacting with this repository, please follow [Contributor Covenant's Code of Conduct](https://contributor-covenant.org).
|
|
84
98
|
|
|
85
99
|
## Releasing
|
|
86
100
|
|
|
@@ -88,7 +102,7 @@ To make a new release of this gem:
|
|
|
88
102
|
|
|
89
103
|
1. Merge the pull request via the big green button
|
|
90
104
|
2. Run `git tag vX.X.X` and `git push --tag`
|
|
91
|
-
3. Make a new release [here](https://github.com/
|
|
105
|
+
3. Make a new release [here](https://github.com/emmahsax/slack_messaging/releases/new)
|
|
92
106
|
4. Run `gem build *.gemspec`
|
|
93
107
|
5. Run `gem push *.gem` to push the new gem to RubyGems
|
|
94
108
|
6. Run `rm *.gem` to clean up your local repository
|
data/Rakefile
CHANGED
data/bin/slack-messaging
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env ruby
|
|
2
|
+
|
|
3
|
+
# frozen_string_literal: true
|
|
4
|
+
|
|
2
5
|
require 'rubygems'
|
|
3
6
|
require 'gli'
|
|
4
7
|
require_relative '../lib/slack_messaging'
|
|
@@ -10,23 +13,31 @@ version SlackMessaging::VERSION
|
|
|
10
13
|
|
|
11
14
|
wrap_help_text :verbatim
|
|
12
15
|
|
|
13
|
-
flag [:config], :
|
|
16
|
+
flag [:config], desc: 'Slack Messaging config file path', default_value: SlackMessaging::DefaultPaths.config
|
|
14
17
|
|
|
15
|
-
program_long_desc "
|
|
18
|
+
program_long_desc "
|
|
16
19
|
DOCUMENTATION
|
|
17
|
-
|
|
20
|
+
For documentation and help in setting up your configuration files,
|
|
21
|
+
see Slack Messaging's GitHub repo: https://github.com/emmahsax/slack_messaging
|
|
22
|
+
"
|
|
18
23
|
|
|
19
24
|
desc 'Prints a variety of messages to Slack'
|
|
20
|
-
command '
|
|
21
|
-
|
|
22
|
-
SlackMessaging::
|
|
25
|
+
command 'send' do |c|
|
|
26
|
+
pre do |global, _command, _options, _args|
|
|
27
|
+
SlackMessaging::Config.load(global[:config])
|
|
28
|
+
true
|
|
29
|
+
end
|
|
30
|
+
|
|
31
|
+
c.action do |_global_options, options, args|
|
|
32
|
+
SlackMessaging::Send.execute(args, options)
|
|
23
33
|
end
|
|
24
34
|
end
|
|
25
35
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
36
|
+
desc 'Sets up a Slack Messaging config file at ~/.slack_messaging.yml'
|
|
37
|
+
command 'setup' do |c|
|
|
38
|
+
c.action do
|
|
39
|
+
SlackMessaging::Setup.execute
|
|
40
|
+
end
|
|
30
41
|
end
|
|
31
42
|
|
|
32
43
|
exit run(ARGV)
|
data/lib/slack_messaging.rb
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'yaml'
|
|
2
4
|
require 'hashie'
|
|
3
5
|
require 'httparty'
|
|
4
6
|
require 'highline'
|
|
7
|
+
require 'json'
|
|
8
|
+
|
|
9
|
+
files = "#{File.expand_path(File.join(File.dirname(File.absolute_path(__FILE__)), 'slack_messaging'))}/**/*.rb"
|
|
5
10
|
|
|
6
|
-
Dir[
|
|
11
|
+
Dir[files].each do |file|
|
|
7
12
|
require_relative file
|
|
8
13
|
end
|
|
9
14
|
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackMessaging
|
|
2
4
|
class Config
|
|
3
5
|
def self.config
|
|
@@ -9,8 +11,6 @@ module SlackMessaging
|
|
|
9
11
|
config
|
|
10
12
|
end
|
|
11
13
|
|
|
12
|
-
private
|
|
13
|
-
|
|
14
14
|
def self.config_data
|
|
15
15
|
@config_data ||= Hashie::Mash.new
|
|
16
16
|
end
|
|
@@ -21,6 +21,7 @@ module SlackMessaging
|
|
|
21
21
|
|
|
22
22
|
def self.load_config(file)
|
|
23
23
|
raise MissingConfig, "Missing configuration file: #{file}" unless File.exist?(file)
|
|
24
|
+
|
|
24
25
|
YAML.load_file(file).each { |key, value| config_data.assign_property(key, value) }
|
|
25
26
|
end
|
|
26
27
|
end
|
|
@@ -1,13 +1,13 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackMessaging
|
|
2
4
|
class DefaultPaths
|
|
3
5
|
def self.config
|
|
4
|
-
File.join(
|
|
6
|
+
File.join(home, '.slack_messaging.yml')
|
|
5
7
|
end
|
|
6
8
|
|
|
7
|
-
private
|
|
8
|
-
|
|
9
9
|
def self.home
|
|
10
|
-
ENV['HOME']
|
|
10
|
+
ENV['HOME'] || '.'
|
|
11
11
|
end
|
|
12
12
|
end
|
|
13
13
|
end
|
|
@@ -0,0 +1,35 @@
|
|
|
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,30 +1,12 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
module SlackMessaging
|
|
2
4
|
class RandomMessage
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
"
|
|
8
|
-
"Whatever you are, be a good one.\n--Abraham Lincoln",
|
|
9
|
-
"Good, better, best. Never let it rest. 'Til your good is better and your better is best.\n--St. Jerome",
|
|
10
|
-
"Despite everything, I believe that people are really good at heart.\n--Anne Frank",
|
|
11
|
-
"Life is 10% what happens to you and 90% how you react to it.\n--Charles R. Swindoll",
|
|
12
|
-
"The way to get started is to quit talking and begin doing.\n--Walt Disney",
|
|
13
|
-
"A creative man is motivated by the desire to achieve, not by the desire to beat others.\n--Ayn Rand",
|
|
14
|
-
"Problems are not stop signs, they are guidelines.\n--Robert H. Schuller",
|
|
15
|
-
"Correction does much, but encouragement does more.\n--Johann Wolfgang von Goethe",
|
|
16
|
-
"Positive anything is better than negative nothing.\n--Elbert Hubbard",
|
|
17
|
-
"To succeed, you need to find something to hold on to, something to motivate you, something to inspire you.\n--Joyce Meyer",
|
|
18
|
-
"If you're not making mistakes, then you're not doing anything. I'm positive that a doer makes mistakes.\n--John Wooden",
|
|
19
|
-
"The best way to deal with other people is to just let them be other people.\n--Anonymous",
|
|
20
|
-
"Talk to yourself like you would to someone you love.\n--Brenee Brown",
|
|
21
|
-
"Don't let small minds convince you that your dreams are too big.\n--Anonymous",
|
|
22
|
-
]
|
|
23
|
-
|
|
24
|
-
attr_accessor :text
|
|
25
|
-
|
|
26
|
-
def initialize
|
|
27
|
-
self.text = MESSAGE_ARRAY[rand(MESSAGE_ARRAY.length)]
|
|
5
|
+
def self.acquire_random_quote
|
|
6
|
+
random_quote = HTTParty.get('http://api.quotable.io/random', headers: { 'Content-Type': 'application/json' }).body
|
|
7
|
+
quote_content = JSON.parse(random_quote)['content']
|
|
8
|
+
quote_author = JSON.parse(random_quote)['author']
|
|
9
|
+
"\"#{quote_content}\"\n—#{quote_author}"
|
|
28
10
|
end
|
|
29
11
|
end
|
|
30
12
|
end
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SlackMessaging
|
|
4
|
+
class Send
|
|
5
|
+
attr_accessor :options
|
|
6
|
+
|
|
7
|
+
def self.execute(args, _options = nil)
|
|
8
|
+
if args.empty?
|
|
9
|
+
message = SlackMessaging::RandomMessage.acquire_random_quote
|
|
10
|
+
print_message(message)
|
|
11
|
+
else
|
|
12
|
+
args.each do |arg_message|
|
|
13
|
+
print_message(arg_message)
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def self.print_message(message)
|
|
19
|
+
SlackMessaging::NotifySlack.new(message).perform
|
|
20
|
+
end
|
|
21
|
+
end
|
|
22
|
+
end
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module SlackMessaging
|
|
4
|
+
class Setup
|
|
5
|
+
def self.execute
|
|
6
|
+
if config_file_exists?
|
|
7
|
+
answer = highline.ask_yes_no(
|
|
8
|
+
"It looks like the #{default_config} file already exists. Do you wish to replace it? (y/n)"
|
|
9
|
+
)
|
|
10
|
+
puts
|
|
11
|
+
else
|
|
12
|
+
answer = true
|
|
13
|
+
end
|
|
14
|
+
|
|
15
|
+
create_or_update_config_file(ask_config_questions) if answer
|
|
16
|
+
end
|
|
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 = ''.dup
|
|
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.exist?(default_config)
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
# rubocop:disable Metrics/MethodLength:
|
|
40
|
+
def self.ask_config_questions
|
|
41
|
+
answers = {}
|
|
42
|
+
|
|
43
|
+
answers[:webhook_url] = ask_question(
|
|
44
|
+
"What is your Slack webhook URL? If you don't have one yet, please navigate" \
|
|
45
|
+
' to https://api.slack.com/messaging/webhooks to create one, and then come back' \
|
|
46
|
+
' here and paste it in the Terminal.'
|
|
47
|
+
)
|
|
48
|
+
|
|
49
|
+
unless answers[:webhook_url]
|
|
50
|
+
puts "\nExiting because Slack webhoook is required..."
|
|
51
|
+
exit
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
answers[:channel] = ask_question(
|
|
55
|
+
"\nWhat slack channel do you wish to post to? (default is \"#general\")"
|
|
56
|
+
) || 'general'
|
|
57
|
+
|
|
58
|
+
answers[:username] = ask_question(
|
|
59
|
+
"\nWhat slack username do you wish to post as? (default is \"Let's Get Quoty\")"
|
|
60
|
+
) || "Let's Get Quoty"
|
|
61
|
+
|
|
62
|
+
answers[:icon_emoji] = ask_question(
|
|
63
|
+
"\nWhat emoji would you like to post with (include the colons at the beginning and end" \
|
|
64
|
+
' of the emoji name)? (default is ":mailbox_with_mail:")'
|
|
65
|
+
) || ':mailbox_with_mail:'
|
|
66
|
+
|
|
67
|
+
answers
|
|
68
|
+
end
|
|
69
|
+
# rubocop:enable Metrics/MethodLength
|
|
70
|
+
|
|
71
|
+
def self.ask_question(prompt)
|
|
72
|
+
answer = highline.ask(prompt)
|
|
73
|
+
answer.empty? ? nil : answer
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
def self.highline
|
|
77
|
+
@highline ||= SlackMessaging::HighlineCli.new
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
def self.default_config
|
|
81
|
+
SlackMessaging::DefaultPaths.config
|
|
82
|
+
end
|
|
83
|
+
end
|
|
84
|
+
end
|
|
@@ -1,17 +1,21 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
require 'slack_messaging'
|
|
3
5
|
|
|
4
6
|
describe SlackMessaging::Config do
|
|
7
|
+
subject { SlackMessaging::Config }
|
|
8
|
+
|
|
5
9
|
context 'config key methods' do
|
|
6
10
|
it 'should return nil when not set' do
|
|
7
|
-
expect(
|
|
8
|
-
expect(
|
|
11
|
+
expect(subject.doesnt_exist).to eql(nil)
|
|
12
|
+
expect(subject.doesnt_exist?).to eql(false)
|
|
9
13
|
end
|
|
10
14
|
|
|
11
15
|
it 'should return the config value when set' do
|
|
12
16
|
config_value = Faker::Lorem.word
|
|
13
|
-
|
|
14
|
-
expect(
|
|
17
|
+
subject.new_value = config_value
|
|
18
|
+
expect(subject.new_value).to eql(config_value)
|
|
15
19
|
end
|
|
16
20
|
end
|
|
17
21
|
|
|
@@ -21,13 +25,13 @@ describe SlackMessaging::Config do
|
|
|
21
25
|
|
|
22
26
|
let(:config_file) do
|
|
23
27
|
{
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
28
|
+
domain: domain,
|
|
29
|
+
slack: {
|
|
30
|
+
slack_option: true,
|
|
31
|
+
username: Faker::Name.name,
|
|
32
|
+
icon_url: Faker::Internet.url,
|
|
33
|
+
channel: Faker::Lorem.word,
|
|
34
|
+
webhook: Faker::Internet.url
|
|
31
35
|
}
|
|
32
36
|
}
|
|
33
37
|
end
|
|
@@ -35,19 +39,19 @@ describe SlackMessaging::Config do
|
|
|
35
39
|
before do
|
|
36
40
|
allow(YAML).to receive(:load_file).and_return(config_file)
|
|
37
41
|
allow(File).to receive(:exist?).and_return(true)
|
|
38
|
-
|
|
42
|
+
subject.load(Faker::Lorem.word)
|
|
39
43
|
end
|
|
40
44
|
|
|
41
45
|
it 'calling a method corresponding to a key in the file should return the value' do
|
|
42
|
-
expect(
|
|
43
|
-
expect(
|
|
44
|
-
expect(
|
|
46
|
+
expect(subject.domain).to eql(domain)
|
|
47
|
+
expect(subject.slack).to be_kind_of(Hash)
|
|
48
|
+
expect(subject.slack[:slack_option]).to eql(true)
|
|
45
49
|
end
|
|
46
50
|
|
|
47
51
|
it 'overwriting values should work' do
|
|
48
|
-
expect(
|
|
49
|
-
|
|
50
|
-
expect(
|
|
52
|
+
expect(subject.slack).to be_kind_of(Hash)
|
|
53
|
+
subject.slack = sentence
|
|
54
|
+
expect(subject.slack).to eql(sentence)
|
|
51
55
|
end
|
|
52
56
|
end
|
|
53
57
|
end
|
|
@@ -0,0 +1,51 @@
|
|
|
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
|
|
@@ -1,3 +1,5 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
require 'slack_messaging'
|
|
3
5
|
|
|
@@ -10,12 +12,12 @@ describe SlackMessaging::NotifySlack do
|
|
|
10
12
|
|
|
11
13
|
let(:config_file) do
|
|
12
14
|
{
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
15
|
+
slack: {
|
|
16
|
+
slack_option: true,
|
|
17
|
+
username: username,
|
|
18
|
+
icon_emoji: emoji,
|
|
19
|
+
channel: channel,
|
|
20
|
+
webhook_url: webhook
|
|
19
21
|
}
|
|
20
22
|
}
|
|
21
23
|
end
|
|
@@ -26,14 +28,16 @@ describe SlackMessaging::NotifySlack do
|
|
|
26
28
|
SlackMessaging::Config.load(Faker::Lorem.word)
|
|
27
29
|
end
|
|
28
30
|
|
|
31
|
+
subject { SlackMessaging::NotifySlack }
|
|
32
|
+
|
|
29
33
|
it 'should call HTTParty' do
|
|
30
34
|
expect(HTTParty).to receive(:post)
|
|
31
|
-
message =
|
|
35
|
+
message = subject.new(sentence)
|
|
32
36
|
message.perform
|
|
33
37
|
end
|
|
34
38
|
|
|
35
|
-
|
|
36
|
-
message =
|
|
39
|
+
it 'should define certain values' do
|
|
40
|
+
message = subject.new(sentence)
|
|
37
41
|
expect(message.text).to eq(sentence)
|
|
38
42
|
expect(message.channel).to eq(channel)
|
|
39
43
|
expect(message.username).to eq(username)
|
|
@@ -1,24 +1,47 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'spec_helper'
|
|
2
4
|
require 'slack_messaging'
|
|
3
5
|
|
|
4
6
|
describe SlackMessaging::RandomMessage do
|
|
7
|
+
let(:quote_object) { double(:quote_object, body: quote_json) }
|
|
8
|
+
|
|
9
|
+
let(:quote_json) do
|
|
10
|
+
"{\"_id\":\"4MRaRRKq4Tcg\",
|
|
11
|
+
\"tags\":[\"famous-quotes\"],
|
|
12
|
+
\"content\":\"There are two ways of spreading light: to be the candle or the mirror that reflects it.\",
|
|
13
|
+
\"author\":\"Edith Wharton\",\"length\":87
|
|
14
|
+
}"
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
before do
|
|
18
|
+
allow(HTTParty).to receive(:get).and_return(quote_object)
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
subject { SlackMessaging::RandomMessage }
|
|
22
|
+
|
|
5
23
|
it 'should get a string message' do
|
|
6
|
-
message =
|
|
7
|
-
expect(message
|
|
24
|
+
message = subject.acquire_random_quote
|
|
25
|
+
expect(message).to be_instance_of(String)
|
|
26
|
+
end
|
|
27
|
+
|
|
28
|
+
it 'should get a message that includes a newline' do
|
|
29
|
+
message = subject.acquire_random_quote
|
|
30
|
+
expect(message.include?("\n")).to eq(true)
|
|
8
31
|
end
|
|
9
32
|
|
|
10
|
-
it 'should get a message
|
|
11
|
-
message =
|
|
12
|
-
expect(message.
|
|
33
|
+
it 'should get a message that includes a —' do
|
|
34
|
+
message = subject.acquire_random_quote
|
|
35
|
+
expect(message.include?('—')).to eq(true)
|
|
13
36
|
end
|
|
14
37
|
|
|
15
|
-
it 'should
|
|
16
|
-
|
|
17
|
-
|
|
38
|
+
it 'should use HTTParty to ping an API' do
|
|
39
|
+
expect(HTTParty).to receive(:get)
|
|
40
|
+
subject.acquire_random_quote
|
|
18
41
|
end
|
|
19
42
|
|
|
20
|
-
it 'should
|
|
21
|
-
|
|
22
|
-
|
|
43
|
+
it 'should have the JSON parse the response content twice' do
|
|
44
|
+
expect(JSON).to receive(:parse).at_least(2).times.and_return(JSON.parse(quote_json))
|
|
45
|
+
subject.acquire_random_quote
|
|
23
46
|
end
|
|
24
47
|
end
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
require 'slack_messaging'
|
|
5
|
+
|
|
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) }
|
|
9
|
+
let(:answers) do
|
|
10
|
+
{
|
|
11
|
+
channel: Faker::Lorem.word,
|
|
12
|
+
username: Faker::Lorem.word,
|
|
13
|
+
webhook_url: Faker::Internet.url,
|
|
14
|
+
icon_emoji: ":#{Faker::Lorem.word}:"
|
|
15
|
+
}
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
before do
|
|
19
|
+
allow(SlackMessaging::HighlineCli).to receive(:new).and_return(highline_cli)
|
|
20
|
+
allow(subject).to receive(:puts)
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
after do
|
|
24
|
+
SlackMessaging::Setup.instance_variable_set('@highline', nil)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
subject { SlackMessaging::Setup }
|
|
28
|
+
|
|
29
|
+
describe '#self.execute' do
|
|
30
|
+
it 'should ask a question if the config file exists' do
|
|
31
|
+
allow(subject).to receive(:config_file_exists?).and_return(true)
|
|
32
|
+
allow(File).to receive(:exists?).and_return(true)
|
|
33
|
+
expect(highline_cli).to receive(:ask_yes_no).and_return(true)
|
|
34
|
+
allow(subject).to receive(:create_or_update_config_file).and_return(true)
|
|
35
|
+
allow(subject).to receive(:ask_config_questions).and_return(true)
|
|
36
|
+
subject.execute
|
|
37
|
+
end
|
|
38
|
+
|
|
39
|
+
it 'should call to create or update the config file' do
|
|
40
|
+
allow(File).to receive(:exists?).and_return(true)
|
|
41
|
+
allow(highline_cli).to receive(:ask_yes_no).and_return(true)
|
|
42
|
+
expect(subject).to receive(:create_or_update_config_file).and_return(true)
|
|
43
|
+
expect(subject).to receive(:ask_config_questions).and_return(true)
|
|
44
|
+
subject.execute
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
it 'should skip if the user opts not to continue' do
|
|
48
|
+
allow(subject).to receive(:config_file_exists?).and_return(true)
|
|
49
|
+
allow(File).to receive(:exists?).and_return(true)
|
|
50
|
+
allow(highline_cli).to receive(:ask_yes_no).and_return(false)
|
|
51
|
+
expect(subject).not_to receive(:create_or_update_config_file)
|
|
52
|
+
expect(subject).not_to receive(:ask_config_questions)
|
|
53
|
+
subject.execute
|
|
54
|
+
end
|
|
55
|
+
end
|
|
56
|
+
|
|
57
|
+
describe '#self.create_or_update_config_file' do
|
|
58
|
+
it 'should generate the file based on the answers to the questions' do
|
|
59
|
+
expect(subject).to receive(:generate_config_file)
|
|
60
|
+
allow(File).to receive(:open).and_return(nil)
|
|
61
|
+
subject.send(:create_or_update_config_file, answers)
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
it 'should open the file for writing' do
|
|
65
|
+
allow(subject).to receive(:generate_config_file)
|
|
66
|
+
expect(File).to receive(:open).and_return(nil)
|
|
67
|
+
subject.send(:create_or_update_config_file, answers)
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
describe '#self.generate_config_file' do
|
|
72
|
+
it 'returns a string' do
|
|
73
|
+
expect(subject.send(:generate_config_file, answers)).to be_a(String)
|
|
74
|
+
end
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
describe '#self.config_file_exists?' do
|
|
78
|
+
it 'should return true if the file exists' do
|
|
79
|
+
allow(File).to receive(:exist?).and_return(true)
|
|
80
|
+
expect(subject.send(:config_file_exists?)).to eq(true)
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
it 'should return false if the file does not exist' do
|
|
84
|
+
allow(File).to receive(:exist?).and_return(false)
|
|
85
|
+
expect(subject.send(:config_file_exists?)).to eq(false)
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
|
|
89
|
+
describe '#self.ask_question' do
|
|
90
|
+
it 'should use highline to ask a question' do
|
|
91
|
+
expect(highline_cli).to receive(:ask).and_return('')
|
|
92
|
+
subject.send(:ask_question, Faker::Lorem.sentence)
|
|
93
|
+
end
|
|
94
|
+
|
|
95
|
+
it 'should return nil if the highline client gets an empty string' do
|
|
96
|
+
allow(highline_cli).to receive(:ask).and_return('')
|
|
97
|
+
expect(subject.send(:ask_question, Faker::Lorem.sentence)).to be_nil
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
it 'should return the answer if it is given' do
|
|
101
|
+
answer = Faker::Lorem.sentence
|
|
102
|
+
allow(highline_cli).to receive(:ask).and_return(answer)
|
|
103
|
+
expect(subject.send(:ask_question, Faker::Lorem.sentence)).to be(answer)
|
|
104
|
+
end
|
|
105
|
+
end
|
|
106
|
+
|
|
107
|
+
describe '#self.ask_config_questions' do
|
|
108
|
+
it 'should call to ask at least four questions' do
|
|
109
|
+
expect(subject).to receive(:ask_question).at_least(4).times
|
|
110
|
+
subject.send(:ask_config_questions)
|
|
111
|
+
end
|
|
112
|
+
|
|
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)
|
|
116
|
+
end
|
|
117
|
+
|
|
118
|
+
it 'should return the defaults if nothing is given' do
|
|
119
|
+
slack_url = Faker::Internet.url
|
|
120
|
+
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.'
|
|
124
|
+
).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
|
+
)
|
|
134
|
+
end
|
|
135
|
+
end
|
|
136
|
+
end
|
data/spec/spec_helper.rb
CHANGED
|
@@ -1,4 +1,7 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
1
3
|
require 'faker'
|
|
4
|
+
require 'pry'
|
|
2
5
|
|
|
3
6
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
|
4
7
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
|
@@ -33,7 +36,7 @@ RSpec.configure do |config|
|
|
|
33
36
|
expectations.include_chain_clauses_in_custom_matcher_descriptions = true
|
|
34
37
|
end
|
|
35
38
|
|
|
36
|
-
config.filter_run :
|
|
39
|
+
config.filter_run focus: true
|
|
37
40
|
config.run_all_when_everything_filtered = true
|
|
38
41
|
|
|
39
42
|
# rspec-mocks config goes here. You can use an alternate test double
|
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:
|
|
4
|
+
version: 3.0.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:
|
|
11
|
+
date: 2021-03-01 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: activesupport
|
|
@@ -70,16 +70,30 @@ dependencies:
|
|
|
70
70
|
name: httparty
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
|
-
- - "
|
|
73
|
+
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '0'
|
|
75
|
+
version: '0.18'
|
|
76
76
|
type: :runtime
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
|
-
- - "
|
|
80
|
+
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '0'
|
|
82
|
+
version: '0.18'
|
|
83
|
+
- !ruby/object:Gem::Dependency
|
|
84
|
+
name: json
|
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
|
86
|
+
requirements:
|
|
87
|
+
- - "~>"
|
|
88
|
+
- !ruby/object:Gem::Version
|
|
89
|
+
version: '2.5'
|
|
90
|
+
type: :runtime
|
|
91
|
+
prerelease: false
|
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
93
|
+
requirements:
|
|
94
|
+
- - "~>"
|
|
95
|
+
- !ruby/object:Gem::Version
|
|
96
|
+
version: '2.5'
|
|
83
97
|
- !ruby/object:Gem::Dependency
|
|
84
98
|
name: rack
|
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -100,28 +114,28 @@ dependencies:
|
|
|
100
114
|
requirements:
|
|
101
115
|
- - "~>"
|
|
102
116
|
- !ruby/object:Gem::Version
|
|
103
|
-
version: '2.
|
|
117
|
+
version: '2.2'
|
|
104
118
|
type: :development
|
|
105
119
|
prerelease: false
|
|
106
120
|
version_requirements: !ruby/object:Gem::Requirement
|
|
107
121
|
requirements:
|
|
108
122
|
- - "~>"
|
|
109
123
|
- !ruby/object:Gem::Version
|
|
110
|
-
version: '2.
|
|
124
|
+
version: '2.2'
|
|
111
125
|
- !ruby/object:Gem::Dependency
|
|
112
126
|
name: faker
|
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
|
114
128
|
requirements:
|
|
115
|
-
- - "
|
|
129
|
+
- - "~>"
|
|
116
130
|
- !ruby/object:Gem::Version
|
|
117
|
-
version: '
|
|
131
|
+
version: '2.15'
|
|
118
132
|
type: :development
|
|
119
133
|
prerelease: false
|
|
120
134
|
version_requirements: !ruby/object:Gem::Requirement
|
|
121
135
|
requirements:
|
|
122
|
-
- - "
|
|
136
|
+
- - "~>"
|
|
123
137
|
- !ruby/object:Gem::Version
|
|
124
|
-
version: '
|
|
138
|
+
version: '2.15'
|
|
125
139
|
- !ruby/object:Gem::Dependency
|
|
126
140
|
name: guard-rspec
|
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -136,6 +150,20 @@ dependencies:
|
|
|
136
150
|
- - "~>"
|
|
137
151
|
- !ruby/object:Gem::Version
|
|
138
152
|
version: '4.3'
|
|
153
|
+
- !ruby/object:Gem::Dependency
|
|
154
|
+
name: pry
|
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
|
156
|
+
requirements:
|
|
157
|
+
- - "~>"
|
|
158
|
+
- !ruby/object:Gem::Version
|
|
159
|
+
version: '0.13'
|
|
160
|
+
type: :development
|
|
161
|
+
prerelease: false
|
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
163
|
+
requirements:
|
|
164
|
+
- - "~>"
|
|
165
|
+
- !ruby/object:Gem::Version
|
|
166
|
+
version: '0.13'
|
|
139
167
|
- !ruby/object:Gem::Dependency
|
|
140
168
|
name: rake
|
|
141
169
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -164,9 +192,22 @@ dependencies:
|
|
|
164
192
|
- - "~>"
|
|
165
193
|
- !ruby/object:Gem::Version
|
|
166
194
|
version: '3.9'
|
|
195
|
+
- !ruby/object:Gem::Dependency
|
|
196
|
+
name: rubocop
|
|
197
|
+
requirement: !ruby/object:Gem::Requirement
|
|
198
|
+
requirements:
|
|
199
|
+
- - ">="
|
|
200
|
+
- !ruby/object:Gem::Version
|
|
201
|
+
version: '0'
|
|
202
|
+
type: :development
|
|
203
|
+
prerelease: false
|
|
204
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
205
|
+
requirements:
|
|
206
|
+
- - ">="
|
|
207
|
+
- !ruby/object:Gem::Version
|
|
208
|
+
version: '0'
|
|
167
209
|
description: Sending Personalized Slack Messages to a Slack channel of your choice.
|
|
168
210
|
email:
|
|
169
|
-
- emma.sax4@gmail.com
|
|
170
211
|
executables:
|
|
171
212
|
- slack-messaging
|
|
172
213
|
extensions: []
|
|
@@ -176,22 +217,26 @@ files:
|
|
|
176
217
|
- Gemfile.lock
|
|
177
218
|
- Guardfile
|
|
178
219
|
- LICENSE
|
|
179
|
-
-
|
|
220
|
+
- QuoteExample.png
|
|
180
221
|
- README.md
|
|
181
222
|
- Rakefile
|
|
182
223
|
- bin/slack-messaging
|
|
183
224
|
- lib/slack_messaging.rb
|
|
184
225
|
- lib/slack_messaging/config.rb
|
|
185
226
|
- lib/slack_messaging/default_paths.rb
|
|
227
|
+
- lib/slack_messaging/highline_cli.rb
|
|
186
228
|
- lib/slack_messaging/notify_slack.rb
|
|
187
229
|
- lib/slack_messaging/random_message.rb
|
|
188
|
-
- lib/slack_messaging/
|
|
230
|
+
- lib/slack_messaging/send.rb
|
|
231
|
+
- lib/slack_messaging/setup.rb
|
|
189
232
|
- lib/slack_messaging/version.rb
|
|
190
233
|
- spec/slack_messaging/config_spec.rb
|
|
234
|
+
- spec/slack_messaging/highline_cli_spec.rb
|
|
191
235
|
- spec/slack_messaging/notify_slack_spec.rb
|
|
192
236
|
- spec/slack_messaging/random_message_spec.rb
|
|
237
|
+
- spec/slack_messaging/setup_spec.rb
|
|
193
238
|
- spec/spec_helper.rb
|
|
194
|
-
homepage: https://github.com/
|
|
239
|
+
homepage: https://github.com/emmahsax/slack_messaging
|
|
195
240
|
licenses:
|
|
196
241
|
- MIT
|
|
197
242
|
metadata: {}
|
|
@@ -203,19 +248,21 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
203
248
|
requirements:
|
|
204
249
|
- - ">="
|
|
205
250
|
- !ruby/object:Gem::Version
|
|
206
|
-
version: '
|
|
251
|
+
version: '2.4'
|
|
207
252
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
208
253
|
requirements:
|
|
209
254
|
- - ">="
|
|
210
255
|
- !ruby/object:Gem::Version
|
|
211
256
|
version: '0'
|
|
212
257
|
requirements: []
|
|
213
|
-
rubygems_version: 3.
|
|
258
|
+
rubygems_version: 3.2.3
|
|
214
259
|
signing_key:
|
|
215
260
|
specification_version: 4
|
|
216
261
|
summary: Personalized Slack Messages
|
|
217
262
|
test_files:
|
|
218
263
|
- spec/spec_helper.rb
|
|
219
264
|
- spec/slack_messaging/config_spec.rb
|
|
220
|
-
- spec/slack_messaging/
|
|
265
|
+
- spec/slack_messaging/highline_cli_spec.rb
|
|
221
266
|
- spec/slack_messaging/notify_slack_spec.rb
|
|
267
|
+
- spec/slack_messaging/random_message_spec.rb
|
|
268
|
+
- spec/slack_messaging/setup_spec.rb
|
data/OutputFile.png
DELETED
|
Binary file
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
module SlackMessaging
|
|
2
|
-
class Slack
|
|
3
|
-
attr_accessor :options
|
|
4
|
-
|
|
5
|
-
def self.execute(args, options = nil)
|
|
6
|
-
if args.empty?
|
|
7
|
-
message = SlackMessaging::RandomMessage.new
|
|
8
|
-
print_message(message.text)
|
|
9
|
-
else
|
|
10
|
-
args.each do |message|
|
|
11
|
-
print_message(message)
|
|
12
|
-
end
|
|
13
|
-
end
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def self.print_message(message)
|
|
17
|
-
SlackMessaging::NotifySlack.new(message).perform
|
|
18
|
-
end
|
|
19
|
-
end
|
|
20
|
-
end
|