slackened 0.0.2 → 0.0.4

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
@@ -9,15 +9,18 @@ module Slackened
9
9
  require_relative 'slackened/block_kit/blocks/actions'
10
10
  require_relative 'slackened/block_kit/blocks/button'
11
11
  require_relative 'slackened/block_kit/blocks/context'
12
+ require_relative 'slackened/block_kit/blocks/custom'
12
13
  require_relative 'slackened/block_kit/blocks/divider'
13
14
  require_relative 'slackened/block_kit/blocks/header'
14
15
  require_relative 'slackened/block_kit/blocks/section'
15
16
  require_relative 'slackened/block_kit/blocks/text'
16
17
  require_relative 'slackened/block_kit/builder'
17
18
  require_relative 'slackened/configuration'
19
+ require_relative 'slackened/error'
18
20
  require_relative 'slackened/http'
19
21
  require_relative 'slackened/logger'
20
22
  require_relative 'slackened/surface/message'
23
+ require_relative 'slackened/response'
21
24
 
22
25
  extend Slackened::Logger
23
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.2
4
+ version: 0.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Michael Matyus
@@ -35,9 +35,9 @@ cert_chain:
35
35
  kSxIyBhjGtfFTmutQUKLBZmOzNf1g4sxY0BylDvd+Ce270mbViFvmpwkpiKpPqQQ
36
36
  2UTSf+Edp6/W5RDQoUAObJKcsvzDv5tp
37
37
  -----END CERTIFICATE-----
38
- date: 2024-07-01 00:00:00.000000000 Z
38
+ date: 2024-09-15 00:00:00.000000000 Z
39
39
  dependencies: []
40
- description: A lightweight interface interacting with the Slack APIs
40
+ description: A lightweight interface interacting with your Slack app via the web APIs
41
41
  email: michael@maty.us
42
42
  executables: []
43
43
  extensions: []
@@ -51,22 +51,28 @@ files:
51
51
  - lib/slackened/block_kit/blocks/base.rb
52
52
  - lib/slackened/block_kit/blocks/button.rb
53
53
  - lib/slackened/block_kit/blocks/context.rb
54
+ - lib/slackened/block_kit/blocks/custom.rb
54
55
  - lib/slackened/block_kit/blocks/divider.rb
55
56
  - lib/slackened/block_kit/blocks/header.rb
56
57
  - lib/slackened/block_kit/blocks/section.rb
57
58
  - lib/slackened/block_kit/blocks/text.rb
58
59
  - lib/slackened/block_kit/builder.rb
59
60
  - lib/slackened/configuration.rb
61
+ - lib/slackened/error.rb
60
62
  - lib/slackened/http.rb
61
63
  - lib/slackened/logger.rb
64
+ - lib/slackened/methods.rb
65
+ - lib/slackened/response.rb
62
66
  - lib/slackened/surface/message.rb
67
+ - lib/slackened/surface/modal.rb
63
68
  homepage: https://github.com/matyus/slackened
64
69
  licenses:
65
70
  - MIT
66
71
  metadata:
67
72
  rubygems_mfa_requirea: 'true'
68
73
  source_code_uri: https://github.com/matyus/slackened
69
- post_install_message: 'Slack stands for: Searchable Log of All Communication and Knowledge'
74
+ post_install_message: 'Did you know that Slack stands for: Searchable Log of All Communication
75
+ and Knowledge?'
70
76
  rdoc_options: []
71
77
  require_paths:
72
78
  - lib
@@ -81,11 +87,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
81
87
  - !ruby/object:Gem::Version
82
88
  version: '0'
83
89
  requirements:
84
- - '"Activate incoming webhooks" in your Slack App settings'
85
- - A valid webhook endpoint URL provided by Slack
86
- - Store the entire URL in an ENV variable outside your application
90
+ - '"Activate incoming webhooks" in your Slack App settings and store the URL secretly/securely/safely
91
+ outside of your codebase'
87
92
  rubygems_version: 3.4.10
88
93
  signing_key:
89
94
  specification_version: 4
90
- summary: Interact with Slack
95
+ summary: Interact with your Slack apps
91
96
  test_files: []
metadata.gz.sig CHANGED
Binary file