edi 0.2.3 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/edi.gemspec +1 -2
- data/lib/edi.rb +12 -2
- data/lib/edi/application.rb +4 -11
- data/lib/edi/core.rb +7 -0
- data/lib/edi/service_runner.rb +28 -0
- data/lib/edi/services/img_flip.rb +1 -1
- data/lib/edi/services/tweet_that.rb +1 -1
- data/lib/edi/slack.rb +2 -0
- data/lib/edi/slack/websocket_incoming_message.rb +32 -0
- data/lib/edi/slack/websocket_outgoing_message.rb +21 -0
- data/lib/edi/version.rb +1 -1
- data/lib/edi/websocket.rb +1 -0
- data/lib/edi/websocket/client.rb +47 -0
- data/spec/services/img_flip_spec.rb +14 -14
- data/spec/services/tweet_that_spec.rb +1 -1
- data/spec/spec_helper.rb +2 -2
- metadata +15 -86
- data/features/fact_service.feature +0 -7
- data/features/giphy_service.feature +0 -43
- data/features/i_heart_quotes_service.feature +0 -21
- data/features/img_flip_service.feature +0 -11
- data/features/step_definitions/fact_service_steps.rb +0 -7
- data/features/step_definitions/giphy_steps.rb +0 -3
- data/features/step_definitions/img_flip_steps.rb +0 -3
- data/features/step_definitions/server_steps.rb +0 -3
- data/features/step_definitions/tweet_that_steps.rb +0 -19
- data/features/step_definitions/weather_steps.rb +0 -3
- data/features/support/env.rb +0 -37
- data/features/support/hooks.rb +0 -1
- data/features/support/vcr_cassettes/Fact_Service/EDI_responds_with_a_random_fact.yml +0 -53
- data/features/support/vcr_cassettes/Fact_Service/Jarvis_responds_with_a_random_fact.yml +0 -52
- data/features/support/vcr_cassettes/Giphy_Service/Bacon.yml +0 -58
- data/features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Cat_Wording.yml +0 -58
- data/features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Kitty_Wording.yml +0 -58
- data/features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Kitty_Wording_-_Case_Insensitive.yml +0 -58
- data/features/support/vcr_cassettes/Giphy_Service/Plain_old_GIF.yml +0 -58
- data/features/support/vcr_cassettes/Giphy_Service/Sloth.yml +0 -58
- data/features/support/vcr_cassettes/Giphy_Service/Trippy.yml +0 -58
- data/features/support/vcr_cassettes/I_Heart_Quotes/A_Random_Quote.yml +0 -44
- data/features/support/vcr_cassettes/I_Heart_Quotes/A_Simpsons_Quote.yml +0 -44
- data/features/support/vcr_cassettes/I_Heart_Quotes/A_Star_Wars_Quote.yml +0 -44
- data/features/support/vcr_cassettes/ImgFlip/Success_Kid.yml +0 -54
- data/features/support/vcr_cassettes/Tweet_that/Post_the_last_message_to_twitter.yml +0 -211
- data/features/support/vcr_cassettes/Weather_Service/Use_a_specified_location.yml +0 -86
- data/features/support/vcr_cassettes/Weather_Service/Use_default_location.yml +0 -86
- data/features/tweet_that_service.feature +0 -14
- data/features/weather_service.feature +0 -21
- data/lib/edi/server.rb +0 -45
- data/spec/edi/server_spec.rb +0 -20
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 77cd1ecd1dfe2276c05383418944154c354e38c5
|
4
|
+
data.tar.gz: f6ce67c78c00bfb147301ac1a517827aa36753e9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7c4992e4f5a69eb983c8d6bf2fdf010b875380868aceb7b67806866782f4a4b0eae58b86c3b12f0f01d5e13b1e928e0b6af3eb07b4dcc6c9d464f2e4bd82f98e
|
7
|
+
data.tar.gz: a297db943b8d07203a9310d4894923db6d5ac6af38a5dd338dd82e39993bbf0ba08274aff9111640089453877e125902963de4563cdf1a2684c5df20c6e4b373
|
data/edi.gemspec
CHANGED
@@ -29,12 +29,11 @@ Gem::Specification.new do |spec|
|
|
29
29
|
spec.add_development_dependency "guard-rspec"
|
30
30
|
spec.add_development_dependency "guard-cucumber"
|
31
31
|
spec.add_development_dependency "terminal-notifier-guard"
|
32
|
-
spec.add_dependency "sinatra"
|
33
|
-
spec.add_dependency "sinatra-contrib"
|
34
32
|
spec.add_dependency "httparty"
|
35
33
|
spec.add_dependency "thor"
|
36
34
|
spec.add_dependency "activesupport"
|
37
35
|
spec.add_dependency "hooks"
|
38
36
|
spec.add_dependency "twitter"
|
39
37
|
spec.add_dependency "rufus-scheduler"
|
38
|
+
spec.add_dependency "faye-websocket"
|
40
39
|
end
|
data/lib/edi.rb
CHANGED
@@ -2,7 +2,7 @@ require 'active_support'
|
|
2
2
|
require 'active_support/string_inquirer'
|
3
3
|
require 'edi/core_ext'
|
4
4
|
require "edi/version"
|
5
|
-
require 'edi/
|
5
|
+
require 'edi/core'
|
6
6
|
require 'edi/dsl'
|
7
7
|
require 'edi/postable'
|
8
8
|
require 'edi/environment'
|
@@ -11,6 +11,7 @@ require 'edi/exceptions'
|
|
11
11
|
require 'edi/interpreter'
|
12
12
|
require 'edi/refinements'
|
13
13
|
require 'edi/services'
|
14
|
+
require 'edi/service_runner'
|
14
15
|
require 'edi/slack'
|
15
16
|
require 'edi/api/response'
|
16
17
|
require 'edi/configuration'
|
@@ -19,9 +20,10 @@ require 'edi/application'
|
|
19
20
|
require 'edi/utilities/array_responder'
|
20
21
|
require 'edi/schedule'
|
21
22
|
require 'edi/job'
|
23
|
+
require 'edi/websocket'
|
22
24
|
module EDI
|
23
25
|
class << self
|
24
|
-
attr_accessor :services
|
26
|
+
attr_accessor :services, :websocket
|
25
27
|
def services
|
26
28
|
@services ||= []
|
27
29
|
end
|
@@ -52,6 +54,14 @@ module EDI
|
|
52
54
|
self.config.environment = ActiveSupport::StringInquirer.new(environment)
|
53
55
|
end
|
54
56
|
|
57
|
+
def websocket
|
58
|
+
@websocket ||= Websocket::Client.new
|
59
|
+
end
|
60
|
+
|
61
|
+
def runner
|
62
|
+
ServiceRunner
|
63
|
+
end
|
64
|
+
|
55
65
|
end
|
56
66
|
include EDI::HTTPUtilities
|
57
67
|
include EDI::Configuration
|
data/lib/edi/application.rb
CHANGED
@@ -7,15 +7,7 @@ module EDI
|
|
7
7
|
autoload_paths
|
8
8
|
require File.join EDI.root, "bot/server"
|
9
9
|
require_initializers
|
10
|
-
|
11
|
-
start_keepalive
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.initialize_hostname_and_port
|
15
|
-
if EDI.env.development?
|
16
|
-
EDI.config.host = "http://127.0.0.1"
|
17
|
-
EDI.config.port ||= ENV["JARVIS_PORT"]
|
18
|
-
end
|
10
|
+
connect_websocket
|
19
11
|
end
|
20
12
|
|
21
13
|
def self.require_initializers
|
@@ -32,8 +24,9 @@ module EDI
|
|
32
24
|
$: << EDI.root
|
33
25
|
end
|
34
26
|
|
35
|
-
def self.
|
36
|
-
EDI.
|
27
|
+
def self.connect_websocket
|
28
|
+
EDI.websocket.connect
|
37
29
|
end
|
30
|
+
|
38
31
|
end
|
39
32
|
end
|
data/lib/edi/core.rb
ADDED
@@ -0,0 +1,28 @@
|
|
1
|
+
class ServiceRunner
|
2
|
+
|
3
|
+
attr_accessor :message, :service
|
4
|
+
def initialize(message:)
|
5
|
+
@message = message
|
6
|
+
end
|
7
|
+
|
8
|
+
def execute
|
9
|
+
self.service = EDI::Interpreter.new(message).determine_service.new(message)
|
10
|
+
begin
|
11
|
+
_run_service
|
12
|
+
rescue EDI::UnfitEnvironmentException => e
|
13
|
+
EDI::ArrayResponder.new(EDI.config.unfit_environment_response).respond
|
14
|
+
rescue EDI::ThirdPartyAPIFailure
|
15
|
+
EDI::ArrayResponder.new(EDI.config.third_party_api_failure_respone).respond
|
16
|
+
rescue => e
|
17
|
+
EDI::ArrayResponder.new(EDI.config.standard_error_response).respond
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def _run_service
|
24
|
+
service.validate_environment
|
25
|
+
service.invoke
|
26
|
+
end
|
27
|
+
|
28
|
+
end
|
data/lib/edi/slack.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
module Slack
|
2
|
+
class WebsocketIncomingMessage
|
3
|
+
attr_accessor :channel, :user, :text, :type
|
4
|
+
def initialize(params)
|
5
|
+
params = JSON.parse(params)
|
6
|
+
@channel = params["channel"]
|
7
|
+
@user = params["user"]
|
8
|
+
@text = params["text"]
|
9
|
+
@type = params["type"]
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_s
|
13
|
+
"Slack::WebsocketMessage text: #{self.text}"
|
14
|
+
end
|
15
|
+
|
16
|
+
def should_respond?
|
17
|
+
message_type? && mentions_edi?
|
18
|
+
end
|
19
|
+
|
20
|
+
def message_type?
|
21
|
+
type == "message"
|
22
|
+
end
|
23
|
+
|
24
|
+
def mentions_edi?
|
25
|
+
if text
|
26
|
+
text.match /edi/i
|
27
|
+
else
|
28
|
+
false
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
require 'json'
|
2
|
+
module Slack
|
3
|
+
class WebsocketOutgoingMessage
|
4
|
+
attr_accessor :text, :channel, :type, :id
|
5
|
+
def initialize(id: ,text:, channel:)
|
6
|
+
@text = text
|
7
|
+
@channel = channel
|
8
|
+
@type = "message"
|
9
|
+
@id = id
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_json
|
13
|
+
{
|
14
|
+
text: text,
|
15
|
+
channel: channel,
|
16
|
+
type: type,
|
17
|
+
id: id
|
18
|
+
}.to_json
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
data/lib/edi/version.rb
CHANGED
@@ -0,0 +1 @@
|
|
1
|
+
require 'edi/websocket/client'
|
@@ -0,0 +1,47 @@
|
|
1
|
+
require 'faye/websocket'
|
2
|
+
require 'eventmachine'
|
3
|
+
|
4
|
+
module Websocket
|
5
|
+
class Client
|
6
|
+
attr_accessor :ws_url, :client, :id
|
7
|
+
|
8
|
+
def initialize
|
9
|
+
self.id = 1
|
10
|
+
end
|
11
|
+
|
12
|
+
def connect
|
13
|
+
self.ws_url = EDI.get("https://slack.com/api/rtm.start?token=#{ENV["SLACK_TOKEN"]}").response["url"]
|
14
|
+
EM.run {
|
15
|
+
|
16
|
+
self.client = Faye::WebSocket::Client.new(ws_url)
|
17
|
+
|
18
|
+
client.on :open do |event|
|
19
|
+
puts "EDI is now online"
|
20
|
+
end
|
21
|
+
|
22
|
+
# Respond to Messages
|
23
|
+
client.on :message do |event|
|
24
|
+
incoming_message = Slack::WebsocketIncomingMessage.new(event.data).message
|
25
|
+
if incoming_message.should_respond?
|
26
|
+
response_text = ""
|
27
|
+
service = Proc.new { response_text = EDI.runner.new(message: incoming_message).execute }
|
28
|
+
response = Proc.new { client.send Slack::WebsocketOutgoingMessage.new(text: response_text, channel: incoming_message.channel, id: id).to_json }
|
29
|
+
EM.defer service, response
|
30
|
+
increment_id
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Kepp Websocket Connection Alive
|
35
|
+
EM.add_periodic_timer(1) do
|
36
|
+
client.ping
|
37
|
+
end
|
38
|
+
}
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
42
|
+
|
43
|
+
def increment_id
|
44
|
+
self.id += 1
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
@@ -6,84 +6,84 @@ RSpec.describe ImgFlip do
|
|
6
6
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, success kid hello, world")) }
|
7
7
|
subject { described_class.new message }
|
8
8
|
let(:meme_link) { "http://i.imgflip.com/hz9zo.jpg" }
|
9
|
-
it { expect(subject.invoke).to eq "
|
9
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
10
10
|
end
|
11
11
|
describe "Afraid to Ask Andy", vcr: { cassette_name: 'img_flip_afraid_to_ask', :record => :new_episodes} do
|
12
12
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, I'm not sure how to mock third party apis, and at this point, I'm afraid to ask")) }
|
13
13
|
subject { described_class.new message }
|
14
14
|
let(:meme_link) { "http://i.imgflip.com/hza6u.jpg" }
|
15
|
-
it { expect(subject.invoke).to eq "
|
15
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
16
16
|
end
|
17
17
|
describe "And It's Gone", vcr: { cassette_name: 'img_flip_and_its_gone', :record => :new_episodes} do
|
18
18
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, you have some services here, and it's gone")) }
|
19
19
|
subject { described_class.new message }
|
20
20
|
let(:meme_link) { "http://i.imgflip.com/hzqv7.jpg" }
|
21
|
-
it { expect(subject.invoke).to eq "
|
21
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
22
22
|
end
|
23
23
|
describe "Everywhere", vcr: { cassette_name: 'img_flip_everywhere', :record => :new_episodes} do
|
24
24
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, tests, tests everywhere")) }
|
25
25
|
subject { described_class.new message }
|
26
26
|
let(:meme_link) { "http://i.imgflip.com/hzr5m.jpg" }
|
27
|
-
it { expect(subject.invoke).to eq "
|
27
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
28
28
|
end
|
29
29
|
describe "Everywhere", vcr: { cassette_name: 'img_flip_gonna_have_a_bad_time', :record => :new_episodes} do
|
30
30
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, if you mock when you should use a real object, you're gonna have a bad time")) }
|
31
31
|
subject { described_class.new message }
|
32
32
|
let(:meme_link) { "http://i.imgflip.com/hzrd1.jpg" }
|
33
|
-
it { expect(subject.invoke).to eq "
|
33
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
34
34
|
end
|
35
35
|
describe "Most Interesting Man", vcr: { cassette_name: 'img_flip_most_interesting_man', :record => :new_episodes} do
|
36
36
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, I don't always ci my code, but when I do, I do it on Travis")) }
|
37
37
|
subject { described_class.new message }
|
38
38
|
let(:meme_link) { "http://i.imgflip.com/hzrnq.jpg" }
|
39
|
-
it { expect(subject.invoke).to eq "
|
39
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
40
40
|
end
|
41
41
|
describe "Not Sure If", vcr: { cassette_name: 'img_flip_not_sure_if', :record => :new_episodes} do
|
42
42
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, Not sure if this test is going to pass, or if it's gonna break the build")) }
|
43
43
|
subject { described_class.new message }
|
44
44
|
let(:meme_link) { "http://i.imgflip.com/hzrz0.jpg" }
|
45
|
-
it { expect(subject.invoke).to eq "
|
45
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
46
46
|
end
|
47
47
|
describe "One Does Not Simply", vcr: { cassette_name: 'img_flip_one_does_not_simply', :record => :new_episodes} do
|
48
48
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, one does not simply write rspecs")) }
|
49
49
|
subject { described_class.new message }
|
50
50
|
let(:meme_link) { "http://i.imgflip.com/hzs4e.jpg" }
|
51
|
-
it { expect(subject.invoke).to eq "
|
51
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
52
52
|
end
|
53
53
|
describe "Overly Attached Girlfriend", vcr: { cassette_name: 'img_flip_overly_attached_girlfriend', :record => :new_episodes} do
|
54
54
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, overly attached girlfriend I looked at your slack channel, who is this jarvis you keep talking to?")) }
|
55
55
|
subject { described_class.new message }
|
56
56
|
let(:meme_link) { "http://i.imgflip.com/hzsbu.jpg" }
|
57
|
-
it { expect(subject.invoke).to eq "
|
57
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
58
58
|
end
|
59
59
|
describe "Picard", vcr: { cassette_name: 'img_flip_picard', :record => :new_episodes} do
|
60
60
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, picard why the fuck, did you make so many memes?")) }
|
61
61
|
subject { described_class.new message }
|
62
62
|
let(:meme_link) { "http://i.imgflip.com/hzsgd.jpg" }
|
63
|
-
it { expect(subject.invoke).to eq "
|
63
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
64
64
|
end
|
65
65
|
describe "Sudden Clarity", vcr: { cassette_name: 'img_flip_sudden_clarity', :record => :new_episodes} do
|
66
66
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, sudden clarity can't think of, anything clever right now")) }
|
67
67
|
subject { described_class.new message }
|
68
68
|
let(:meme_link) { "http://i.imgflip.com/hzspk.jpg" }
|
69
|
-
it { expect(subject.invoke).to eq "
|
69
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
70
70
|
end
|
71
71
|
describe "What if I Told You", vcr: { cassette_name: 'img_flip_what_if_I_told_you', :record => :new_episodes} do
|
72
72
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI, what if I told you EDI is the best bot ever?")) }
|
73
73
|
subject { described_class.new message }
|
74
74
|
let(:meme_link) { "http://i.imgflip.com/hzsv9.jpg" }
|
75
|
-
it { expect(subject.invoke).to eq "
|
75
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
76
76
|
end
|
77
77
|
describe "Willy Wonka", vcr: { cassette_name: 'img_flip_willy_wonka', :record => :new_episodes} do
|
78
78
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI willy wonka hello, world")) }
|
79
79
|
subject { described_class.new message }
|
80
80
|
let(:meme_link) { "http://i.imgflip.com/hzt18.jpg" }
|
81
|
-
it { expect(subject.invoke).to eq "
|
81
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
82
82
|
end
|
83
83
|
describe "Y U No", vcr: { cassette_name: 'img_flip_y_u_no', :record => :new_episodes} do
|
84
84
|
let(:message) { Slack::Message.new(slack_outgoing_message(user_name: "DVG", text: "EDI y u no sql")) }
|
85
85
|
subject { described_class.new message }
|
86
86
|
let(:meme_link) { "http://i.imgflip.com/hzt5g.jpg" }
|
87
|
-
it { expect(subject.invoke).to eq "
|
87
|
+
it { expect(subject.invoke).to eq "#{meme_link}" }
|
88
88
|
end
|
89
89
|
end
|
@@ -13,6 +13,6 @@ RSpec.describe TweetThat, vcr: { cassette_name: 'tweet_that', :record => :new_ep
|
|
13
13
|
end
|
14
14
|
let(:message) { Slack::Message.new(slack_outgoing_message(text: "EDI, tweet that", channel_id: "C0000001", user_name: "DVG")) }
|
15
15
|
subject { described_class.new message }
|
16
|
-
it { expect(subject.invoke).to eq "
|
16
|
+
it { expect(subject.invoke).to eq "https://twitter.com/twitter_handle/status/569329768350380032" }
|
17
17
|
end
|
18
18
|
end
|
data/spec/spec_helper.rb
CHANGED
@@ -13,7 +13,7 @@ include Rack::Test::Methods
|
|
13
13
|
include EDI::TestSupport
|
14
14
|
|
15
15
|
def app
|
16
|
-
EDI::
|
16
|
+
EDI::Core
|
17
17
|
end
|
18
18
|
|
19
19
|
RSpec.configure do |config|
|
@@ -29,7 +29,7 @@ RSpec.configure do |config|
|
|
29
29
|
|
30
30
|
end
|
31
31
|
end
|
32
|
-
class TestServer < EDI::
|
32
|
+
class TestServer < EDI::Core
|
33
33
|
end
|
34
34
|
|
35
35
|
example.run
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: edi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- DVG
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-03-
|
11
|
+
date: 2015-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -179,21 +179,7 @@ dependencies:
|
|
179
179
|
- !ruby/object:Gem::Version
|
180
180
|
version: '0'
|
181
181
|
- !ruby/object:Gem::Dependency
|
182
|
-
name:
|
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'
|
195
|
-
- !ruby/object:Gem::Dependency
|
196
|
-
name: sinatra-contrib
|
182
|
+
name: httparty
|
197
183
|
requirement: !ruby/object:Gem::Requirement
|
198
184
|
requirements:
|
199
185
|
- - ">="
|
@@ -207,7 +193,7 @@ dependencies:
|
|
207
193
|
- !ruby/object:Gem::Version
|
208
194
|
version: '0'
|
209
195
|
- !ruby/object:Gem::Dependency
|
210
|
-
name:
|
196
|
+
name: thor
|
211
197
|
requirement: !ruby/object:Gem::Requirement
|
212
198
|
requirements:
|
213
199
|
- - ">="
|
@@ -221,7 +207,7 @@ dependencies:
|
|
221
207
|
- !ruby/object:Gem::Version
|
222
208
|
version: '0'
|
223
209
|
- !ruby/object:Gem::Dependency
|
224
|
-
name:
|
210
|
+
name: activesupport
|
225
211
|
requirement: !ruby/object:Gem::Requirement
|
226
212
|
requirements:
|
227
213
|
- - ">="
|
@@ -235,7 +221,7 @@ dependencies:
|
|
235
221
|
- !ruby/object:Gem::Version
|
236
222
|
version: '0'
|
237
223
|
- !ruby/object:Gem::Dependency
|
238
|
-
name:
|
224
|
+
name: hooks
|
239
225
|
requirement: !ruby/object:Gem::Requirement
|
240
226
|
requirements:
|
241
227
|
- - ">="
|
@@ -249,7 +235,7 @@ dependencies:
|
|
249
235
|
- !ruby/object:Gem::Version
|
250
236
|
version: '0'
|
251
237
|
- !ruby/object:Gem::Dependency
|
252
|
-
name:
|
238
|
+
name: twitter
|
253
239
|
requirement: !ruby/object:Gem::Requirement
|
254
240
|
requirements:
|
255
241
|
- - ">="
|
@@ -263,7 +249,7 @@ dependencies:
|
|
263
249
|
- !ruby/object:Gem::Version
|
264
250
|
version: '0'
|
265
251
|
- !ruby/object:Gem::Dependency
|
266
|
-
name:
|
252
|
+
name: rufus-scheduler
|
267
253
|
requirement: !ruby/object:Gem::Requirement
|
268
254
|
requirements:
|
269
255
|
- - ">="
|
@@ -277,7 +263,7 @@ dependencies:
|
|
277
263
|
- !ruby/object:Gem::Version
|
278
264
|
version: '0'
|
279
265
|
- !ruby/object:Gem::Dependency
|
280
|
-
name:
|
266
|
+
name: faye-websocket
|
281
267
|
requirement: !ruby/object:Gem::Requirement
|
282
268
|
requirements:
|
283
269
|
- - ">="
|
@@ -310,41 +296,12 @@ files:
|
|
310
296
|
- Vagrantfile
|
311
297
|
- bin/edi
|
312
298
|
- edi.gemspec
|
313
|
-
- features/fact_service.feature
|
314
|
-
- features/giphy_service.feature
|
315
|
-
- features/i_heart_quotes_service.feature
|
316
|
-
- features/img_flip_service.feature
|
317
|
-
- features/step_definitions/fact_service_steps.rb
|
318
|
-
- features/step_definitions/giphy_steps.rb
|
319
|
-
- features/step_definitions/img_flip_steps.rb
|
320
|
-
- features/step_definitions/server_steps.rb
|
321
|
-
- features/step_definitions/tweet_that_steps.rb
|
322
|
-
- features/step_definitions/weather_steps.rb
|
323
|
-
- features/support/env.rb
|
324
|
-
- features/support/hooks.rb
|
325
|
-
- features/support/vcr_cassettes/Fact_Service/EDI_responds_with_a_random_fact.yml
|
326
|
-
- features/support/vcr_cassettes/Fact_Service/Jarvis_responds_with_a_random_fact.yml
|
327
|
-
- features/support/vcr_cassettes/Giphy_Service/Bacon.yml
|
328
|
-
- features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Cat_Wording.yml
|
329
|
-
- features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Kitty_Wording.yml
|
330
|
-
- features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Kitty_Wording_-_Case_Insensitive.yml
|
331
|
-
- features/support/vcr_cassettes/Giphy_Service/Plain_old_GIF.yml
|
332
|
-
- features/support/vcr_cassettes/Giphy_Service/Sloth.yml
|
333
|
-
- features/support/vcr_cassettes/Giphy_Service/Trippy.yml
|
334
|
-
- features/support/vcr_cassettes/I_Heart_Quotes/A_Random_Quote.yml
|
335
|
-
- features/support/vcr_cassettes/I_Heart_Quotes/A_Simpsons_Quote.yml
|
336
|
-
- features/support/vcr_cassettes/I_Heart_Quotes/A_Star_Wars_Quote.yml
|
337
|
-
- features/support/vcr_cassettes/ImgFlip/Success_Kid.yml
|
338
|
-
- features/support/vcr_cassettes/Tweet_that/Post_the_last_message_to_twitter.yml
|
339
|
-
- features/support/vcr_cassettes/Weather_Service/Use_a_specified_location.yml
|
340
|
-
- features/support/vcr_cassettes/Weather_Service/Use_default_location.yml
|
341
|
-
- features/tweet_that_service.feature
|
342
|
-
- features/weather_service.feature
|
343
299
|
- lib/edi.rb
|
344
300
|
- lib/edi/api/response.rb
|
345
301
|
- lib/edi/application.rb
|
346
302
|
- lib/edi/cli.rb
|
347
303
|
- lib/edi/configuration.rb
|
304
|
+
- lib/edi/core.rb
|
348
305
|
- lib/edi/core_ext.rb
|
349
306
|
- lib/edi/core_ext/symbol.rb
|
350
307
|
- lib/edi/dsl.rb
|
@@ -357,8 +314,8 @@ files:
|
|
357
314
|
- lib/edi/refinements.rb
|
358
315
|
- lib/edi/refinements/zip_refinement.rb
|
359
316
|
- lib/edi/schedule.rb
|
360
|
-
- lib/edi/server.rb
|
361
317
|
- lib/edi/service.rb
|
318
|
+
- lib/edi/service_runner.rb
|
362
319
|
- lib/edi/services.rb
|
363
320
|
- lib/edi/services/dice.rb
|
364
321
|
- lib/edi/services/eightball.rb
|
@@ -386,15 +343,18 @@ files:
|
|
386
343
|
- lib/edi/services/weather.rb
|
387
344
|
- lib/edi/slack.rb
|
388
345
|
- lib/edi/slack/message.rb
|
346
|
+
- lib/edi/slack/websocket_incoming_message.rb
|
347
|
+
- lib/edi/slack/websocket_outgoing_message.rb
|
389
348
|
- lib/edi/test_support/cucumber.rb
|
390
349
|
- lib/edi/test_support/test_support.rb
|
391
350
|
- lib/edi/utilities/array_responder.rb
|
392
351
|
- lib/edi/version.rb
|
352
|
+
- lib/edi/websocket.rb
|
353
|
+
- lib/edi/websocket/client.rb
|
393
354
|
- scripts/bootstrap_edi.sh
|
394
355
|
- spec/edi/edi_spec.rb
|
395
356
|
- spec/edi/interpreter_spec.rb
|
396
357
|
- spec/edi/postable_spec.rb
|
397
|
-
- spec/edi/server_spec.rb
|
398
358
|
- spec/edi/service_spec.rb
|
399
359
|
- spec/services/dice_spec.rb
|
400
360
|
- spec/services/eightball_spec.rb
|
@@ -461,40 +421,9 @@ signing_key:
|
|
461
421
|
specification_version: 4
|
462
422
|
summary: Chatbot Application Framework for Slack Chat Rooms
|
463
423
|
test_files:
|
464
|
-
- features/fact_service.feature
|
465
|
-
- features/giphy_service.feature
|
466
|
-
- features/i_heart_quotes_service.feature
|
467
|
-
- features/img_flip_service.feature
|
468
|
-
- features/step_definitions/fact_service_steps.rb
|
469
|
-
- features/step_definitions/giphy_steps.rb
|
470
|
-
- features/step_definitions/img_flip_steps.rb
|
471
|
-
- features/step_definitions/server_steps.rb
|
472
|
-
- features/step_definitions/tweet_that_steps.rb
|
473
|
-
- features/step_definitions/weather_steps.rb
|
474
|
-
- features/support/env.rb
|
475
|
-
- features/support/hooks.rb
|
476
|
-
- features/support/vcr_cassettes/Fact_Service/EDI_responds_with_a_random_fact.yml
|
477
|
-
- features/support/vcr_cassettes/Fact_Service/Jarvis_responds_with_a_random_fact.yml
|
478
|
-
- features/support/vcr_cassettes/Giphy_Service/Bacon.yml
|
479
|
-
- features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Cat_Wording.yml
|
480
|
-
- features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Kitty_Wording.yml
|
481
|
-
- features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Kitty_Wording_-_Case_Insensitive.yml
|
482
|
-
- features/support/vcr_cassettes/Giphy_Service/Plain_old_GIF.yml
|
483
|
-
- features/support/vcr_cassettes/Giphy_Service/Sloth.yml
|
484
|
-
- features/support/vcr_cassettes/Giphy_Service/Trippy.yml
|
485
|
-
- features/support/vcr_cassettes/I_Heart_Quotes/A_Random_Quote.yml
|
486
|
-
- features/support/vcr_cassettes/I_Heart_Quotes/A_Simpsons_Quote.yml
|
487
|
-
- features/support/vcr_cassettes/I_Heart_Quotes/A_Star_Wars_Quote.yml
|
488
|
-
- features/support/vcr_cassettes/ImgFlip/Success_Kid.yml
|
489
|
-
- features/support/vcr_cassettes/Tweet_that/Post_the_last_message_to_twitter.yml
|
490
|
-
- features/support/vcr_cassettes/Weather_Service/Use_a_specified_location.yml
|
491
|
-
- features/support/vcr_cassettes/Weather_Service/Use_default_location.yml
|
492
|
-
- features/tweet_that_service.feature
|
493
|
-
- features/weather_service.feature
|
494
424
|
- spec/edi/edi_spec.rb
|
495
425
|
- spec/edi/interpreter_spec.rb
|
496
426
|
- spec/edi/postable_spec.rb
|
497
|
-
- spec/edi/server_spec.rb
|
498
427
|
- spec/edi/service_spec.rb
|
499
428
|
- spec/services/dice_spec.rb
|
500
429
|
- spec/services/eightball_spec.rb
|