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.
@@ -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
- Slackened::HTTP.post(
30
- blocks: payload,
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.3
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-07-03 00:00:00.000000000 Z
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.2.2
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.4.10
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