slackened 0.0.3 → 0.0.5
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
- checksums.yaml.gz.sig +0 -0
- data/lib/slackened/block_kit/blocks.rb +4 -3
- data/lib/slackened/block_kit/builder.rb +5 -1
- data/lib/slackened/error.rb +13 -0
- data/lib/slackened/methods.rb +1104 -0
- data/lib/slackened/response.rb +30 -0
- data/lib/slackened/surface/message.rb +19 -2
- data/lib/slackened/surface/modal.rb +93 -0
- data/lib/slackened.rb +2 -0
- data.tar.gz.sig +0 -0
- metadata +8 -4
- metadata.gz.sig +0 -0
@@ -0,0 +1,30 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Slackened
|
4
|
+
# Post the message
|
5
|
+
class Response
|
6
|
+
attr_reader :url, :body, :msg, :code, :payload
|
7
|
+
|
8
|
+
def initialize(response:, blocks:)
|
9
|
+
@url = response.uri.to_s
|
10
|
+
@body = response.body
|
11
|
+
@msg = response.msg
|
12
|
+
@code = response.code
|
13
|
+
@payload = blocks
|
14
|
+
end
|
15
|
+
|
16
|
+
def ok?
|
17
|
+
@code == "200"
|
18
|
+
end
|
19
|
+
|
20
|
+
def to_h
|
21
|
+
{
|
22
|
+
url:,
|
23
|
+
body:,
|
24
|
+
msg:,
|
25
|
+
code:,
|
26
|
+
payload:
|
27
|
+
}
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'forwardable'
|
4
|
+
require_relative '../error'
|
4
5
|
|
5
6
|
module Slackened
|
6
7
|
module Surface
|
@@ -26,10 +27,26 @@ module Slackened
|
|
26
27
|
def post(url: Slackened.configuration.webhook_url, **kwargs)
|
27
28
|
layout(**kwargs)
|
28
29
|
|
29
|
-
|
30
|
-
|
30
|
+
blocks = payload.dup
|
31
|
+
|
32
|
+
response = Slackened::HTTP.post(
|
33
|
+
blocks:,
|
31
34
|
url:
|
32
35
|
)
|
36
|
+
|
37
|
+
# clear the blocks after each post
|
38
|
+
@builder.setup!
|
39
|
+
|
40
|
+
Slackened::Response.new(response:, blocks:)
|
41
|
+
end
|
42
|
+
|
43
|
+
def post!(url: Slackened.configuration.webhook_url, **kwargs)
|
44
|
+
response = post(url:, **kwargs)
|
45
|
+
|
46
|
+
# https://api.slack.com/messaging/webhooks#handling_errors
|
47
|
+
raise Slackened::Error, response unless response.ok?
|
48
|
+
|
49
|
+
response
|
33
50
|
end
|
34
51
|
|
35
52
|
def layout
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
4
|
+
|
5
|
+
module Slackened
|
6
|
+
module Surface
|
7
|
+
# Proof of concept
|
8
|
+
# https://api.slack.com/surfaces/messages
|
9
|
+
class Modal
|
10
|
+
extend Forwardable
|
11
|
+
extend Slackened::BlockKit::Blocks
|
12
|
+
|
13
|
+
DEFAULT_CHANNEL_ID = 'C078BU3GQAX'
|
14
|
+
|
15
|
+
# alphabetical
|
16
|
+
def_delegators self, :build, :builder, :layout, :open
|
17
|
+
|
18
|
+
class << self
|
19
|
+
# alphabetical
|
20
|
+
def builder
|
21
|
+
@builder ||= Slackened::BlockKit::Builder.new
|
22
|
+
end
|
23
|
+
|
24
|
+
def build
|
25
|
+
yield builder
|
26
|
+
end
|
27
|
+
|
28
|
+
def open(trigger_id: nil, interactivity_pointer: nil, **kwargs)
|
29
|
+
raise 'trigger_id OR interactivity_pointer' if trigger_id.nil? && interactivity_pointer.nil?
|
30
|
+
raise 'both trigger_id AND interactivity_pointer cannot be set' if !trigger_id.nil? && !interactivity_pointer.nil?
|
31
|
+
|
32
|
+
# layout(**kwargs)
|
33
|
+
path = Slackened::Methods.path('views.open')
|
34
|
+
url = API_BASE_URL + path
|
35
|
+
token = Slackened.configuration.bot_user_oauth_token
|
36
|
+
headers = {
|
37
|
+
'Authorization' => "Bearer #{token}"
|
38
|
+
}
|
39
|
+
|
40
|
+
payload = {
|
41
|
+
view: {
|
42
|
+
type: :modal,
|
43
|
+
title: {
|
44
|
+
type: :plain_text,
|
45
|
+
text: 'Bananas!'
|
46
|
+
},
|
47
|
+
close: {
|
48
|
+
type: :plain_text,
|
49
|
+
text: 'Cancel it'
|
50
|
+
},
|
51
|
+
submit: {
|
52
|
+
type: :plain_text,
|
53
|
+
text: "Let's go!"
|
54
|
+
},
|
55
|
+
private_metadata: 'Hehe secrets',
|
56
|
+
callback_id: 'testing-id-1',
|
57
|
+
blocks: [
|
58
|
+
{
|
59
|
+
"type": "input",
|
60
|
+
"element": {
|
61
|
+
"type": "plain_text_input",
|
62
|
+
"action_id": "plain_text_input-action"
|
63
|
+
},
|
64
|
+
"label": {
|
65
|
+
"type": "plain_text",
|
66
|
+
"text": "Label",
|
67
|
+
"emoji": true
|
68
|
+
}
|
69
|
+
}
|
70
|
+
]
|
71
|
+
}
|
72
|
+
}
|
73
|
+
|
74
|
+
payload[:trigger_id] = trigger_id unless trigger_id.nil?
|
75
|
+
payload[:interactivity_pointer] = interactivity_pointer unless interactivity_pointer.nil?
|
76
|
+
|
77
|
+
Slackened::HTTP.post(payload:, headers:, url:)
|
78
|
+
end
|
79
|
+
|
80
|
+
def layout
|
81
|
+
raise NotImplementedError, 'You must define `self.layout` and build a layout'
|
82
|
+
end
|
83
|
+
|
84
|
+
private
|
85
|
+
|
86
|
+
def blocks
|
87
|
+
builder.blocks.map(&:to_h)
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
data/lib/slackened.rb
CHANGED
@@ -16,9 +16,11 @@ module Slackened
|
|
16
16
|
require_relative 'slackened/block_kit/blocks/text'
|
17
17
|
require_relative 'slackened/block_kit/builder'
|
18
18
|
require_relative 'slackened/configuration'
|
19
|
+
require_relative 'slackened/error'
|
19
20
|
require_relative 'slackened/http'
|
20
21
|
require_relative 'slackened/logger'
|
21
22
|
require_relative 'slackened/surface/message'
|
23
|
+
require_relative 'slackened/response'
|
22
24
|
|
23
25
|
extend Slackened::Logger
|
24
26
|
|
data.tar.gz.sig
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slackened
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Matyus
|
@@ -35,7 +35,7 @@ cert_chain:
|
|
35
35
|
kSxIyBhjGtfFTmutQUKLBZmOzNf1g4sxY0BylDvd+Ce270mbViFvmpwkpiKpPqQQ
|
36
36
|
2UTSf+Edp6/W5RDQoUAObJKcsvzDv5tp
|
37
37
|
-----END CERTIFICATE-----
|
38
|
-
date: 2024-
|
38
|
+
date: 2024-09-16 00:00:00.000000000 Z
|
39
39
|
dependencies: []
|
40
40
|
description: A lightweight interface interacting with your Slack app via the web APIs
|
41
41
|
email: michael@maty.us
|
@@ -58,9 +58,13 @@ files:
|
|
58
58
|
- lib/slackened/block_kit/blocks/text.rb
|
59
59
|
- lib/slackened/block_kit/builder.rb
|
60
60
|
- lib/slackened/configuration.rb
|
61
|
+
- lib/slackened/error.rb
|
61
62
|
- lib/slackened/http.rb
|
62
63
|
- lib/slackened/logger.rb
|
64
|
+
- lib/slackened/methods.rb
|
65
|
+
- lib/slackened/response.rb
|
63
66
|
- lib/slackened/surface/message.rb
|
67
|
+
- lib/slackened/surface/modal.rb
|
64
68
|
homepage: https://github.com/matyus/slackened
|
65
69
|
licenses:
|
66
70
|
- MIT
|
@@ -76,7 +80,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
76
80
|
requirements:
|
77
81
|
- - ">="
|
78
82
|
- !ruby/object:Gem::Version
|
79
|
-
version: 3.
|
83
|
+
version: 3.0.0
|
80
84
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
81
85
|
requirements:
|
82
86
|
- - ">="
|
@@ -85,7 +89,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
85
89
|
requirements:
|
86
90
|
- '"Activate incoming webhooks" in your Slack App settings and store the URL secretly/securely/safely
|
87
91
|
outside of your codebase'
|
88
|
-
rubygems_version: 3.
|
92
|
+
rubygems_version: 3.5.3
|
89
93
|
signing_key:
|
90
94
|
specification_version: 4
|
91
95
|
summary: Interact with your Slack apps
|
metadata.gz.sig
CHANGED
Binary file
|