peertransfer_chat 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 +7 -0
- data/.gitignore +23 -0
- data/Gemfile +6 -0
- data/README.md +56 -0
- data/lib/peertransfer_chat/client.rb +53 -0
- data/lib/peertransfer_chat/config.rb +27 -0
- data/lib/peertransfer_chat/version.rb +3 -0
- data/lib/peertransfer_chat.rb +3 -0
- data/peertransfer_chat.gemspec +27 -0
- data/spec/integration/client_spec.rb +35 -0
- data/spec/lib/client_spec.rb +49 -0
- data/spec/lib/config_spec.rb +49 -0
- data/spec/spec_helper.rb +9 -0
- metadata +115 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: e61b658dd3fd215ac1a6c45ef402e47a903dea438b206c50c92d4de629cc175f
|
4
|
+
data.tar.gz: 343fb35a960fbddf8390efa25c19f6d61a2487a1b7a066a3e550fecef9336062
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: ef0dac732634c6448868e5588f0044c27367ceb3452fdb5a1f99aaccbb5fdac20f2416dbdf875ba34e3b940e681e3b75c01847da552a2bd2b6cf89f85155666b
|
7
|
+
data.tar.gz: 3d08e5b7df60265c04effee0dd2e416001c73a7cb97b3b59b33d7a06cfab10e2c13f93e6add5ec19b65ea72aa6e3ca8a1ad9a5ccad608e8a5b839b6e68427d3c
|
data/.gitignore
ADDED
@@ -0,0 +1,23 @@
|
|
1
|
+
*.gem
|
2
|
+
*.rbc
|
3
|
+
.bundle
|
4
|
+
.config
|
5
|
+
.yardoc
|
6
|
+
Gemfile.lock
|
7
|
+
InstalledFiles
|
8
|
+
_yardoc
|
9
|
+
coverage
|
10
|
+
doc/
|
11
|
+
lib/bundler/man
|
12
|
+
pkg
|
13
|
+
rdoc
|
14
|
+
spec/reports
|
15
|
+
test/tmp
|
16
|
+
test/version_tmp
|
17
|
+
tmp
|
18
|
+
*.bundle
|
19
|
+
*.so
|
20
|
+
*.o
|
21
|
+
*.a
|
22
|
+
mkmf.log
|
23
|
+
vendor/bundle
|
data/Gemfile
ADDED
data/README.md
ADDED
@@ -0,0 +1,56 @@
|
|
1
|
+
# PeertransferChat
|
2
|
+
|
3
|
+
A wrapper that works as a unique interface to integrate a chat system into the peerTransfer platform.
|
4
|
+
|
5
|
+
## Build Status
|
6
|
+
|
7
|
+
[](http://travis-ci.org/peertransfer/peertransfer_chat)
|
8
|
+
[](https://coveralls.io/r/peertransfer/peertransfer_chat)
|
9
|
+
[](https://codeclimate.com/github/peertransfer/peertransfer_chat)
|
10
|
+
[](https://gemnasium.com/peertransfer/peertransfer_chat)
|
11
|
+
|
12
|
+
## Installation
|
13
|
+
|
14
|
+
Add this line to your application's Gemfile:
|
15
|
+
|
16
|
+
gem 'peertransfer_chat', git: 'https://github.com/peertransfer/peertransfer_chat.git'
|
17
|
+
|
18
|
+
And then execute:
|
19
|
+
|
20
|
+
$ bundle
|
21
|
+
|
22
|
+
Or install it yourself as:
|
23
|
+
|
24
|
+
$ gem install peertransfer_chat
|
25
|
+
|
26
|
+
## Usage
|
27
|
+
|
28
|
+
Configure the chat client:
|
29
|
+
|
30
|
+
```ruby
|
31
|
+
PeertransferChat.configure do |config|
|
32
|
+
config.team = team_name
|
33
|
+
config.incoming_token = team_token
|
34
|
+
config.channel = team_channel
|
35
|
+
config.username = team_username
|
36
|
+
end
|
37
|
+
```
|
38
|
+
|
39
|
+
Send a message:
|
40
|
+
|
41
|
+
```ruby
|
42
|
+
PeertransferChat::Client.speak('There are issues pending review')
|
43
|
+
```
|
44
|
+
|
45
|
+
Upload a file:
|
46
|
+
```ruby
|
47
|
+
PeertransferChat::Client.upload('/path/to/a/file.txt')
|
48
|
+
```
|
49
|
+
|
50
|
+
## Slack settings description
|
51
|
+
- `team` Your team
|
52
|
+
- `channel` Channel name
|
53
|
+
- `api_token` This token comes from your user https://api.slack.com/web
|
54
|
+
- `rtm_token` Real time messaging, you can find it in integration -> bot -> token
|
55
|
+
- `incomming_token` Incoming web hook token, you can create one in integration -> incomming webhooks
|
56
|
+
- `channel_id` Channel id you can find it in the code of your slack team web page
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require 'slackr'
|
2
|
+
|
3
|
+
module PeertransferChat
|
4
|
+
class Client
|
5
|
+
|
6
|
+
def self.upload(filename)
|
7
|
+
new.upload(filename)
|
8
|
+
end
|
9
|
+
|
10
|
+
def self.speak(something)
|
11
|
+
new.speak(something)
|
12
|
+
end
|
13
|
+
|
14
|
+
def upload(filename)
|
15
|
+
slack = Slackr.connect(team, api_token, slack_opts)
|
16
|
+
slack.upload(filename, { 'channels' => channel_id })
|
17
|
+
end
|
18
|
+
|
19
|
+
def speak(message)
|
20
|
+
slack = Slackr.connect(team, incoming_token, slack_opts)
|
21
|
+
slack.say(message)
|
22
|
+
end
|
23
|
+
|
24
|
+
private
|
25
|
+
|
26
|
+
def team
|
27
|
+
config.team
|
28
|
+
end
|
29
|
+
|
30
|
+
def incoming_token
|
31
|
+
config.incoming_token
|
32
|
+
end
|
33
|
+
|
34
|
+
def api_token
|
35
|
+
config.api_token
|
36
|
+
end
|
37
|
+
|
38
|
+
def channel_id
|
39
|
+
config.channel_id
|
40
|
+
end
|
41
|
+
|
42
|
+
def slack_opts
|
43
|
+
{
|
44
|
+
'channel' => config.channel,
|
45
|
+
'username' => config.username
|
46
|
+
}
|
47
|
+
end
|
48
|
+
|
49
|
+
def config
|
50
|
+
PeertransferChat.config
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module PeertransferChat
|
2
|
+
class Config
|
3
|
+
SETTINGS = [:team, :channel, :incoming_token, :username, :api_token, :channel_id]
|
4
|
+
|
5
|
+
attr_accessor *SETTINGS
|
6
|
+
|
7
|
+
def valid?
|
8
|
+
@team && @channel && @incoming_token && @username
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
class << self
|
13
|
+
def configure
|
14
|
+
@config ||= Config.new
|
15
|
+
yield(@config)
|
16
|
+
end
|
17
|
+
|
18
|
+
def reset!
|
19
|
+
@config = Config.new
|
20
|
+
end
|
21
|
+
|
22
|
+
def config
|
23
|
+
raise('configuration is wrong') unless @config.valid?
|
24
|
+
@config
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
lib = File.expand_path('../lib', __FILE__)
|
3
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
|
+
require 'peertransfer_chat/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |spec|
|
7
|
+
spec.name = 'peertransfer_chat'
|
8
|
+
spec.version = PeertransferChat::VERSION
|
9
|
+
spec.authors = ['peerTransfer tech']
|
10
|
+
spec.email = ['tech@peertransfer.com']
|
11
|
+
spec.summary = %q{A common interface to our chat system}
|
12
|
+
spec.description = %q{A common interface to our chat system}
|
13
|
+
|
14
|
+
files = Dir['lib/*.rb'] + Dir['lib/**/*.rb']
|
15
|
+
rootfiles = ['Gemfile', 'peertransfer_chat.gemspec', 'README.md']
|
16
|
+
dotfiles = ['.gitignore']
|
17
|
+
|
18
|
+
spec.files = files + rootfiles + dotfiles
|
19
|
+
spec.test_files = Dir['spec/*.rb'] + Dir['spec/**/*.rb']
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
|
22
|
+
spec.add_runtime_dependency 'slackr', '0.0.6'
|
23
|
+
|
24
|
+
spec.add_development_dependency 'bundler', '~> 1.6'
|
25
|
+
spec.add_development_dependency 'simplecov'
|
26
|
+
spec.add_development_dependency 'coveralls'
|
27
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PeertransferChat::Client do
|
4
|
+
let(:slack_client) { instance_double(Slackr) }
|
5
|
+
let(:team_name) { 'a team' }
|
6
|
+
let(:team_token) { 'a token' }
|
7
|
+
let(:team_channel) { 'a channel' }
|
8
|
+
let(:team_username) { 'a username' }
|
9
|
+
let(:opts) { { 'channel' => team_channel, 'username' => team_username } }
|
10
|
+
|
11
|
+
after do
|
12
|
+
PeertransferChat.reset!
|
13
|
+
end
|
14
|
+
|
15
|
+
before do
|
16
|
+
PeertransferChat.configure do |c|
|
17
|
+
c.team = team_name
|
18
|
+
c.incoming_token = team_token
|
19
|
+
c.channel = team_channel
|
20
|
+
c.username = team_username
|
21
|
+
end
|
22
|
+
|
23
|
+
allow(Slackr).to receive(:connect).
|
24
|
+
with(team_name, team_token, opts).
|
25
|
+
and_return(slack_client)
|
26
|
+
end
|
27
|
+
|
28
|
+
describe '.say' do
|
29
|
+
it 'speaks something to a channel' do
|
30
|
+
expect(slack_client).to receive(:say).with('hello')
|
31
|
+
|
32
|
+
described_class.speak('hello')
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PeertransferChat::Client do
|
4
|
+
let(:slack_client) { instance_double(Slackr) }
|
5
|
+
let(:team_name) { 'a team' }
|
6
|
+
let(:team_token) { 'a token' }
|
7
|
+
let(:api_token) { 'an api token' }
|
8
|
+
let(:team_channel) { 'a channel' }
|
9
|
+
let(:team_username) { 'a username' }
|
10
|
+
let(:opts) { { 'channel' => team_channel, 'username' => team_username } }
|
11
|
+
|
12
|
+
before do
|
13
|
+
allow(PeertransferChat).to receive(:config).and_return(
|
14
|
+
double(
|
15
|
+
PeertransferChat::Config,
|
16
|
+
team: team_name,
|
17
|
+
incoming_token: team_token,
|
18
|
+
channel: team_channel,
|
19
|
+
username: team_username,
|
20
|
+
channel_id: 'C026VKGP7',
|
21
|
+
api_token: api_token
|
22
|
+
)
|
23
|
+
)
|
24
|
+
end
|
25
|
+
|
26
|
+
describe '.upload' do
|
27
|
+
it 'uploads image to a channel' do
|
28
|
+
allow(Slackr).to receive(:connect).
|
29
|
+
with(team_name, api_token, opts).
|
30
|
+
and_return(slack_client)
|
31
|
+
|
32
|
+
expect(slack_client).to receive(:upload).with('/foo/bar.bin', { 'channels' => 'C026VKGP7' })
|
33
|
+
|
34
|
+
described_class.upload('/foo/bar.bin')
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
describe '.say' do
|
39
|
+
it 'speaks something to a channel' do
|
40
|
+
allow(Slackr).to receive(:connect).
|
41
|
+
with(team_name, team_token, opts).
|
42
|
+
and_return(slack_client)
|
43
|
+
|
44
|
+
expect(slack_client).to receive(:say).with('hello')
|
45
|
+
|
46
|
+
described_class.speak('hello')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
@@ -0,0 +1,49 @@
|
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
describe PeertransferChat::Config do
|
4
|
+
let(:team_name) { 'a team' }
|
5
|
+
let(:team_token) { 'a token' }
|
6
|
+
let(:team_channel) { 'a channel' }
|
7
|
+
let(:team_username) { 'a username' }
|
8
|
+
|
9
|
+
context 'when configured' do
|
10
|
+
before do
|
11
|
+
PeertransferChat.configure do |config|
|
12
|
+
config.team = team_name
|
13
|
+
config.incoming_token = team_token
|
14
|
+
config.channel = team_channel
|
15
|
+
config.username = team_username
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
describe '.reset' do
|
20
|
+
it 'reset any previous config' do
|
21
|
+
PeertransferChat.reset!
|
22
|
+
|
23
|
+
expect do
|
24
|
+
PeertransferChat.config.username
|
25
|
+
end.to raise_error('configuration is wrong')
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
it 'stores config' do
|
30
|
+
expect(PeertransferChat.config.team).to eq('a team')
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
context 'not configured' do
|
35
|
+
before do
|
36
|
+
PeertransferChat.configure do |config|
|
37
|
+
config.team = team_name
|
38
|
+
config.incoming_token = team_token
|
39
|
+
config.channel = team_channel
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
it 'raises an exception if all values are not set' do
|
44
|
+
expect do
|
45
|
+
PeertransferChat.config.username
|
46
|
+
end.to raise_error('configuration is wrong')
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/spec/spec_helper.rb
ADDED
metadata
ADDED
@@ -0,0 +1,115 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: peertransfer_chat
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- peerTransfer tech
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2018-06-27 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: slackr
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 0.0.6
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 0.0.6
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.6'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.6'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: simplecov
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
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: coveralls
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
69
|
+
description: A common interface to our chat system
|
70
|
+
email:
|
71
|
+
- tech@peertransfer.com
|
72
|
+
executables: []
|
73
|
+
extensions: []
|
74
|
+
extra_rdoc_files: []
|
75
|
+
files:
|
76
|
+
- ".gitignore"
|
77
|
+
- Gemfile
|
78
|
+
- README.md
|
79
|
+
- lib/peertransfer_chat.rb
|
80
|
+
- lib/peertransfer_chat/client.rb
|
81
|
+
- lib/peertransfer_chat/config.rb
|
82
|
+
- lib/peertransfer_chat/version.rb
|
83
|
+
- peertransfer_chat.gemspec
|
84
|
+
- spec/integration/client_spec.rb
|
85
|
+
- spec/lib/client_spec.rb
|
86
|
+
- spec/lib/config_spec.rb
|
87
|
+
- spec/spec_helper.rb
|
88
|
+
homepage:
|
89
|
+
licenses: []
|
90
|
+
metadata: {}
|
91
|
+
post_install_message:
|
92
|
+
rdoc_options: []
|
93
|
+
require_paths:
|
94
|
+
- lib
|
95
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0'
|
100
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
101
|
+
requirements:
|
102
|
+
- - ">="
|
103
|
+
- !ruby/object:Gem::Version
|
104
|
+
version: '0'
|
105
|
+
requirements: []
|
106
|
+
rubyforge_project:
|
107
|
+
rubygems_version: 2.7.7
|
108
|
+
signing_key:
|
109
|
+
specification_version: 4
|
110
|
+
summary: A common interface to our chat system
|
111
|
+
test_files:
|
112
|
+
- spec/spec_helper.rb
|
113
|
+
- spec/integration/client_spec.rb
|
114
|
+
- spec/lib/client_spec.rb
|
115
|
+
- spec/lib/config_spec.rb
|