slappy 0.2.0 → 0.2.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 +4 -4
- data/.hound.yml +1 -0
- data/.travis.yml +12 -9
- data/Guardfile +2 -1
- data/README.md +53 -27
- data/lib/slappy/client.rb +34 -18
- data/lib/slappy/dsl.rb +9 -0
- data/lib/slappy/event.rb +0 -3
- data/lib/slappy/listener.rb +4 -2
- data/lib/slappy/version.rb +1 -1
- data/lib/slappy.rb +15 -7
- data/slappy.gemspec +4 -4
- metadata +21 -8
- data/bin/console +0 -14
- data/bin/setup +0 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a38d4528b56aac0bc940bc257f66da45dc0d904f
|
4
|
+
data.tar.gz: a476d2ae9b9da850a08d5fdba7342d1ae019817d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 84194d504736578922db692aabf5649bbb395bc15a3dc4ea936405ffdf021ff67a9341f72064a783cf7707f84e1f6a5d5e7f1da5fc0e5ea338c6708f1b7f528f
|
7
|
+
data.tar.gz: 1915ef726371fa9e4bda4e8642b430054e955f60809c4e3fc7790e9c4c95510e4546c11a02342e83d923e9168cddfc5a6a9bb5619028f269e92cdfd5ef42b131
|
data/.hound.yml
CHANGED
data/.travis.yml
CHANGED
@@ -1,17 +1,20 @@
|
|
1
1
|
language: ruby
|
2
2
|
rvm:
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
- 2.0
|
4
|
+
- 2.1
|
5
|
+
- 2.2
|
6
|
+
- ruby-head
|
7
7
|
before_install: gem install bundler -v "~> 1.10"
|
8
|
-
bundler_args: --jobs=2
|
8
|
+
bundler_args: "--jobs=2"
|
9
9
|
cache: bundler
|
10
10
|
before_script:
|
11
|
-
|
11
|
+
- export CODECLIMATE_REPO_TOKEN=46e09f028aadd0d0f7e8aa4d917dc6f053c0a3d9ab0f82aab41f0918acc0384a
|
12
12
|
script:
|
13
|
-
|
14
|
-
|
13
|
+
- ruby --version
|
14
|
+
- bundle exec rspec
|
15
15
|
branches:
|
16
16
|
only:
|
17
|
-
|
17
|
+
- master
|
18
|
+
notifications:
|
19
|
+
slack:
|
20
|
+
secure: T6QhA+PdJTpGYjOk6d9uwt/p02OLcfieVUuNOY2po6KUsw9erMXCCuCGn1TXrRwFfnSVbuA7L3zjECMvaeDlsUURLVaZZduYHCpn6VXFfKlqzFxWr51Pk1qyE1feZCDPNNkr6PbgtFPHNWzZ/NUMrG0Z8Lo91PAr/RDolAa44MvLGq1ZDfAunITBRvGz8DhAu1Uf3EMPOqKtkN8NdEHp8pkns0XhmcqNLXwohdqXJY9R/TQ1gGJBc1hx3wZAqYCy0Eda44VBuzCg72QPUVQ3seGOts+2rgksNjnNLedB4F7bL7YZUjsam5OXKppnWt5HyE5bqkG1xrh6RguGVULBUTLRG5rY+FFtgJqgg2Qp4Ttu49Iyzh2DYhYleY6lsh1B/hsxzIjP+ojD4OXFKnb93IWxRvLrvPZGT2Q9V7zTo04Xa4cl7Zz33aPk59mZ/9ZmOlUCBtUFmYMslghOyIBSdqJHvHgXiVtheu231MuWdK7jg2U/aGnPKVh0jah9aEqNBmSmDbW2xfYEA+WINJmIKEktpQLyj8S3ajsdvZUuFcKdvZ0SEPoYuJGfaxiCKvPydm5yJFstlIYmgDlpFJh7Jh+LJy1trAvWGPcQMXs1MrZsc+c/UFs7zfrr/Uh74IxfdkIztNT2ZANYQ6zfXN2ZCT2ax9iE63gSgcCRGnEJ/R0=
|
data/Guardfile
CHANGED
@@ -26,7 +26,8 @@
|
|
26
26
|
|
27
27
|
guard :rspec, cmd: 'bundle exec rspec' do
|
28
28
|
watch(%r{^spec/.+_spec\.rb$})
|
29
|
-
watch(%r{^lib/(.+)/(.+)\.rb$})
|
29
|
+
watch(%r{^lib/(.+)/(.+)\.rb$}) { |m| "spec/#{m[1]}/#{m[2]}_spec.rb" }
|
30
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
30
31
|
watch('spec/spec_helper.rb') { 'spec' }
|
31
32
|
end
|
32
33
|
|
data/README.md
CHANGED
@@ -6,8 +6,35 @@
|
|
6
6
|
[](https://codeclimate.com/repos/563cbaad1787d72930000582/coverage)
|
7
7
|
[](https://gemnasium.com/yuemori/slappy)
|
8
8
|
|
9
|
-
This gem support to make slack bot
|
10
|
-
|
9
|
+
This gem support to make slack bot, inspire from [hubot](https://github.com/github/hubot) and [sinatra](https://github.com/sinatra/sinatra).
|
10
|
+
|
11
|
+
Use the Slack Realtime API and Web API(see the [official-documentation](https://api.slack.com)).
|
12
|
+
|
13
|
+
## Quick Start
|
14
|
+
|
15
|
+
### 1. Generate Slack API Token
|
16
|
+
|
17
|
+
Slack API Token generate from [official page](https://api.slack.com/web).
|
18
|
+
|
19
|
+
### 2. Set environment variable to Slack API Token
|
20
|
+
|
21
|
+
Slappy references `ENV['SLACK_TOKEN']` when use token.
|
22
|
+
|
23
|
+
(If you want to setting in code, we offer way to you).
|
24
|
+
|
25
|
+
### 3. Written Code
|
26
|
+
|
27
|
+
```ruby
|
28
|
+
require 'slappy'
|
29
|
+
require 'slappy/dsl'
|
30
|
+
|
31
|
+
# catch pattern
|
32
|
+
hear '^hello, slappy!' do |event|
|
33
|
+
say 'hello!!', channel: event.channel #=> respond message to channel
|
34
|
+
end
|
35
|
+
|
36
|
+
start
|
37
|
+
```
|
11
38
|
|
12
39
|
## Installation
|
13
40
|
|
@@ -33,8 +60,6 @@ Store configuration value in environment variables. They are easy to change betw
|
|
33
60
|
SLACK_TOKEN - required (when not configured)
|
34
61
|
```
|
35
62
|
|
36
|
-
Slack API Token generated in [this page](https://api.slack.com/web).
|
37
|
-
|
38
63
|
### Configure
|
39
64
|
Configure default settings.
|
40
65
|
There configrations effect on send message to slack when use `say` method and should override when option given.
|
@@ -64,7 +89,8 @@ channel - default: '#general'
|
|
64
89
|
icon_url - default: nil
|
65
90
|
```
|
66
91
|
|
67
|
-
### Example
|
92
|
+
### Example
|
93
|
+
#### Basic
|
68
94
|
|
69
95
|
```ruby
|
70
96
|
require 'slappy'
|
@@ -75,45 +101,45 @@ Slappy.hello do
|
|
75
101
|
end
|
76
102
|
|
77
103
|
# called when match message
|
78
|
-
Slappy.hear
|
104
|
+
Slappy.hear 'foo' do
|
79
105
|
puts 'foo'
|
80
106
|
end
|
81
107
|
|
82
|
-
#
|
83
|
-
Slappy.hear
|
108
|
+
# use regexp in string literal
|
109
|
+
Slappy.hear 'bar (.*)' do |event|
|
84
110
|
puts event.matches[1] #=> Event#matches return MatchData object
|
85
111
|
end
|
86
112
|
|
87
|
-
# event object is slack event JSON (convert to
|
88
|
-
Slappy.hear
|
113
|
+
# event object is slack event JSON (convert to Hashie::Mash)
|
114
|
+
Slappy.hear '^bar (.*)' do |event|
|
89
115
|
puts event.channel #=> channel id
|
90
116
|
Slappy.say 'slappy!', channel: event.channel #=> to received message channel
|
91
117
|
Slappy.say 'slappy!', channel: '#general'
|
92
118
|
Slappy.say 'slappy!', username: 'slappy!', icon_emoji: ':slappy:'
|
93
119
|
end
|
94
120
|
|
121
|
+
# use regexp literal
|
122
|
+
Slappy.hear /^foobar/ do
|
123
|
+
puts 'slappppy!'
|
124
|
+
end
|
125
|
+
|
95
126
|
Slappy.start
|
96
127
|
```
|
97
128
|
|
98
|
-
|
99
|
-
|
100
|
-
Please create a file named .env on the root of this repository. You can use .env.example file as a template
|
101
|
-
|
102
|
-
```
|
103
|
-
cp .env.example .env
|
104
|
-
```
|
129
|
+
#### Use Slappy DSL
|
105
130
|
|
106
|
-
|
131
|
+
Please require `'slappy/dsl'`, if you want short code
|
107
132
|
|
108
|
-
```
|
109
|
-
|
110
|
-
|
133
|
+
```ruby
|
134
|
+
require 'slappy'
|
135
|
+
require 'slappy/dsl'
|
111
136
|
|
112
|
-
|
137
|
+
# Omit 'Slappy' keyward, when delegator required
|
138
|
+
hear 'foo' do
|
139
|
+
say 'slappy!'
|
140
|
+
end
|
113
141
|
|
114
|
-
|
115
|
-
bundle install
|
116
|
-
bundle exec rspec
|
142
|
+
start
|
117
143
|
```
|
118
144
|
|
119
145
|
## Feature
|
@@ -123,11 +149,11 @@ bundle exec rspec
|
|
123
149
|
- [ ] Generate template settings
|
124
150
|
- [ ] CLI commands
|
125
151
|
- [ ] Add bot name
|
126
|
-
- [ ] client#respond (hubot#respond)
|
152
|
+
- [ ] client#respond (hubot#respond like)
|
127
153
|
|
128
154
|
## Contributing
|
129
155
|
|
130
|
-
1. Fork it ( http://github.com/
|
156
|
+
1. Fork it ( http://github.com/yuemori/slappy/fork )
|
131
157
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
132
158
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
133
159
|
4. Push to the branch (`git push origin my-new-feature`)
|
data/lib/slappy/client.rb
CHANGED
@@ -1,13 +1,10 @@
|
|
1
|
-
require 'slack'
|
2
|
-
require 'slappy/event'
|
3
|
-
require 'slappy/listener'
|
4
|
-
require 'slappy/configuration'
|
5
|
-
|
6
1
|
module Slappy
|
7
2
|
class Client
|
3
|
+
attr_reader :start_time
|
4
|
+
|
8
5
|
def initialize
|
9
6
|
Slack.configure { |slack| slack.token = config.token }
|
10
|
-
@
|
7
|
+
@callbacks = {}
|
11
8
|
end
|
12
9
|
|
13
10
|
def client
|
@@ -15,25 +12,22 @@ module Slappy
|
|
15
12
|
end
|
16
13
|
|
17
14
|
def start
|
18
|
-
@
|
19
|
-
|
20
|
-
|
21
|
-
event = Event.new(data, listener.pattern) if key == :message
|
22
|
-
listener.call(event)
|
23
|
-
end
|
24
|
-
end
|
15
|
+
@start_time = Time.now
|
16
|
+
@callbacks.each do |event_name, listeners|
|
17
|
+
register_event event_name, listeners
|
25
18
|
end
|
19
|
+
set_signal_trap
|
26
20
|
client.start
|
27
21
|
end
|
28
22
|
|
29
23
|
def hello(&block)
|
30
|
-
@
|
31
|
-
@
|
24
|
+
@callbacks[:hello] ||= []
|
25
|
+
@callbacks[:hello].push block
|
32
26
|
end
|
33
27
|
|
34
|
-
def hear(
|
35
|
-
@
|
36
|
-
@
|
28
|
+
def hear(pattern, &block)
|
29
|
+
@callbacks[:message] ||= []
|
30
|
+
@callbacks[:message].push Listener.new(pattern, block)
|
37
31
|
end
|
38
32
|
|
39
33
|
def say(text, options = {})
|
@@ -44,6 +38,28 @@ module Slappy
|
|
44
38
|
|
45
39
|
private
|
46
40
|
|
41
|
+
def set_signal_trap
|
42
|
+
[:TERM, :INT].each do |signal|
|
43
|
+
Signal.trap(signal) do
|
44
|
+
EventMachine.stop
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
def register_event(event_name, listeners)
|
50
|
+
client.on event_name do |data|
|
51
|
+
listeners.each do |listener|
|
52
|
+
case event_name
|
53
|
+
when :hello
|
54
|
+
listener.call
|
55
|
+
when :message
|
56
|
+
event = Event.new(data, listener.pattern)
|
57
|
+
listener.call(event)
|
58
|
+
end
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
47
63
|
def config
|
48
64
|
Slappy.configuration
|
49
65
|
end
|
data/lib/slappy/dsl.rb
ADDED
data/lib/slappy/event.rb
CHANGED
data/lib/slappy/listener.rb
CHANGED
@@ -1,11 +1,13 @@
|
|
1
1
|
module Slappy
|
2
2
|
class Listener
|
3
|
-
def initialize(
|
4
|
-
|
3
|
+
def initialize(pattern, callback)
|
4
|
+
pattern = /#{pattern}/ if pattern.is_a? String
|
5
|
+
@regexp = pattern
|
5
6
|
@callback = callback
|
6
7
|
end
|
7
8
|
|
8
9
|
def call(event)
|
10
|
+
return unless Time.at(event.ts.to_f) > Slappy.start_time
|
9
11
|
return unless event.text.match @regexp
|
10
12
|
@callback.call(event)
|
11
13
|
end
|
data/lib/slappy/version.rb
CHANGED
data/lib/slappy.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require '
|
2
|
-
require '
|
3
|
-
require '
|
1
|
+
require 'forwardable'
|
2
|
+
require 'hashie'
|
3
|
+
require 'slack'
|
4
4
|
|
5
5
|
module Slappy
|
6
6
|
class << self
|
@@ -18,10 +18,6 @@ module Slappy
|
|
18
18
|
@configuration || configure
|
19
19
|
end
|
20
20
|
|
21
|
-
def client
|
22
|
-
@client ||= Client.new
|
23
|
-
end
|
24
|
-
|
25
21
|
def method_missing(method, *args, &block)
|
26
22
|
return super unless client.respond_to?(method)
|
27
23
|
client.send(method, *args, &block)
|
@@ -30,5 +26,17 @@ module Slappy
|
|
30
26
|
def respond_to?(method)
|
31
27
|
client.respond_to?(method) || super
|
32
28
|
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
def client
|
33
|
+
@client ||= Client.new
|
34
|
+
end
|
33
35
|
end
|
34
36
|
end
|
37
|
+
|
38
|
+
require 'slappy/client'
|
39
|
+
require 'slappy/configuration'
|
40
|
+
require 'slappy/event'
|
41
|
+
require 'slappy/listener'
|
42
|
+
require 'slappy/version'
|
data/slappy.gemspec
CHANGED
@@ -10,13 +10,12 @@ Gem::Specification.new do |spec|
|
|
10
10
|
spec.email = ["yuemori@aiming-inc.com"]
|
11
11
|
|
12
12
|
spec.summary = %q{Simple Slack Bot Framework}
|
13
|
-
spec.description = %q{Simple Slack Bot Framework. Use Slack RealTime API}
|
13
|
+
spec.description = %q{Simple Slack Bot Framework. Use Slack RealTime API and Web API.}
|
14
14
|
spec.homepage = "https://github.com/yuemori/slappy"
|
15
15
|
spec.license = "MIT"
|
16
16
|
|
17
17
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
18
|
-
spec.
|
19
|
-
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
18
|
+
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
20
19
|
spec.require_paths = ["lib"]
|
21
20
|
|
22
21
|
spec.add_dependency 'slack-api'
|
@@ -28,6 +27,7 @@ Gem::Specification.new do |spec|
|
|
28
27
|
spec.add_development_dependency "guard-rspec"
|
29
28
|
spec.add_development_dependency "rubocop"
|
30
29
|
spec.add_development_dependency "guard-rubocop"
|
31
|
-
spec.add_development_dependency "dotenv"
|
32
30
|
spec.add_development_dependency "codeclimate-test-reporter"
|
31
|
+
spec.add_development_dependency "timecop"
|
32
|
+
spec.add_development_dependency "activesupport"
|
33
33
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slappy
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- yuemori
|
8
8
|
autorequire:
|
9
|
-
bindir:
|
9
|
+
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-08 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: slack-api
|
@@ -137,7 +137,7 @@ dependencies:
|
|
137
137
|
- !ruby/object:Gem::Version
|
138
138
|
version: '0'
|
139
139
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
140
|
+
name: codeclimate-test-reporter
|
141
141
|
requirement: !ruby/object:Gem::Requirement
|
142
142
|
requirements:
|
143
143
|
- - ">="
|
@@ -151,7 +151,21 @@ dependencies:
|
|
151
151
|
- !ruby/object:Gem::Version
|
152
152
|
version: '0'
|
153
153
|
- !ruby/object:Gem::Dependency
|
154
|
-
name:
|
154
|
+
name: timecop
|
155
|
+
requirement: !ruby/object:Gem::Requirement
|
156
|
+
requirements:
|
157
|
+
- - ">="
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
type: :development
|
161
|
+
prerelease: false
|
162
|
+
version_requirements: !ruby/object:Gem::Requirement
|
163
|
+
requirements:
|
164
|
+
- - ">="
|
165
|
+
- !ruby/object:Gem::Version
|
166
|
+
version: '0'
|
167
|
+
- !ruby/object:Gem::Dependency
|
168
|
+
name: activesupport
|
155
169
|
requirement: !ruby/object:Gem::Requirement
|
156
170
|
requirements:
|
157
171
|
- - ">="
|
@@ -164,7 +178,7 @@ dependencies:
|
|
164
178
|
- - ">="
|
165
179
|
- !ruby/object:Gem::Version
|
166
180
|
version: '0'
|
167
|
-
description: Simple Slack Bot Framework. Use Slack RealTime API
|
181
|
+
description: Simple Slack Bot Framework. Use Slack RealTime API and Web API.
|
168
182
|
email:
|
169
183
|
- yuemori@aiming-inc.com
|
170
184
|
executables: []
|
@@ -183,11 +197,10 @@ files:
|
|
183
197
|
- LICENSE.txt
|
184
198
|
- README.md
|
185
199
|
- Rakefile
|
186
|
-
- bin/console
|
187
|
-
- bin/setup
|
188
200
|
- lib/slappy.rb
|
189
201
|
- lib/slappy/client.rb
|
190
202
|
- lib/slappy/configuration.rb
|
203
|
+
- lib/slappy/dsl.rb
|
191
204
|
- lib/slappy/event.rb
|
192
205
|
- lib/slappy/listener.rb
|
193
206
|
- lib/slappy/version.rb
|
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require 'bundler/setup'
|
4
|
-
require 'slappy'
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require 'irb'
|
14
|
-
IRB.start
|