slack-ruby-block-kit 0.8.0 → 0.13.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.
- checksums.yaml +4 -4
- data/.deepsource.toml +15 -0
- data/.github/workflows/ci.yml +33 -0
- data/.gitignore +2 -0
- data/.rubocop.yml +23 -1
- data/.rubocop_todo.yml +10 -0
- data/CHANGELOG.md +93 -0
- data/Gemfile +14 -1
- data/README.md +3 -1
- data/lib/slack/block_kit.rb +46 -2
- data/lib/slack/block_kit/blocks.rb +12 -0
- data/lib/slack/block_kit/composition/confirmation_dialog.rb +16 -0
- data/lib/slack/block_kit/composition/option.rb +6 -1
- data/lib/slack/block_kit/composition/option_group.rb +2 -2
- data/lib/slack/block_kit/element/button.rb +3 -11
- data/lib/slack/block_kit/element/channels_select.rb +3 -11
- data/lib/slack/block_kit/element/checkboxes.rb +53 -0
- data/lib/slack/block_kit/element/conversations_select.rb +3 -11
- data/lib/slack/block_kit/element/date_picker.rb +3 -9
- data/lib/slack/block_kit/element/external_select.rb +3 -12
- data/lib/slack/block_kit/element/multi_channels_select.rb +5 -14
- data/lib/slack/block_kit/element/multi_conversations_select.rb +5 -14
- data/lib/slack/block_kit/element/multi_external_select.rb +5 -14
- data/lib/slack/block_kit/element/multi_static_select.rb +18 -25
- data/lib/slack/block_kit/element/multi_users_select.rb +5 -14
- data/lib/slack/block_kit/element/overflow_menu.rb +4 -11
- data/lib/slack/block_kit/element/radio_buttons.rb +53 -0
- data/lib/slack/block_kit/element/static_select.rb +20 -25
- data/lib/slack/block_kit/element/timepicker.rb +49 -0
- data/lib/slack/block_kit/element/users_select.rb +3 -11
- data/lib/slack/block_kit/layout/header.rb +29 -0
- data/lib/slack/block_kit/layout/image.rb +1 -4
- data/lib/slack/block_kit/layout/input.rb +198 -3
- data/lib/slack/block_kit/layout/section.rb +21 -1
- data/lib/slack/block_kit/version.rb +7 -0
- data/lib/slack/surfaces/home.rb +35 -0
- data/lib/slack/surfaces/message.rb +34 -0
- data/lib/slack/surfaces/modal.rb +76 -0
- data/slack-ruby-block-kit.gemspec +1 -18
- metadata +20 -138
- data/.circleci/config.yml +0 -49
- data/Gemfile.lock +0 -74
@@ -156,8 +156,28 @@ module Slack
|
|
156
156
|
accessorise(element)
|
157
157
|
end
|
158
158
|
|
159
|
+
def checkboxes(action_id:)
|
160
|
+
element = Element::Checkboxes.new(
|
161
|
+
action_id: action_id
|
162
|
+
)
|
163
|
+
|
164
|
+
yield(element) if block_given?
|
165
|
+
|
166
|
+
accessorise(element)
|
167
|
+
end
|
168
|
+
|
169
|
+
def radio_buttons(action_id:)
|
170
|
+
element = Element::RadioButtons.new(
|
171
|
+
action_id: action_id
|
172
|
+
)
|
173
|
+
|
174
|
+
yield(element) if block_given?
|
175
|
+
|
176
|
+
accessorise(element)
|
177
|
+
end
|
178
|
+
|
159
179
|
def image(url:, alt_text:)
|
160
|
-
|
180
|
+
accessorise(Element::Image.new(image_url: url, alt_text: alt_text))
|
161
181
|
end
|
162
182
|
|
163
183
|
def accessorise(element)
|
@@ -0,0 +1,35 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Slack
|
4
|
+
module Surfaces
|
5
|
+
# The Home tab is a persistent, yet dynamic interface
|
6
|
+
# for apps that lives within the App Home.
|
7
|
+
#
|
8
|
+
# https://api.slack.com/surfaces#tabs
|
9
|
+
# https://api.slack.com/reference/surfaces/views
|
10
|
+
class Home
|
11
|
+
TYPE = 'home'
|
12
|
+
|
13
|
+
def initialize(blocks: nil,
|
14
|
+
private_metadata: nil, callback_id: nil, external_id: nil)
|
15
|
+
@blocks = blocks || Slack::BlockKit::Blocks.new
|
16
|
+
|
17
|
+
@private_metadata = private_metadata
|
18
|
+
@callback_id = callback_id
|
19
|
+
@external_id = external_id
|
20
|
+
end
|
21
|
+
|
22
|
+
attr_reader :blocks
|
23
|
+
|
24
|
+
def as_json(*)
|
25
|
+
{
|
26
|
+
type: TYPE,
|
27
|
+
blocks: @blocks.as_json,
|
28
|
+
private_metadata: @private_metadata,
|
29
|
+
callback_id: @callback_id,
|
30
|
+
external_id: @external_id
|
31
|
+
}.compact
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Slack
|
4
|
+
module Surfaces
|
5
|
+
# App-published messages are dynamic yet transient spaces.
|
6
|
+
# They allow users to complete workflows among their Slack conversations.
|
7
|
+
#
|
8
|
+
# https://api.slack.com/surfaces#messages
|
9
|
+
# https://api.slack.com/messaging/composing#complex_layouts
|
10
|
+
class Message
|
11
|
+
TYPE = 'message'
|
12
|
+
|
13
|
+
def initialize(blocks: nil, text: nil, channel: nil, thread_ts: nil, as_user: nil)
|
14
|
+
@blocks = blocks || Slack::BlockKit::Blocks.new
|
15
|
+
@channel = channel
|
16
|
+
@thread_ts = thread_ts
|
17
|
+
@as_user = as_user
|
18
|
+
@text = text
|
19
|
+
end
|
20
|
+
|
21
|
+
attr_reader :blocks
|
22
|
+
|
23
|
+
def as_json(*)
|
24
|
+
{
|
25
|
+
channel: @channel,
|
26
|
+
thread_ts: @thread_ts,
|
27
|
+
as_user: @as_user,
|
28
|
+
text: @text,
|
29
|
+
blocks: @blocks.as_json
|
30
|
+
}.compact
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,76 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Slack
|
4
|
+
module Surfaces
|
5
|
+
# Modals provide focused spaces ideal for requesting and collecting data from users,
|
6
|
+
# or temporarily displaying dynamic and interactive information.
|
7
|
+
#
|
8
|
+
# https://api.slack.com/surfaces#modals
|
9
|
+
# https://api.slack.com/reference/surfaces/views
|
10
|
+
#
|
11
|
+
# @param title [String] title is required. Must be set as an initial argument
|
12
|
+
# or using #title for detail setup
|
13
|
+
#
|
14
|
+
class Modal
|
15
|
+
TYPE = 'modal'
|
16
|
+
|
17
|
+
def initialize(
|
18
|
+
title: nil,
|
19
|
+
blocks: nil,
|
20
|
+
private_metadata: nil,
|
21
|
+
callback_id: nil,
|
22
|
+
external_id: nil,
|
23
|
+
clear_on_close: nil,
|
24
|
+
notify_on_close: nil
|
25
|
+
)
|
26
|
+
@blocks = blocks || Slack::BlockKit::Blocks.new
|
27
|
+
|
28
|
+
@private_metadata = private_metadata
|
29
|
+
@callback_id = callback_id
|
30
|
+
@external_id = external_id
|
31
|
+
|
32
|
+
@clear_on_close = clear_on_close
|
33
|
+
@notify_on_close = notify_on_close
|
34
|
+
|
35
|
+
@title = Slack::BlockKit::Composition::PlainText.new(text: title) if title
|
36
|
+
|
37
|
+
@close, @submit = nil
|
38
|
+
end
|
39
|
+
|
40
|
+
attr_reader :blocks
|
41
|
+
|
42
|
+
def title(text:, emoji: nil)
|
43
|
+
@title = Slack::BlockKit::Composition::PlainText.new(text: text, emoji: emoji)
|
44
|
+
|
45
|
+
self
|
46
|
+
end
|
47
|
+
|
48
|
+
def close(text:, emoji: nil)
|
49
|
+
@close = Slack::BlockKit::Composition::PlainText.new(text: text, emoji: emoji)
|
50
|
+
|
51
|
+
self
|
52
|
+
end
|
53
|
+
|
54
|
+
def submit(text:, emoji: nil)
|
55
|
+
@submit = Slack::BlockKit::Composition::PlainText.new(text: text, emoji: emoji)
|
56
|
+
|
57
|
+
self
|
58
|
+
end
|
59
|
+
|
60
|
+
def as_json(*) # rubocop:disable Metrics/MethodLength
|
61
|
+
{
|
62
|
+
type: TYPE,
|
63
|
+
blocks: @blocks.as_json,
|
64
|
+
title: @title&.as_json,
|
65
|
+
close: @close&.as_json,
|
66
|
+
submit: @submit&.as_json,
|
67
|
+
clear_on_close: @clear_on_close,
|
68
|
+
notify_on_close: @notify_on_close,
|
69
|
+
private_metadata: @private_metadata,
|
70
|
+
callback_id: @callback_id,
|
71
|
+
external_id: @external_id
|
72
|
+
}.compact
|
73
|
+
end
|
74
|
+
end
|
75
|
+
end
|
76
|
+
end
|
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
lib = File.expand_path('lib', __dir__)
|
4
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require 'slack
|
5
|
+
require 'slack/block_kit/version'
|
6
6
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
8
|
spec.name = 'slack-ruby-block-kit'
|
@@ -13,13 +13,6 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.homepage = 'https://github.com/CGA1123/slack-ruby-block-kit'
|
14
14
|
spec.license = 'MIT'
|
15
15
|
|
16
|
-
if spec.respond_to?(:metadata)
|
17
|
-
spec.metadata['allowed_push_host'] = 'https://rubygems.org'
|
18
|
-
else
|
19
|
-
raise 'RubyGems 2.0 or newer is required to protect against ' \
|
20
|
-
'public gem pushes.'
|
21
|
-
end
|
22
|
-
|
23
16
|
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
24
17
|
`git ls-files -z`
|
25
18
|
.split("\x0")
|
@@ -27,14 +20,4 @@ Gem::Specification.new do |spec|
|
|
27
20
|
end
|
28
21
|
spec.require_paths = ['lib']
|
29
22
|
spec.required_ruby_version = '>= 2.5'
|
30
|
-
|
31
|
-
spec.add_development_dependency 'bundler'
|
32
|
-
spec.add_development_dependency 'dotenv'
|
33
|
-
spec.add_development_dependency 'faraday'
|
34
|
-
spec.add_development_dependency 'pry'
|
35
|
-
spec.add_development_dependency 'rake'
|
36
|
-
spec.add_development_dependency 'rspec'
|
37
|
-
spec.add_development_dependency 'rspec_junit_formatter'
|
38
|
-
spec.add_development_dependency 'rubocop'
|
39
|
-
spec.add_development_dependency 'rubocop-rspec'
|
40
23
|
end
|
metadata
CHANGED
@@ -1,156 +1,31 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: slack-ruby-block-kit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.13.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Gregg
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2020-
|
12
|
-
dependencies:
|
13
|
-
|
14
|
-
name: bundler
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
16
|
-
requirements:
|
17
|
-
- - ">="
|
18
|
-
- !ruby/object:Gem::Version
|
19
|
-
version: '0'
|
20
|
-
type: :development
|
21
|
-
prerelease: false
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
-
requirements:
|
24
|
-
- - ">="
|
25
|
-
- !ruby/object:Gem::Version
|
26
|
-
version: '0'
|
27
|
-
- !ruby/object:Gem::Dependency
|
28
|
-
name: dotenv
|
29
|
-
requirement: !ruby/object:Gem::Requirement
|
30
|
-
requirements:
|
31
|
-
- - ">="
|
32
|
-
- !ruby/object:Gem::Version
|
33
|
-
version: '0'
|
34
|
-
type: :development
|
35
|
-
prerelease: false
|
36
|
-
version_requirements: !ruby/object:Gem::Requirement
|
37
|
-
requirements:
|
38
|
-
- - ">="
|
39
|
-
- !ruby/object:Gem::Version
|
40
|
-
version: '0'
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: faraday
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - ">="
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - ">="
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: pry
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - ">="
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - ">="
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '0'
|
69
|
-
- !ruby/object:Gem::Dependency
|
70
|
-
name: rake
|
71
|
-
requirement: !ruby/object:Gem::Requirement
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
version: '0'
|
76
|
-
type: :development
|
77
|
-
prerelease: false
|
78
|
-
version_requirements: !ruby/object:Gem::Requirement
|
79
|
-
requirements:
|
80
|
-
- - ">="
|
81
|
-
- !ruby/object:Gem::Version
|
82
|
-
version: '0'
|
83
|
-
- !ruby/object:Gem::Dependency
|
84
|
-
name: rspec
|
85
|
-
requirement: !ruby/object:Gem::Requirement
|
86
|
-
requirements:
|
87
|
-
- - ">="
|
88
|
-
- !ruby/object:Gem::Version
|
89
|
-
version: '0'
|
90
|
-
type: :development
|
91
|
-
prerelease: false
|
92
|
-
version_requirements: !ruby/object:Gem::Requirement
|
93
|
-
requirements:
|
94
|
-
- - ">="
|
95
|
-
- !ruby/object:Gem::Version
|
96
|
-
version: '0'
|
97
|
-
- !ruby/object:Gem::Dependency
|
98
|
-
name: rspec_junit_formatter
|
99
|
-
requirement: !ruby/object:Gem::Requirement
|
100
|
-
requirements:
|
101
|
-
- - ">="
|
102
|
-
- !ruby/object:Gem::Version
|
103
|
-
version: '0'
|
104
|
-
type: :development
|
105
|
-
prerelease: false
|
106
|
-
version_requirements: !ruby/object:Gem::Requirement
|
107
|
-
requirements:
|
108
|
-
- - ">="
|
109
|
-
- !ruby/object:Gem::Version
|
110
|
-
version: '0'
|
111
|
-
- !ruby/object:Gem::Dependency
|
112
|
-
name: rubocop
|
113
|
-
requirement: !ruby/object:Gem::Requirement
|
114
|
-
requirements:
|
115
|
-
- - ">="
|
116
|
-
- !ruby/object:Gem::Version
|
117
|
-
version: '0'
|
118
|
-
type: :development
|
119
|
-
prerelease: false
|
120
|
-
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
requirements:
|
122
|
-
- - ">="
|
123
|
-
- !ruby/object:Gem::Version
|
124
|
-
version: '0'
|
125
|
-
- !ruby/object:Gem::Dependency
|
126
|
-
name: rubocop-rspec
|
127
|
-
requirement: !ruby/object:Gem::Requirement
|
128
|
-
requirements:
|
129
|
-
- - ">="
|
130
|
-
- !ruby/object:Gem::Version
|
131
|
-
version: '0'
|
132
|
-
type: :development
|
133
|
-
prerelease: false
|
134
|
-
version_requirements: !ruby/object:Gem::Requirement
|
135
|
-
requirements:
|
136
|
-
- - ">="
|
137
|
-
- !ruby/object:Gem::Version
|
138
|
-
version: '0'
|
139
|
-
description:
|
11
|
+
date: 2020-12-29 00:00:00.000000000 Z
|
12
|
+
dependencies: []
|
13
|
+
description:
|
140
14
|
email:
|
141
15
|
- c_arlt@hotmail.com
|
142
16
|
executables: []
|
143
17
|
extensions: []
|
144
18
|
extra_rdoc_files: []
|
145
19
|
files:
|
146
|
-
- ".
|
20
|
+
- ".deepsource.toml"
|
147
21
|
- ".github/dependabot.yml"
|
22
|
+
- ".github/workflows/ci.yml"
|
148
23
|
- ".gitignore"
|
149
24
|
- ".rspec"
|
150
25
|
- ".rubocop.yml"
|
151
26
|
- ".rubocop_todo.yml"
|
27
|
+
- CHANGELOG.md
|
152
28
|
- Gemfile
|
153
|
-
- Gemfile.lock
|
154
29
|
- LICENSE.txt
|
155
30
|
- README.md
|
156
31
|
- Rakefile
|
@@ -166,6 +41,7 @@ files:
|
|
166
41
|
- lib/slack/block_kit/composition/plain_text.rb
|
167
42
|
- lib/slack/block_kit/element/button.rb
|
168
43
|
- lib/slack/block_kit/element/channels_select.rb
|
44
|
+
- lib/slack/block_kit/element/checkboxes.rb
|
169
45
|
- lib/slack/block_kit/element/conversations_select.rb
|
170
46
|
- lib/slack/block_kit/element/date_picker.rb
|
171
47
|
- lib/slack/block_kit/element/external_select.rb
|
@@ -177,22 +53,28 @@ files:
|
|
177
53
|
- lib/slack/block_kit/element/multi_users_select.rb
|
178
54
|
- lib/slack/block_kit/element/overflow_menu.rb
|
179
55
|
- lib/slack/block_kit/element/plain_text_input.rb
|
56
|
+
- lib/slack/block_kit/element/radio_buttons.rb
|
180
57
|
- lib/slack/block_kit/element/static_select.rb
|
58
|
+
- lib/slack/block_kit/element/timepicker.rb
|
181
59
|
- lib/slack/block_kit/element/users_select.rb
|
182
60
|
- lib/slack/block_kit/layout/actions.rb
|
183
61
|
- lib/slack/block_kit/layout/context.rb
|
184
62
|
- lib/slack/block_kit/layout/divider.rb
|
63
|
+
- lib/slack/block_kit/layout/header.rb
|
185
64
|
- lib/slack/block_kit/layout/image.rb
|
186
65
|
- lib/slack/block_kit/layout/input.rb
|
187
66
|
- lib/slack/block_kit/layout/section.rb
|
188
67
|
- lib/slack/block_kit/layout/section/multi_select_elements.rb
|
68
|
+
- lib/slack/block_kit/version.rb
|
69
|
+
- lib/slack/surfaces/home.rb
|
70
|
+
- lib/slack/surfaces/message.rb
|
71
|
+
- lib/slack/surfaces/modal.rb
|
189
72
|
- slack-ruby-block-kit.gemspec
|
190
73
|
homepage: https://github.com/CGA1123/slack-ruby-block-kit
|
191
74
|
licenses:
|
192
75
|
- MIT
|
193
|
-
metadata:
|
194
|
-
|
195
|
-
post_install_message:
|
76
|
+
metadata: {}
|
77
|
+
post_install_message:
|
196
78
|
rdoc_options: []
|
197
79
|
require_paths:
|
198
80
|
- lib
|
@@ -207,8 +89,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
207
89
|
- !ruby/object:Gem::Version
|
208
90
|
version: '0'
|
209
91
|
requirements: []
|
210
|
-
rubygems_version: 3.
|
211
|
-
signing_key:
|
92
|
+
rubygems_version: 3.2.3
|
93
|
+
signing_key:
|
212
94
|
specification_version: 4
|
213
95
|
summary: A ruby wrapper for Slack's Block Kit
|
214
96
|
test_files: []
|
data/.circleci/config.yml
DELETED
@@ -1,49 +0,0 @@
|
|
1
|
-
version: 2
|
2
|
-
jobs:
|
3
|
-
build:
|
4
|
-
docker:
|
5
|
-
- image: circleci/ruby:2.7
|
6
|
-
|
7
|
-
working_directory: ~/repo
|
8
|
-
|
9
|
-
steps:
|
10
|
-
- checkout
|
11
|
-
- restore_cache:
|
12
|
-
keys:
|
13
|
-
- v1-dependencies-{{ checksum "Gemfile.lock" }}
|
14
|
-
- v1-dependencies-
|
15
|
-
|
16
|
-
- run:
|
17
|
-
name: bundle
|
18
|
-
command: |
|
19
|
-
bundle install --jobs=4 --retry=3 --path vendor/bundle
|
20
|
-
|
21
|
-
- save_cache:
|
22
|
-
paths:
|
23
|
-
- ./vendor/bundle
|
24
|
-
key: v1-dependencies-{{ checksum "Gemfile.lock" }}
|
25
|
-
|
26
|
-
- run:
|
27
|
-
name: rspec
|
28
|
-
command: |
|
29
|
-
mkdir /tmp/test-results
|
30
|
-
TEST_FILES="$(circleci tests glob "spec/**/*_spec.rb" | \
|
31
|
-
circleci tests split --split-by=timings)"
|
32
|
-
|
33
|
-
bundle exec rspec \
|
34
|
-
--format progress \
|
35
|
-
--format RspecJunitFormatter \
|
36
|
-
--out /tmp/test-results/rspec.xml \
|
37
|
-
--format progress \
|
38
|
-
$TEST_FILES
|
39
|
-
|
40
|
-
# collect reports
|
41
|
-
- store_test_results:
|
42
|
-
path: /tmp/test-results
|
43
|
-
- store_artifacts:
|
44
|
-
path: /tmp/test-results
|
45
|
-
destination: test-results
|
46
|
-
|
47
|
-
- run:
|
48
|
-
name: rubocop
|
49
|
-
command: bundle exec rubocop -p
|