lita-stackstorm 0.6.1 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 1e55ba41ce91a7366f9853cd4afc340d772b05e9
4
- data.tar.gz: 30de13e52a0d55361ccf4780459f88a90e50ecd1
3
+ metadata.gz: cca8b595c894056c55c31311dd70fcade96d74a2
4
+ data.tar.gz: 0fc7ae2ecb90d9a426bc8e7ee172e58e0e50dd50
5
5
  SHA512:
6
- metadata.gz: 8d14346de18b4bf8fcc01d513a0fedece075e3024cafef303558533cc4dbb44cb0cf846411a07d62103db8c7cfbafaf5175ab3028fad102ba6f13e35acc811db
7
- data.tar.gz: f32989ccab3f6a0edd4b1114e56759a051ec17d76513584cfe68226a09babfd48cd42e758bceb9e6f29bb30e9e0f553f087c1c491c2780c93a4b6b34f861f860
6
+ metadata.gz: 4860b50d9e6e49e5f289435d617e785b4b4177daa0aecee802ffdc590ac34c23e46cee990e9be796c8da0ee4285237aa553a4c58aa209c02e9df3b33fb3c28df
7
+ data.tar.gz: b38f7810111173a9d966c9783891836809eaa8434da4a3723a74e7ba9036b1c4594baa8c82ec140d110dd5d7d518f7a40469c369e4e9a5704f47220d8a8675bd
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # lita-stackstorm [![Gem Version](https://badge.fury.io/rb/lita-stackstorm.svg)](http://badge.fury.io/rb/lita-stackstorm) **BETA**
1
+ # lita-stackstorm [![Gem Version](https://badge.fury.io/rb/lita-stackstorm.svg)](http://badge.fury.io/rb/lita-stackstorm)
2
2
 
3
3
  **lita-stackstorm** is an handler for [Lita](https://www.lita.io) that allows your bot to interact with your stackstorm installation via st2api.
4
4
 
@@ -22,6 +22,7 @@ gem "lita-stackstorm"
22
22
 
23
23
  * `auth_port` (Integer) – Port used for Authentication. Defaults to `9101`.
24
24
  * `execution_port` (Integer) – Port for executions. Defaults to `9100`.
25
+ * `emoji_icon` (Integer) – Emoji used when bot injests event stream. Defaults to `:panda:`.
25
26
 
26
27
  ### Example
27
28
 
@@ -1,4 +1,6 @@
1
1
  require 'json'
2
+ require 'net/http'
3
+ require 'yaml'
2
4
 
3
5
  class Array
4
6
  def swap!(a,b)
@@ -19,6 +21,9 @@ module Lita
19
21
  config :password, required: true
20
22
  config :auth_port, required: false, default: 9100
21
23
  config :execution_port, required: false, default: 9101
24
+ config :emoji_icon, required: false, default: ":panda:"
25
+
26
+ on :connected, :stream_listen
22
27
 
23
28
  class << self
24
29
  attr_accessor :token, :expires
@@ -34,6 +39,55 @@ module Lita
34
39
 
35
40
  route /^!(.*)$/, :call_alias, command: false, help: {}
36
41
 
42
+ def direct_post(channel, message, user)
43
+ case robot.config.robot.adapter
44
+ when :slack
45
+ payload = {
46
+ action: "slack.chat.postMessage",
47
+ parameters: {
48
+ username: user,
49
+ text: message,
50
+ icon_emoji: config.emoji_icon,
51
+ channel: channel
52
+ }
53
+ }
54
+ make_post_request("/executions", payload)
55
+ else
56
+ target = Lita::Source.new(user: user, room: Lita::Room.fuzzy_find(channel))
57
+ robot.send_message(target, message)
58
+ end
59
+ end
60
+
61
+ def stream_listen(payload)
62
+ if expired
63
+ authenticate
64
+ end
65
+ uri = URI("#{url_builder()}/stream")
66
+ Thread.new {
67
+ Net::HTTP.start(uri.host, uri.port, :use_ssl => uri.scheme == 'https') do |http|
68
+ request = Net::HTTP::Get.new uri
69
+ request['X-Auth-Token'] = headers()['X-Auth-Token']
70
+ request['Content-Type'] = 'application/x-yaml'
71
+ http.request request do |response|
72
+ io = StringIO.new
73
+ response.read_body do |chunk|
74
+ c = chunk.strip
75
+ if c.length > 0
76
+ io.write chunk
77
+ event = YAML.load(io.string)
78
+ if event['event'] =~ /st2\.announcement/
79
+ direct_post(event['data']['payload']['channel'],
80
+ event['data']['payload']['message'],
81
+ event['data']['payload']['user'])
82
+ end
83
+ io.reopen("")
84
+ end
85
+ end
86
+ end
87
+ end
88
+ }
89
+ end
90
+
37
91
  def auth_builder
38
92
  if Integer(config.auth_port) == 443 and config.url.start_with?('https')
39
93
  "#{config.url}/auth"
@@ -108,7 +162,6 @@ module Lita
108
162
  command['formats'].each do |format|
109
163
  f = format.gsub(/(\s*){{\s*\S+\s*=\s*(?:({.+?}|.+?))\s*}}(\s*)/, '\\s*([\\S]+)?\\s*')
110
164
  f = f.gsub(/\s*{{.+?}}\s*/, '\\s*([\\S]+?)\\s*')
111
- puts f
112
165
  f = "^\\s*#{f}#{extra_params}\\s*$"
113
166
  redis.set(f, {format: format, object: command}.to_json)
114
167
  a+= "#{format} -> #{command['description']}\n"
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |spec|
2
2
  spec.name = "lita-stackstorm"
3
- spec.version = "0.6.1"
3
+ spec.version = "1.0.0"
4
4
  spec.authors = ["Jurnell Cockhren"]
5
5
  spec.email = ["jurnell@sophicware.com"]
6
6
  spec.description = "Stackstorm handler for lita 4+"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lita-stackstorm
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.1
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jurnell Cockhren
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-12 00:00:00.000000000 Z
11
+ date: 2016-03-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: lita