slack-mail 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: b7aa57e35fa555bfcce6b558798bc55dc36a7cf9
4
+ data.tar.gz: aa57d82dde8bc458eb2491100189f3594f673cf4
5
+ SHA512:
6
+ metadata.gz: 94e576453a1e7c721ebb690f0a7f94f513dc0cae66e5cd0ffcec872567b7c5c2e4c67bfc6b8dd7911e5904c4cef2bdc11ee02f32292079175093174f26b51975
7
+ data.tar.gz: 1b61377adfe1cce4c5986c2a30d323ee5f324343e8186210ea9c26b77e11e62d81ca00d7199567586101c71300709372280a173c9bfc1c62352d96a6b3e8c7f6
data/.gitignore ADDED
@@ -0,0 +1,14 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
10
+ *.bundle
11
+ *.so
12
+ *.o
13
+ *.a
14
+ mkmf.log
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source 'https://rubygems.org'
2
+
3
+ # Specify your gem's dependencies in slack-mail.gemspec
4
+ gemspec
data/LICENSE.txt ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2015 James Dabbs
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,66 @@
1
+ # Slack::Mail
2
+
3
+ `ActionMailer` inspired [Slack](slack.com) message objects.
4
+
5
+
6
+ ## Usage
7
+
8
+ Add `gem 'slack-mail'` to your `Gemfile` and install it.
9
+
10
+ ```ruby
11
+ # Basic usage.
12
+ Slack::Mail.new(text: "...").deliver_now
13
+
14
+ # Using `ActiveJob` to send async (if configured)
15
+ Slack::Mail.new(text: "...").deliver_later
16
+
17
+ # Monitor your Rails app
18
+ class ApplicationController
19
+ rescue_from StandardError do |e|
20
+ Slack::Mail.new(channel: "bots").attach_error(e).deliver_later
21
+ end
22
+ end
23
+ ```
24
+
25
+ Valid [mail attributes](https://github.com/jamesdabbs/slack-mail/blob/master/lib/slack/mail.rb#L14) are
26
+
27
+ * channel
28
+ * text
29
+ * username
30
+ * as_user
31
+ * parse
32
+ * link_names
33
+ * attachments
34
+ * unfurl_links
35
+ * unfurl_media
36
+ * icon_url
37
+ * icon_emoji
38
+
39
+ all as per the [Slack API](https://api.slack.com/methods/chat.postMessage) (or `ls Slack::Mail.new` if you've got [pry](http://pryrepl.org/))
40
+
41
+ ### Configuring Send Strategies
42
+
43
+ By default, messages are "delivered" into an array at `Slack::Mail.deliveries`
44
+
45
+ To actually send them, you'll need to [configure an incoming webhook](https://api.slack.com/incoming-webhooks) and tell `Slack::Mail` about it
46
+
47
+ ```ruby
48
+ Rails.application.configure do
49
+ config.slack_mail.deliver_with :perform, webhook_url: ...
50
+ ```
51
+
52
+ You can also opt-in to storing messages (e.g. in `config/environments/test.rb`)
53
+
54
+ ```ruby
55
+ Rails.application.configure do
56
+ config.slack_mail.deliver_with :store
57
+ end
58
+ ```
59
+
60
+ ## Contributing
61
+
62
+ 1. Fork it ( https://github.com/[my-github-username]/slack-mail/fork )
63
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
64
+ 3. Commit your changes (`git commit -am 'Add some feature'`)
65
+ 4. Push to the branch (`git push origin my-new-feature`)
66
+ 5. Create a new Pull Request
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require "bundler/gem_tasks"
2
+
data/lib/slack/mail.rb ADDED
@@ -0,0 +1,49 @@
1
+ require "slack-notifier"
2
+
3
+ require "slack/mail/config"
4
+ require "slack/mail/delivery"
5
+ require "slack/mail/job"
6
+ require "slack/mail/railtie"
7
+ require "slack/mail/version"
8
+
9
+ module Slack
10
+ class Mail
11
+
12
+ include Virtus.model
13
+
14
+ attribute :channel, String, default: '#general'
15
+ attribute :text
16
+ attribute :username
17
+ attribute :as_user
18
+ attribute :parse
19
+ attribute :link_names
20
+ attribute :attachments
21
+ attribute :unfurl_links
22
+ attribute :unfurl_media
23
+ attribute :icon_url
24
+ attribute :icon_emoji
25
+
26
+ def deliver_now
27
+ Mail.config.deliverer.deliver self
28
+ end
29
+
30
+ def deliver_later
31
+ Slack::Mail::Job.perform_later to_h
32
+ end
33
+
34
+ def attach_error error
35
+ self.text ||= error.to_s
36
+ self.attachments ||= []
37
+
38
+ trace = error.backtrace.join "\n"
39
+ attachments.push \
40
+ fallback: trace,
41
+ text: "```#{trace}```",
42
+ color: "danger",
43
+ mrkdwn_in: ["text"]
44
+
45
+ self
46
+ end
47
+
48
+ end
49
+ end
@@ -0,0 +1,27 @@
1
+ module Slack
2
+ class Mail
3
+ def self.deliverers
4
+ {
5
+ perform: Perform,
6
+ store: Store
7
+ }
8
+ end
9
+
10
+ def self.config
11
+ @config ||= Slack::Mail::Configurator.new
12
+ end
13
+
14
+
15
+ class Configurator
16
+ attr_reader :deliverer
17
+
18
+ def initialize
19
+ @deliverer = Slack::Mail::Store.new
20
+ end
21
+
22
+ def deliver_with name, *args
23
+ @deliverer = Slack::Mail.deliverers.fetch(name).new *args
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,33 @@
1
+ module Slack
2
+ class Mail
3
+ DeliveryFailure = Class.new(StandardError)
4
+
5
+ def self.deliveries
6
+ @_deliveries ||= []
7
+ end
8
+
9
+ class Perform
10
+ def initialize webhook_url:
11
+ @notifier = Slack::Notifier.new webhook_url
12
+ end
13
+
14
+ def deliver message
15
+ opts = message.to_h.reject { |_,v| v.nil? }
16
+ text = opts.delete(:text) || " "
17
+
18
+ response = @notifier.ping text, opts
19
+ unless response.code == "200"
20
+ raise DeliveryFailure, "Failed to reach #{@notifier.endpoint} (#{response.code})"
21
+ end
22
+ true
23
+ end
24
+ end
25
+
26
+ class Store
27
+ def deliver message
28
+ Slack::Mail.deliveries.push message
29
+ end
30
+ end
31
+
32
+ end
33
+ end
@@ -0,0 +1,11 @@
1
+ module Slack
2
+ class Mail
3
+ class Job < ActiveJob::Base
4
+ queue_as :default
5
+
6
+ def perform attrs
7
+ Slack::Mail.new(attrs).deliver_now
8
+ end
9
+ end
10
+ end
11
+ end
@@ -0,0 +1,7 @@
1
+ module Slack
2
+ class Mail
3
+ class Railtie < Rails::Railtie
4
+ config.slack_mail = Slack::Mail.config
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module Slack
2
+ class Mail
3
+ VERSION = "0.0.1"
4
+ end
5
+ end
@@ -0,0 +1,26 @@
1
+ # coding: utf-8
2
+ lib = File.expand_path('../lib', __FILE__)
3
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
+ require 'slack/mail/version'
5
+
6
+ Gem::Specification.new do |spec|
7
+ spec.name = "slack-mail"
8
+ spec.version = Slack::Mail::VERSION
9
+ spec.authors = ["James Dabbs"]
10
+ spec.email = ["jamesdabbs@gmail.com"]
11
+ spec.summary = %q{ActionMailer inspired Slack message objects.}
12
+ spec.description = spec.summary
13
+ spec.homepage = ""
14
+ spec.license = "MIT"
15
+
16
+ spec.files = `git ls-files -z`.split("\x0")
17
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
+ spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
19
+ spec.require_paths = ["lib"]
20
+
21
+ spec.add_development_dependency "bundler", "~> 1.7"
22
+ spec.add_development_dependency "rake", "~> 10.0"
23
+
24
+ spec.add_dependency "slack-notifier"
25
+ spec.add_dependency "rails", "~> 4.2" # For ActiveJob
26
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: slack-mail
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - James Dabbs
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2015-07-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.7'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.7'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: slack-notifier
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rails
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '4.2'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '4.2'
69
+ description: ActionMailer inspired Slack message objects.
70
+ email:
71
+ - jamesdabbs@gmail.com
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - ".gitignore"
77
+ - Gemfile
78
+ - LICENSE.txt
79
+ - README.md
80
+ - Rakefile
81
+ - lib/slack/mail.rb
82
+ - lib/slack/mail/config.rb
83
+ - lib/slack/mail/delivery.rb
84
+ - lib/slack/mail/job.rb
85
+ - lib/slack/mail/railtie.rb
86
+ - lib/slack/mail/version.rb
87
+ - slack-mail.gemspec
88
+ homepage: ''
89
+ licenses:
90
+ - MIT
91
+ metadata: {}
92
+ post_install_message:
93
+ rdoc_options: []
94
+ require_paths:
95
+ - lib
96
+ required_ruby_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
102
+ requirements:
103
+ - - ">="
104
+ - !ruby/object:Gem::Version
105
+ version: '0'
106
+ requirements: []
107
+ rubyforge_project:
108
+ rubygems_version: 2.4.5
109
+ signing_key:
110
+ specification_version: 4
111
+ summary: ActionMailer inspired Slack message objects.
112
+ test_files: []