edi 0.2.3 → 0.3.0

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.
Files changed (50) hide show
  1. checksums.yaml +4 -4
  2. data/edi.gemspec +1 -2
  3. data/lib/edi.rb +12 -2
  4. data/lib/edi/application.rb +4 -11
  5. data/lib/edi/core.rb +7 -0
  6. data/lib/edi/service_runner.rb +28 -0
  7. data/lib/edi/services/img_flip.rb +1 -1
  8. data/lib/edi/services/tweet_that.rb +1 -1
  9. data/lib/edi/slack.rb +2 -0
  10. data/lib/edi/slack/websocket_incoming_message.rb +32 -0
  11. data/lib/edi/slack/websocket_outgoing_message.rb +21 -0
  12. data/lib/edi/version.rb +1 -1
  13. data/lib/edi/websocket.rb +1 -0
  14. data/lib/edi/websocket/client.rb +47 -0
  15. data/spec/services/img_flip_spec.rb +14 -14
  16. data/spec/services/tweet_that_spec.rb +1 -1
  17. data/spec/spec_helper.rb +2 -2
  18. metadata +15 -86
  19. data/features/fact_service.feature +0 -7
  20. data/features/giphy_service.feature +0 -43
  21. data/features/i_heart_quotes_service.feature +0 -21
  22. data/features/img_flip_service.feature +0 -11
  23. data/features/step_definitions/fact_service_steps.rb +0 -7
  24. data/features/step_definitions/giphy_steps.rb +0 -3
  25. data/features/step_definitions/img_flip_steps.rb +0 -3
  26. data/features/step_definitions/server_steps.rb +0 -3
  27. data/features/step_definitions/tweet_that_steps.rb +0 -19
  28. data/features/step_definitions/weather_steps.rb +0 -3
  29. data/features/support/env.rb +0 -37
  30. data/features/support/hooks.rb +0 -1
  31. data/features/support/vcr_cassettes/Fact_Service/EDI_responds_with_a_random_fact.yml +0 -53
  32. data/features/support/vcr_cassettes/Fact_Service/Jarvis_responds_with_a_random_fact.yml +0 -52
  33. data/features/support/vcr_cassettes/Giphy_Service/Bacon.yml +0 -58
  34. data/features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Cat_Wording.yml +0 -58
  35. data/features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Kitty_Wording.yml +0 -58
  36. data/features/support/vcr_cassettes/Giphy_Service/Cat_GIF_-_Kitty_Wording_-_Case_Insensitive.yml +0 -58
  37. data/features/support/vcr_cassettes/Giphy_Service/Plain_old_GIF.yml +0 -58
  38. data/features/support/vcr_cassettes/Giphy_Service/Sloth.yml +0 -58
  39. data/features/support/vcr_cassettes/Giphy_Service/Trippy.yml +0 -58
  40. data/features/support/vcr_cassettes/I_Heart_Quotes/A_Random_Quote.yml +0 -44
  41. data/features/support/vcr_cassettes/I_Heart_Quotes/A_Simpsons_Quote.yml +0 -44
  42. data/features/support/vcr_cassettes/I_Heart_Quotes/A_Star_Wars_Quote.yml +0 -44
  43. data/features/support/vcr_cassettes/ImgFlip/Success_Kid.yml +0 -54
  44. data/features/support/vcr_cassettes/Tweet_that/Post_the_last_message_to_twitter.yml +0 -211
  45. data/features/support/vcr_cassettes/Weather_Service/Use_a_specified_location.yml +0 -86
  46. data/features/support/vcr_cassettes/Weather_Service/Use_default_location.yml +0 -86
  47. data/features/tweet_that_service.feature +0 -14
  48. data/features/weather_service.feature +0 -21
  49. data/lib/edi/server.rb +0 -45
  50. data/spec/edi/server_spec.rb +0 -20
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: ecd3dd31e032bf701c0ebb2286f741cfb7564543
4
- data.tar.gz: 23fa94814aa472f717dee1a7c70212a08cb3de97
3
+ metadata.gz: 77cd1ecd1dfe2276c05383418944154c354e38c5
4
+ data.tar.gz: f6ce67c78c00bfb147301ac1a517827aa36753e9
5
5
  SHA512:
6
- metadata.gz: 18ce005e3db14d775ee4f70b7132b4e9d0e4116a2211a4731d8aee275f3022a1d89c78c1cf2fdb20716182033e7b2a8364909c9465d1341f9674ec53d08a41f9
7
- data.tar.gz: 0c30fab5038c3311267f052e237f4f15ef8195fec12698ec692d685c0767792b60a894327e167f3da866de5f4bb50ee282bf74af913c05e703ef7dd2e1ae5991
6
+ metadata.gz: 7c4992e4f5a69eb983c8d6bf2fdf010b875380868aceb7b67806866782f4a4b0eae58b86c3b12f0f01d5e13b1e928e0b6af3eb07b4dcc6c9d464f2e4bd82f98e
7
+ data.tar.gz: a297db943b8d07203a9310d4894923db6d5ac6af38a5dd338dd82e39993bbf0ba08274aff9111640089453877e125902963de4563cdf1a2684c5df20c6e4b373
@@ -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/server'
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
@@ -7,15 +7,7 @@ module EDI
7
7
  autoload_paths
8
8
  require File.join EDI.root, "bot/server"
9
9
  require_initializers
10
- initialize_hostname_and_port
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.start_keepalive
36
- EDI.keepalive if EDI.config.attempt_keepalive
27
+ def self.connect_websocket
28
+ EDI.websocket.connect
37
29
  end
30
+
38
31
  end
39
32
  end
@@ -0,0 +1,7 @@
1
+ module EDI
2
+ class Core
3
+ def self.register_services(*args)
4
+ EDI.register_services *args
5
+ end
6
+ end
7
+ end
@@ -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
@@ -11,7 +11,7 @@ class ImgFlip < EDI::Service
11
11
  attr_accessor :meme_link
12
12
 
13
13
  def run
14
- "Here you go, #{user_name}\n\n#{meme_link}"
14
+ "#{meme_link}"
15
15
  end
16
16
 
17
17
  private
@@ -16,7 +16,7 @@ class TweetThat < EDI::Service
16
16
 
17
17
  def run
18
18
  self.tweet = post_tweet
19
- "Here you are, #{user_name}, #{link}"
19
+ "#{link}"
20
20
  end
21
21
 
22
22
  private
@@ -1 +1,3 @@
1
1
  require 'edi/slack/message'
2
+ require 'edi/slack/websocket_incoming_message'
3
+ require 'edi/slack/websocket_outgoing_message'
@@ -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
@@ -1,3 +1,3 @@
1
1
  module EDI
2
- VERSION = "0.2.3"
2
+ VERSION = "0.3.0"
3
3
  end
@@ -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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you go, DVG\n\n#{meme_link}" }
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 "Here you are, DVG, https://twitter.com/twitter_handle/status/569329768350380032" }
16
+ it { expect(subject.invoke).to eq "https://twitter.com/twitter_handle/status/569329768350380032" }
17
17
  end
18
18
  end
@@ -13,7 +13,7 @@ include Rack::Test::Methods
13
13
  include EDI::TestSupport
14
14
 
15
15
  def app
16
- EDI::Server
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::Server
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.2.3
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-18 00:00:00.000000000 Z
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: sinatra
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: httparty
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: thor
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: activesupport
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: hooks
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: twitter
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: rufus-scheduler
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