upcloudify 0.2.1 → 0.3
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/README.md +2 -0
- data/Rakefile +8 -0
- data/lib/notifiers/slack.rb +30 -0
- data/lib/upcloudify/version.rb +2 -2
- data/lib/upcloudify.rb +20 -8
- data/scratch +2 -0
- data/spec/notifiers/slack_spec.rb +50 -0
- data/spec/spec_helper.rb +3 -0
- data/spec/upcloudify_spec.rb +56 -0
- data/upcloudify.gemspec +3 -0
- metadata +49 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: c0182ed646b50b0a9f00e18e9d857e0a7e89b060
|
4
|
+
data.tar.gz: 69771857a3449b01acb736d4f331b6f2109ff3d1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 83697d6c71b144a0af6e4a065677c18e34b74427655ae296c37646ea3c65d8f541c1b25f769b87f566b499bd3fe08a822f234ee50c15e45822027d0967c6c038
|
7
|
+
data.tar.gz: 1a09825874d8c783f3e1900f0efd2f9750dc4e181231a969ca2af5ebb1404529dfde89d84bf8f3e27fe5bbcca9065cac65286429984ecdacf3acc6db949f8b21
|
data/README.md
CHANGED
data/Rakefile
CHANGED
@@ -0,0 +1,30 @@
|
|
1
|
+
class Upcloudify
|
2
|
+
module Notifiers
|
3
|
+
class Slack
|
4
|
+
require "httparty"
|
5
|
+
|
6
|
+
def initialize(to: nil, url:)
|
7
|
+
@url = url
|
8
|
+
@to = to
|
9
|
+
end
|
10
|
+
|
11
|
+
def notify(text: nil)
|
12
|
+
HTTParty.post(
|
13
|
+
@url,
|
14
|
+
headers: {"Content-Type" => content_type},
|
15
|
+
body: payload.merge(text: text).to_json
|
16
|
+
)
|
17
|
+
end
|
18
|
+
|
19
|
+
def payload
|
20
|
+
{ channel: @to }
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def content_type
|
26
|
+
"application/json"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/upcloudify/version.rb
CHANGED
@@ -1,3 +1,3 @@
|
|
1
|
-
|
2
|
-
VERSION = "0.
|
1
|
+
class Upcloudify
|
2
|
+
VERSION = "0.3"
|
3
3
|
end
|
data/lib/upcloudify.rb
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
require "upcloudify/version"
|
2
|
+
require "notifiers/slack"
|
3
|
+
|
2
4
|
require 'gem_config'
|
3
5
|
require 'zip/zip'
|
4
6
|
require 'zippy'
|
@@ -6,21 +8,32 @@ require 'pony'
|
|
6
8
|
require 'fog'
|
7
9
|
require 'date'
|
8
10
|
|
9
|
-
|
10
|
-
|
11
|
+
class Upcloudify
|
12
|
+
|
13
|
+
def initialize(uploader:, notifier:)
|
14
|
+
@uploader = uploader
|
15
|
+
@notifier = notifier
|
16
|
+
end
|
11
17
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
18
|
+
def upload_and_notify(filename:, attachment:, message: "%s")
|
19
|
+
expiration = (Date.today + 7).to_time
|
20
|
+
file = @uploader.upload(filename, attachment)
|
21
|
+
@notifier.notify(text: message % file.url(expiration))
|
16
22
|
end
|
17
23
|
|
18
24
|
class S3
|
19
25
|
|
26
|
+
include GemConfig::Base
|
27
|
+
with_configuration do
|
28
|
+
has :aws_access_key_id, default: ENV['AWS_ACCESS_KEY_ID']
|
29
|
+
has :aws_secret_access_key, default: ENV['AWS_SECRET_ACCESS_KEY']
|
30
|
+
has :aws_directory
|
31
|
+
end
|
32
|
+
|
20
33
|
def initialize(options = {
|
21
34
|
aws_access_key_id: Upcloudify.configuration.aws_access_key_id,
|
22
35
|
aws_secret_access_key: Upcloudify.configuration.aws_secret_access_key,
|
23
|
-
aws_directory: Upcloudify.configuration.aws_directory
|
36
|
+
aws_directory: Upcloudify.configuration.aws_directory,
|
24
37
|
})
|
25
38
|
raise ArgumentError, "aws_access_key_id is required" unless options[:aws_access_key_id]
|
26
39
|
raise ArgumentError, "aws_secret_access_key is required" unless options[:aws_secret_access_key]
|
@@ -80,7 +93,6 @@ module Upcloudify
|
|
80
93
|
body: (options[:body] || '') + file.url(expiration) + ' '
|
81
94
|
|
82
95
|
end
|
83
|
-
|
84
96
|
end
|
85
97
|
|
86
98
|
end
|
data/scratch
ADDED
@@ -0,0 +1,50 @@
|
|
1
|
+
require "notifiers/slack"
|
2
|
+
|
3
|
+
describe Upcloudify::Notifiers::Slack do
|
4
|
+
Given(:recipient) { "@parasquid" }
|
5
|
+
Given(:klass) { Upcloudify::Notifiers::Slack }
|
6
|
+
Given(:slack_api_url) { "https://hooks.slack.com/services/T00000000/B00000000/XXXXXXXXXXXXXXXXXXXXXXXX"}
|
7
|
+
context "sanity check" do
|
8
|
+
Given(:token) { "token" }
|
9
|
+
When(:instance) { klass.new(to: recipient, url: slack_api_url) }
|
10
|
+
Then { instance != nil }
|
11
|
+
end
|
12
|
+
|
13
|
+
Given(:instance) { klass.new(to: recipient, url: slack_api_url) }
|
14
|
+
describe "slack endpoint connectivity" do
|
15
|
+
context "a connection is made to the slack server" do
|
16
|
+
Given!(:slack_api_stub) { stub_request(:post, slack_api_url) }
|
17
|
+
When { instance.notify }
|
18
|
+
Then { expect(slack_api_stub).to have_been_requested }
|
19
|
+
end
|
20
|
+
|
21
|
+
context "the content type is application/json" do
|
22
|
+
Given!(:slack_api_stub) {
|
23
|
+
stub_request(:post, slack_api_url).
|
24
|
+
with(headers: {"Content-Type" => "application/json"})
|
25
|
+
}
|
26
|
+
When { instance.notify }
|
27
|
+
Then { expect(slack_api_stub).to have_been_requested }
|
28
|
+
end
|
29
|
+
|
30
|
+
context "a custom message can be sent for the notification" do
|
31
|
+
Given!(:slack_api_stub) {
|
32
|
+
stub_request(:post, slack_api_url).
|
33
|
+
with(
|
34
|
+
headers: {"Content-Type" => "application/json"},
|
35
|
+
body: { text: "abc", channel: recipient }
|
36
|
+
)
|
37
|
+
}
|
38
|
+
When { instance.notify(text: "abc") }
|
39
|
+
Then { expect(slack_api_stub).to have_been_requested }
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
describe "payload" do
|
44
|
+
Given(:instance) { klass.new(to: recipient, url: slack_api_url) }
|
45
|
+
context "the payload contains the username to be notified" do
|
46
|
+
When(:payload) { instance.payload }
|
47
|
+
Then { expect(payload).to include(channel: recipient) }
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
data/spec/spec_helper.rb
CHANGED
@@ -1,3 +1,6 @@
|
|
1
|
+
require 'rspec/given'
|
2
|
+
require 'webmock/rspec'
|
3
|
+
|
1
4
|
# This file was generated by the `rspec --init` command. Conventionally, all
|
2
5
|
# specs live under a `spec` directory, which RSpec adds to the `$LOAD_PATH`.
|
3
6
|
# The generated `.rspec` file contains `--require spec_helper` which will cause
|
data/spec/upcloudify_spec.rb
CHANGED
@@ -44,4 +44,60 @@ describe Upcloudify::S3 do
|
|
44
44
|
expect(subject.cloud(connection)).to eq files
|
45
45
|
end
|
46
46
|
end
|
47
|
+
end
|
48
|
+
|
49
|
+
describe Upcloudify do
|
50
|
+
describe ".upload_and_notify" do
|
51
|
+
Given(:test_file_class) {
|
52
|
+
class TestFile
|
53
|
+
def url(expiration)
|
54
|
+
"filename link"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
TestFile
|
58
|
+
}
|
59
|
+
Given(:test_file) { test_file_class.new }
|
60
|
+
Given(:uploader) { double("uploader") }
|
61
|
+
Given { allow(uploader).to receive(:upload).and_return(test_file) }
|
62
|
+
Given(:notifier) { double("notifier") }
|
63
|
+
Given(:klass) { Upcloudify }
|
64
|
+
Given(:instance) { klass.new(uploader: uploader, notifier: notifier) }
|
65
|
+
context "notifications" do
|
66
|
+
Given { expect(uploader).to receive(:upload) }
|
67
|
+
context "notifies the user" do
|
68
|
+
When { expect(notifier).to receive(:notify) }
|
69
|
+
Then {
|
70
|
+
expect {
|
71
|
+
instance.upload_and_notify(filename: 'abc', attachment: '123')
|
72
|
+
}.not_to raise_error
|
73
|
+
}
|
74
|
+
end
|
75
|
+
context "the notification has a custom message" do
|
76
|
+
When { expect(notifier).to receive(:notify).with({text: "hi"}) }
|
77
|
+
Then {
|
78
|
+
expect {
|
79
|
+
instance.upload_and_notify(filename: 'abc', attachment: '123', message: "hi")
|
80
|
+
}.not_to raise_error
|
81
|
+
}
|
82
|
+
end
|
83
|
+
context "the notification can merge the file url" do
|
84
|
+
When { expect(notifier).to receive(:notify).with({text: "your report <filename link>"}) }
|
85
|
+
Then {
|
86
|
+
expect {
|
87
|
+
instance.upload_and_notify(filename: 'abc', attachment: '123', message: "your report <%s>")
|
88
|
+
}.not_to raise_error
|
89
|
+
}
|
90
|
+
end
|
91
|
+
end
|
92
|
+
context "uploads the file" do
|
93
|
+
Given { allow(notifier).to receive(:notify) }
|
94
|
+
When { expect(uploader).to receive(:upload) }
|
95
|
+
Then {
|
96
|
+
expect {
|
97
|
+
instance.upload_and_notify(filename: 'abc', attachment: '123')
|
98
|
+
}.not_to raise_error
|
99
|
+
}
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
47
103
|
end
|
data/upcloudify.gemspec
CHANGED
@@ -25,11 +25,14 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.add_development_dependency "pry"
|
26
26
|
spec.add_development_dependency "rspec"
|
27
27
|
spec.add_development_dependency "guard-rspec"
|
28
|
+
spec.add_development_dependency "rspec-given"
|
29
|
+
spec.add_development_dependency "webmock"
|
28
30
|
|
29
31
|
spec.add_dependency 'gem_config'
|
30
32
|
spec.add_dependency 'pony'
|
31
33
|
spec.add_dependency 'zippy'
|
32
34
|
spec.add_dependency 'zip-zip'
|
33
35
|
spec.add_dependency 'fog'
|
36
|
+
spec.add_dependency 'httparty'
|
34
37
|
|
35
38
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: upcloudify
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: '0.3'
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- parasquid
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-28 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -80,6 +80,34 @@ dependencies:
|
|
80
80
|
- - ">="
|
81
81
|
- !ruby/object:Gem::Version
|
82
82
|
version: '0'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: rspec-given
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - ">="
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - ">="
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - ">="
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - ">="
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '0'
|
83
111
|
- !ruby/object:Gem::Dependency
|
84
112
|
name: gem_config
|
85
113
|
requirement: !ruby/object:Gem::Requirement
|
@@ -150,6 +178,20 @@ dependencies:
|
|
150
178
|
- - ">="
|
151
179
|
- !ruby/object:Gem::Version
|
152
180
|
version: '0'
|
181
|
+
- !ruby/object:Gem::Dependency
|
182
|
+
name: httparty
|
183
|
+
requirement: !ruby/object:Gem::Requirement
|
184
|
+
requirements:
|
185
|
+
- - ">="
|
186
|
+
- !ruby/object:Gem::Version
|
187
|
+
version: '0'
|
188
|
+
type: :runtime
|
189
|
+
prerelease: false
|
190
|
+
version_requirements: !ruby/object:Gem::Requirement
|
191
|
+
requirements:
|
192
|
+
- - ">="
|
193
|
+
- !ruby/object:Gem::Version
|
194
|
+
version: '0'
|
153
195
|
description: |-
|
154
196
|
Upcloudify simplifies the process for uploading
|
155
197
|
attachments to the cloud and emailing the recipient
|
@@ -167,11 +209,14 @@ files:
|
|
167
209
|
- LICENSE.txt
|
168
210
|
- README.md
|
169
211
|
- Rakefile
|
212
|
+
- lib/notifiers/slack.rb
|
170
213
|
- lib/upcloudify.rb
|
171
214
|
- lib/upcloudify/version.rb
|
172
215
|
- sample_app/Gemfile
|
173
216
|
- sample_app/sample.rb
|
174
217
|
- sample_app/views/index.erb
|
218
|
+
- scratch
|
219
|
+
- spec/notifiers/slack_spec.rb
|
175
220
|
- spec/spec_helper.rb
|
176
221
|
- spec/upcloudify_spec.rb
|
177
222
|
- upcloudify.gemspec
|
@@ -195,10 +240,11 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
195
240
|
version: '0'
|
196
241
|
requirements: []
|
197
242
|
rubyforge_project:
|
198
|
-
rubygems_version: 2.
|
243
|
+
rubygems_version: 2.5.1
|
199
244
|
signing_key:
|
200
245
|
specification_version: 4
|
201
246
|
summary: Upload a file to the cloud and email a link for the attachment
|
202
247
|
test_files:
|
248
|
+
- spec/notifiers/slack_spec.rb
|
203
249
|
- spec/spec_helper.rb
|
204
250
|
- spec/upcloudify_spec.rb
|