slack-ruby-block-kit 0.16.0 → 0.19.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/.devcontainer/Dockerfile +1 -0
- data/.devcontainer/devcontainer.json +11 -0
- data/.github/dependabot.yml +2 -1
- data/.github/workflows/ci.yml +2 -1
- data/.github/workflows/release.yml +31 -0
- data/.gitignore +2 -1
- data/.rubocop.yml +4 -1
- data/CHANGELOG.md +45 -53
- data/Gemfile +3 -3
- data/Gemfile.lock +54 -42
- data/README.md +12 -0
- data/lib/slack/block_kit/blocks.rb +16 -2
- data/lib/slack/block_kit/element/{date_picker.rb → datepicker.rb} +1 -1
- data/lib/slack/block_kit/element/timepicker.rb +11 -14
- data/lib/slack/block_kit/formatting.rb +124 -0
- data/lib/slack/block_kit/layout/actions.rb +15 -2
- data/lib/slack/block_kit/layout/input.rb +14 -1
- data/lib/slack/block_kit/layout/section.rb +15 -4
- data/lib/slack/block_kit/layout/video.rb +51 -0
- data/lib/slack/block_kit/version.rb +1 -1
- data/lib/slack/block_kit.rb +0 -6
- data/lib/slack/surfaces/modal.rb +1 -1
- data/lib/slack-ruby-block-kit.rb +12 -1
- data/{bin → script}/console +1 -1
- data/script/lint +3 -0
- data/script/test +3 -0
- data/slack-ruby-block-kit.gemspec +5 -3
- metadata +29 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 122d7e0273762e60628682a4874b0c5c148312b3cc62e9659c0c42dff2f200d6
|
4
|
+
data.tar.gz: c5d1685745d2bf0bc12813e96ecd14c87a1a21fad9d81c27a29dac243891b1a9
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e9df8d14a98baff1b3783c159527277d9e25d61f8fd68ff113d2449ad447611f80d1b023950733c1d159345d3359f6fe08c6bd70254b085ffbfa77613abd97b
|
7
|
+
data.tar.gz: 3cd7a5724578d354345bfbe11014c37f8ce4d2515c59bfe2cfdd139aaee4fa8bd71418811abe59500c0bac3950d14bf91891053c247144df0d76b9f70142f165
|
@@ -0,0 +1 @@
|
|
1
|
+
FROM mcr.microsoft.com/vscode/devcontainers/ruby:0-2.7
|
data/.github/dependabot.yml
CHANGED
data/.github/workflows/ci.yml
CHANGED
@@ -30,4 +30,5 @@ jobs:
|
|
30
30
|
- run: bundle exec rubocop
|
31
31
|
- run: bundle exec rspec --format progress
|
32
32
|
- run: ./bin/deepsource report --analyzer test-coverage --key ruby --value-file ./coverage/.resultset.json
|
33
|
-
|
33
|
+
# don't run on forks which don't have access to DEEPSOURCE_DSN
|
34
|
+
if: (env.DEEPSOURCE_DSN != '') && (github.event_name == 'push') || (github.event.pull_request.head.repo.full_name == github.repository)
|
@@ -0,0 +1,31 @@
|
|
1
|
+
name: Release
|
2
|
+
|
3
|
+
on:
|
4
|
+
workflow_dispatch:
|
5
|
+
inputs:
|
6
|
+
otp:
|
7
|
+
name: 'RubyGems OTP Code'
|
8
|
+
required: true
|
9
|
+
|
10
|
+
jobs:
|
11
|
+
release:
|
12
|
+
name: Release
|
13
|
+
runs-on: ubuntu-latest
|
14
|
+
steps:
|
15
|
+
- uses: actions/checkout@v2
|
16
|
+
- uses: ruby/setup-ruby@v1
|
17
|
+
with:
|
18
|
+
ruby-version: 2.7
|
19
|
+
- name: Mask OTP
|
20
|
+
run: |
|
21
|
+
OTP=$(jq -r '.inputs.otp' $GITHUB_EVENT_PATH)
|
22
|
+
echo "::add-mask::$OTP"
|
23
|
+
- run: gem update --system
|
24
|
+
- run: git config --global user.email github-action@users.noreply.github.com
|
25
|
+
- run: git config --global user.name GitHub Actions
|
26
|
+
- run: git config --global user.password ${{ github.token }}
|
27
|
+
- run: bundle install
|
28
|
+
- run: bundle exec rake release
|
29
|
+
env:
|
30
|
+
GEM_HOST_API_KEY: ${{ secrets.RUBYGEMS_API_KEY }}
|
31
|
+
GEM_HOST_OTP_CODE: ${{ github.event.inputs.otp }}
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -8,7 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
8
8
|
## [Unreleased]
|
9
9
|
|
10
10
|
### Added
|
11
|
-
-
|
11
|
+
- N/A
|
12
12
|
|
13
13
|
### Changed
|
14
14
|
- N/A
|
@@ -25,40 +25,59 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
25
25
|
### Security
|
26
26
|
- N/A
|
27
27
|
|
28
|
+
## [0.19.0] - 2022-09-05
|
28
29
|
|
29
|
-
|
30
|
+
### Added
|
31
|
+
- Added `Slack::BlockKit::Layout::Video` (#152 by @jcat4)
|
30
32
|
|
33
|
+
This adds support for Slack's new Video Block.
|
31
34
|
|
32
|
-
|
35
|
+
See: https://api.slack.com/reference/block-kit/blocks#video
|
33
36
|
|
34
37
|
|
35
|
-
## [0.
|
38
|
+
## [0.18.0] - 2022-08-26
|
36
39
|
|
37
|
-
|
40
|
+
### Added
|
41
|
+
- `Slack::BlockKit::Layout::Input#Timepicker`
|
42
|
+
- `Slack::BlockKit::Layout::Actions#timepicker`
|
43
|
+
- `Slack::BlockKit::Layout::Section#timepicker`
|
38
44
|
|
39
|
-
###
|
40
|
-
- `
|
45
|
+
### Changed
|
46
|
+
- `Slack::BlockKit::Element::Timepicker.initialize` now accepts `initial:`, `emoji:`, `placeholder:`
|
47
|
+
- Rename `Slack::BlockKit::Element::DatePicker` to `Datepicker`
|
48
|
+
- Rename `Slack::BlockKit::Layout::Actions#date_picker` to `#datepicker`
|
49
|
+
- Rename `Slack::BlockKit::Layout::Section#date_picker` to `#datepicker`
|
50
|
+
- `Slack::BlockKit::Blocks#input` now supports passing through the `optional:` parameter (@sophieklm)
|
41
51
|
|
42
|
-
###
|
43
|
-
-
|
52
|
+
### Removed
|
53
|
+
- `Slack::BlockKit::Element::Timepicker#placeholder`
|
54
|
+
- `Slack::BlockKit::Element::Timepicker#initial_time`
|
44
55
|
|
45
56
|
|
46
|
-
[0.
|
57
|
+
## [0.17.0] - 2021-06-28
|
47
58
|
|
59
|
+
### Added
|
60
|
+
- `Slack::BlockKit::Formatting` with utility functions for Slack text formatting (#98 by @CGA1123)
|
48
61
|
|
49
|
-
---
|
50
62
|
|
63
|
+
## [0.16.0] - 2021-06-23
|
51
64
|
|
52
|
-
|
65
|
+
This release contains a breaking change on the `Layout::Actions` interface.
|
53
66
|
|
54
67
|
### Added
|
55
|
-
-
|
68
|
+
- Added new `Layout::Actions#checkboxes` method (#96 by @ryanwilsonperkin)
|
69
|
+
|
70
|
+
### Removed
|
71
|
+
- `Layout::Actions#converstation_select` (use `#conversation_select` instead) (#97 by @ryanwilsonperkin)
|
56
72
|
|
73
|
+
### Fixed
|
74
|
+
- Fixed name of method in `Layout::Actions` to be `conversation_select` (#97 by @ryanwilsonperkin)
|
57
75
|
|
58
|
-
[0.15.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.14.1...v0.15.0
|
59
76
|
|
77
|
+
## [0.15.0] - 2021-06-14
|
60
78
|
|
61
|
-
|
79
|
+
### Added
|
80
|
+
- Support `dispatch_action` and `dispatch_action_config` (#94 by @deecewan)
|
62
81
|
|
63
82
|
|
64
83
|
## [0.14.1] - 2021-05-05
|
@@ -67,24 +86,12 @@ This release contains a breaking change on the `Layout::Actions` interface.
|
|
67
86
|
- Allow Layout::Section to render without `text` (#87 by @pbendersky)
|
68
87
|
|
69
88
|
|
70
|
-
[0.14.1]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.14.0...v0.14.1
|
71
|
-
|
72
|
-
|
73
|
-
---
|
74
|
-
|
75
|
-
|
76
89
|
## [0.14.0] - 2021-02-06
|
77
90
|
|
78
91
|
### Added
|
79
92
|
- `Slack::BlockKit::Blocks#header` (#74 by @rspeicher)
|
80
93
|
|
81
94
|
|
82
|
-
[0.14.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.13.0...v0.14.0
|
83
|
-
|
84
|
-
|
85
|
-
---
|
86
|
-
|
87
|
-
|
88
95
|
## [0.13.0] - 2020-12-29
|
89
96
|
|
90
97
|
### Added
|
@@ -96,12 +103,6 @@ This release contains a breaking change on the `Layout::Actions` interface.
|
|
96
103
|
- Development dependencies now managed by bundler via Gemfile, rather than in gemspec
|
97
104
|
|
98
105
|
|
99
|
-
[0.13.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.12.0...v0.13.0
|
100
|
-
|
101
|
-
|
102
|
-
---
|
103
|
-
|
104
|
-
|
105
106
|
## [0.12.0] - 2020-10-06
|
106
107
|
|
107
108
|
### Added
|
@@ -113,12 +114,6 @@ This release contains a breaking change on the `Layout::Actions` interface.
|
|
113
114
|
- `Slack::BlockKit::Element::StaticSelect#initial`, use the `initial:` keyword on `#option`
|
114
115
|
|
115
116
|
|
116
|
-
[0.12.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.11.0...v0.12.0
|
117
|
-
|
118
|
-
|
119
|
-
---
|
120
|
-
|
121
|
-
|
122
117
|
## [0.11.0] - 2020-10-03
|
123
118
|
|
124
119
|
### Added
|
@@ -131,12 +126,6 @@ This release contains a breaking change on the `Layout::Actions` interface.
|
|
131
126
|
- Ruby2.7 kwarg deprecation warnings
|
132
127
|
|
133
128
|
|
134
|
-
[0.11.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.10.0...v0.11.0
|
135
|
-
|
136
|
-
|
137
|
-
---
|
138
|
-
|
139
|
-
|
140
129
|
## [0.10.0] - 2020-09-11
|
141
130
|
|
142
131
|
### Added
|
@@ -146,12 +135,15 @@ This release contains a breaking change on the `Layout::Actions` interface.
|
|
146
135
|
- Fixed initial options in multi select blocks (#46 by @caalberts)
|
147
136
|
|
148
137
|
|
138
|
+
[Unreleased]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.19.0...HEAD
|
139
|
+
[0.19.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.18.0...v0.19.0
|
140
|
+
[0.18.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.17.0...v0.18.0
|
141
|
+
[0.17.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.16.0...v0.17.0
|
142
|
+
[0.16.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.15.0...v0.16.0
|
143
|
+
[0.15.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.14.1...v0.15.0
|
144
|
+
[0.14.1]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.14.0...v0.14.1
|
145
|
+
[0.14.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.13.0...v0.14.0
|
146
|
+
[0.13.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.12.0...v0.13.0
|
147
|
+
[0.12.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.11.0...v0.12.0
|
148
|
+
[0.11.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.10.0...v0.11.0
|
149
149
|
[0.10.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.9.0...v0.10.0
|
150
|
-
|
151
|
-
|
152
|
-
---
|
153
|
-
|
154
|
-
See [releases] for previous changes.
|
155
|
-
|
156
|
-
|
157
|
-
[releases]: https://github.com/CGA1123/slack-ruby-block-kit/releases
|
data/Gemfile
CHANGED
@@ -9,10 +9,10 @@ gem 'faraday', '~> 1'
|
|
9
9
|
gem 'pry', '~> 0.14'
|
10
10
|
gem 'rake', '~> 13'
|
11
11
|
gem 'rspec', '~> 3'
|
12
|
-
gem 'rspec_junit_formatter', '~> 0.
|
12
|
+
gem 'rspec_junit_formatter', '~> 0.5'
|
13
13
|
|
14
|
-
gem 'codecov', '~> 0.
|
14
|
+
gem 'codecov', '~> 0.6', require: false
|
15
15
|
gem 'rubocop', '~> 1', require: false
|
16
|
-
gem 'rubocop-rake', '~> 0.
|
16
|
+
gem 'rubocop-rake', '~> 0.6', require: false
|
17
17
|
gem 'rubocop-rspec', '~> 2', require: false
|
18
18
|
gem 'simplecov', '~> 0.21', require: false
|
data/Gemfile.lock
CHANGED
@@ -1,98 +1,110 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
slack-ruby-block-kit (0.
|
4
|
+
slack-ruby-block-kit (0.19.0)
|
5
|
+
zeitwerk (~> 2.6)
|
5
6
|
|
6
7
|
GEM
|
7
8
|
remote: https://rubygems.org/
|
8
9
|
specs:
|
9
10
|
ast (2.4.2)
|
10
|
-
codecov (0.
|
11
|
+
codecov (0.6.0)
|
11
12
|
simplecov (>= 0.15, < 0.22)
|
12
13
|
coderay (1.1.3)
|
13
|
-
diff-lcs (1.
|
14
|
-
docile (1.
|
15
|
-
dotenv (2.
|
16
|
-
faraday (1.
|
14
|
+
diff-lcs (1.5.0)
|
15
|
+
docile (1.4.0)
|
16
|
+
dotenv (2.8.1)
|
17
|
+
faraday (1.10.2)
|
17
18
|
faraday-em_http (~> 1.0)
|
18
19
|
faraday-em_synchrony (~> 1.0)
|
19
20
|
faraday-excon (~> 1.1)
|
21
|
+
faraday-httpclient (~> 1.0)
|
22
|
+
faraday-multipart (~> 1.0)
|
20
23
|
faraday-net_http (~> 1.0)
|
21
|
-
faraday-net_http_persistent (~> 1.
|
22
|
-
|
24
|
+
faraday-net_http_persistent (~> 1.0)
|
25
|
+
faraday-patron (~> 1.0)
|
26
|
+
faraday-rack (~> 1.0)
|
27
|
+
faraday-retry (~> 1.0)
|
23
28
|
ruby2_keywords (>= 0.0.4)
|
24
29
|
faraday-em_http (1.0.0)
|
25
30
|
faraday-em_synchrony (1.0.0)
|
26
31
|
faraday-excon (1.1.0)
|
32
|
+
faraday-httpclient (1.0.1)
|
33
|
+
faraday-multipart (1.0.4)
|
34
|
+
multipart-post (~> 2)
|
27
35
|
faraday-net_http (1.0.1)
|
28
|
-
faraday-net_http_persistent (1.
|
36
|
+
faraday-net_http_persistent (1.2.0)
|
37
|
+
faraday-patron (1.0.0)
|
38
|
+
faraday-rack (1.0.0)
|
39
|
+
faraday-retry (1.0.3)
|
29
40
|
method_source (1.0.0)
|
30
|
-
multipart-post (2.
|
31
|
-
parallel (1.
|
32
|
-
parser (3.
|
41
|
+
multipart-post (2.2.3)
|
42
|
+
parallel (1.22.1)
|
43
|
+
parser (3.1.2.0)
|
33
44
|
ast (~> 2.4.1)
|
34
45
|
pry (0.14.1)
|
35
46
|
coderay (~> 1.1)
|
36
47
|
method_source (~> 1.0)
|
37
|
-
rainbow (3.
|
38
|
-
rake (13.0.
|
39
|
-
regexp_parser (2.
|
48
|
+
rainbow (3.1.1)
|
49
|
+
rake (13.0.6)
|
50
|
+
regexp_parser (2.3.1)
|
40
51
|
rexml (3.2.5)
|
41
|
-
rspec (3.
|
42
|
-
rspec-core (~> 3.
|
43
|
-
rspec-expectations (~> 3.
|
44
|
-
rspec-mocks (~> 3.
|
45
|
-
rspec-core (3.
|
46
|
-
rspec-support (~> 3.
|
47
|
-
rspec-expectations (3.
|
52
|
+
rspec (3.11.0)
|
53
|
+
rspec-core (~> 3.11.0)
|
54
|
+
rspec-expectations (~> 3.11.0)
|
55
|
+
rspec-mocks (~> 3.11.0)
|
56
|
+
rspec-core (3.11.0)
|
57
|
+
rspec-support (~> 3.11.0)
|
58
|
+
rspec-expectations (3.11.0)
|
48
59
|
diff-lcs (>= 1.2.0, < 2.0)
|
49
|
-
rspec-support (~> 3.
|
50
|
-
rspec-mocks (3.
|
60
|
+
rspec-support (~> 3.11.0)
|
61
|
+
rspec-mocks (3.11.0)
|
51
62
|
diff-lcs (>= 1.2.0, < 2.0)
|
52
|
-
rspec-support (~> 3.
|
53
|
-
rspec-support (3.
|
54
|
-
rspec_junit_formatter (0.
|
63
|
+
rspec-support (~> 3.11.0)
|
64
|
+
rspec-support (3.11.0)
|
65
|
+
rspec_junit_formatter (0.5.1)
|
55
66
|
rspec-core (>= 2, < 4, != 2.12.0)
|
56
|
-
rubocop (1.
|
67
|
+
rubocop (1.28.2)
|
57
68
|
parallel (~> 1.10)
|
58
|
-
parser (>= 3.
|
69
|
+
parser (>= 3.1.0.0)
|
59
70
|
rainbow (>= 2.2.2, < 4.0)
|
60
71
|
regexp_parser (>= 1.8, < 3.0)
|
61
72
|
rexml
|
62
|
-
rubocop-ast (>= 1.
|
73
|
+
rubocop-ast (>= 1.17.0, < 2.0)
|
63
74
|
ruby-progressbar (~> 1.7)
|
64
75
|
unicode-display_width (>= 1.4.0, < 3.0)
|
65
|
-
rubocop-ast (1.
|
66
|
-
parser (>= 3.
|
67
|
-
rubocop-rake (0.
|
68
|
-
rubocop
|
69
|
-
rubocop-rspec (2.4.0)
|
76
|
+
rubocop-ast (1.17.0)
|
77
|
+
parser (>= 3.1.1.0)
|
78
|
+
rubocop-rake (0.6.0)
|
70
79
|
rubocop (~> 1.0)
|
71
|
-
|
80
|
+
rubocop-rspec (2.10.0)
|
81
|
+
rubocop (~> 1.19)
|
72
82
|
ruby-progressbar (1.11.0)
|
73
|
-
ruby2_keywords (0.0.
|
83
|
+
ruby2_keywords (0.0.5)
|
74
84
|
simplecov (0.21.2)
|
75
85
|
docile (~> 1.1)
|
76
86
|
simplecov-html (~> 0.11)
|
77
87
|
simplecov_json_formatter (~> 0.1)
|
78
88
|
simplecov-html (0.12.3)
|
79
|
-
simplecov_json_formatter (0.1.
|
80
|
-
unicode-display_width (2.
|
89
|
+
simplecov_json_formatter (0.1.3)
|
90
|
+
unicode-display_width (2.1.0)
|
91
|
+
zeitwerk (2.6.0)
|
81
92
|
|
82
93
|
PLATFORMS
|
83
94
|
ruby
|
84
95
|
x86_64-darwin-19
|
96
|
+
x86_64-linux
|
85
97
|
|
86
98
|
DEPENDENCIES
|
87
|
-
codecov (~> 0.
|
99
|
+
codecov (~> 0.6)
|
88
100
|
dotenv (~> 2)
|
89
101
|
faraday (~> 1)
|
90
102
|
pry (~> 0.14)
|
91
103
|
rake (~> 13)
|
92
104
|
rspec (~> 3)
|
93
|
-
rspec_junit_formatter (~> 0.
|
105
|
+
rspec_junit_formatter (~> 0.5)
|
94
106
|
rubocop (~> 1)
|
95
|
-
rubocop-rake (~> 0.
|
107
|
+
rubocop-rake (~> 0.6)
|
96
108
|
rubocop-rspec (~> 2)
|
97
109
|
simplecov (~> 0.21)
|
98
110
|
slack-ruby-block-kit!
|
data/README.md
CHANGED
@@ -95,3 +95,15 @@ See [issues](https://github.com/CGA1123/slack-ruby-block-kit/issues) if you want
|
|
95
95
|
## License
|
96
96
|
|
97
97
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
98
|
+
|
99
|
+
## Releasing
|
100
|
+
|
101
|
+
Releasing is automated via the `.github/workflows/release.yml` which allows for
|
102
|
+
an OTP code to be passed in to authorize the release with MFA. If GitHub
|
103
|
+
Actions is running slow it might take another attempt to make sure the OTP code
|
104
|
+
is still valid when the workflow tries to push.
|
105
|
+
|
106
|
+
- Update `CHANGELOG` for the latest version (remember to update the comparison links + add in an `Unreleased` section again)
|
107
|
+
- Update `lib/slack/block_kit/version.rb` and run `bundle` to update the `Gemfile.lock`
|
108
|
+
- Push that!
|
109
|
+
- Run the `Release` workflow
|
@@ -55,6 +55,19 @@ module Slack
|
|
55
55
|
append(block)
|
56
56
|
end
|
57
57
|
|
58
|
+
def video(alt_text:, thumbnail_url:, video_url:, title:, description:, **optional_args)
|
59
|
+
block = Layout::Video.new(
|
60
|
+
alt_text: alt_text,
|
61
|
+
thumbnail_url: thumbnail_url,
|
62
|
+
video_url: video_url,
|
63
|
+
title: title,
|
64
|
+
description: description,
|
65
|
+
**optional_args
|
66
|
+
)
|
67
|
+
|
68
|
+
append(block)
|
69
|
+
end
|
70
|
+
|
58
71
|
def section(block_id: nil)
|
59
72
|
block = Layout::Section.new(block_id: block_id)
|
60
73
|
|
@@ -63,12 +76,13 @@ module Slack
|
|
63
76
|
append(block)
|
64
77
|
end
|
65
78
|
|
66
|
-
def input(label:, hint: nil, block_id: nil, dispatch_action: nil)
|
79
|
+
def input(label:, hint: nil, block_id: nil, dispatch_action: nil, optional: nil)
|
67
80
|
block = Layout::Input.new(
|
68
81
|
label: label,
|
69
82
|
hint: hint,
|
70
83
|
block_id: block_id,
|
71
|
-
dispatch_action: dispatch_action
|
84
|
+
dispatch_action: dispatch_action,
|
85
|
+
optional: optional
|
72
86
|
)
|
73
87
|
|
74
88
|
yield(block) if block_given?
|
@@ -9,7 +9,7 @@ module Slack
|
|
9
9
|
# Date picker elements can be used inside of section and actions blocks.
|
10
10
|
#
|
11
11
|
# https://api.slack.com/reference/messaging/block-elements#datepicker
|
12
|
-
class
|
12
|
+
class Datepicker
|
13
13
|
include Composition::ConfirmationDialog::Confirmable
|
14
14
|
|
15
15
|
TYPE = 'datepicker'
|
@@ -15,25 +15,14 @@ module Slack
|
|
15
15
|
|
16
16
|
TYPE = 'timepicker'
|
17
17
|
|
18
|
-
def initialize(action_id:)
|
19
|
-
@placeholder,
|
18
|
+
def initialize(action_id:, placeholder: nil, initial: nil, emoji: nil)
|
19
|
+
@placeholder = placeholder_text(placeholder, emoji) if placeholder
|
20
|
+
@initial_time = initial
|
20
21
|
@action_id = action_id
|
21
22
|
|
22
23
|
yield(self) if block_given?
|
23
24
|
end
|
24
25
|
|
25
|
-
def placeholder(text:, emoji: nil)
|
26
|
-
@placeholder = Composition::PlainText.new(text: text, emoji: emoji)
|
27
|
-
|
28
|
-
self
|
29
|
-
end
|
30
|
-
|
31
|
-
def initial_time(time_str)
|
32
|
-
@initial_time = time_str
|
33
|
-
|
34
|
-
self
|
35
|
-
end
|
36
|
-
|
37
26
|
def as_json(*)
|
38
27
|
{
|
39
28
|
type: TYPE,
|
@@ -43,6 +32,14 @@ module Slack
|
|
43
32
|
confirm: confirm&.as_json
|
44
33
|
}.compact
|
45
34
|
end
|
35
|
+
|
36
|
+
private
|
37
|
+
|
38
|
+
def placeholder_text(text, emoji)
|
39
|
+
return unless text
|
40
|
+
|
41
|
+
Composition::PlainText.new(text: text, emoji: emoji)
|
42
|
+
end
|
46
43
|
end
|
47
44
|
end
|
48
45
|
end
|
@@ -0,0 +1,124 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Slack
|
4
|
+
module BlockKit
|
5
|
+
# Formatting contains some utility functions to help formatting text
|
6
|
+
#
|
7
|
+
# See: https://api.slack.com/reference/surfaces/formatting
|
8
|
+
module Formatting
|
9
|
+
extend self # rubocop:disable Style/ModuleFunction
|
10
|
+
|
11
|
+
DATE_FORMAT_TOKENS = [
|
12
|
+
# 2014-02-18
|
13
|
+
DATE_NUM = '{date_num}',
|
14
|
+
|
15
|
+
# February 18th, 2014
|
16
|
+
DATE = '{date}',
|
17
|
+
|
18
|
+
# Feb 18, 2014
|
19
|
+
DATE_SHORT = '{date_short}',
|
20
|
+
|
21
|
+
# Tuesday, February 18th, 2014
|
22
|
+
DATE_LONG = '{date_long}',
|
23
|
+
|
24
|
+
# February 18th, 2014 but uses "yesterday", "today", or "tomorrow"
|
25
|
+
# where
|
26
|
+
# appropriate
|
27
|
+
DATE_PRETTY = '{date_pretty}',
|
28
|
+
|
29
|
+
# Feb 18, 2014 but uses "yesterday", "today", or "tomorrow" where
|
30
|
+
# appropriate
|
31
|
+
DATE_SHORT_PRETTY = '{date_short_pretty}',
|
32
|
+
|
33
|
+
# Tuesday, February 18th, 2014 but uses "yesterday", "today", or
|
34
|
+
# "tomorrow" where appropriate
|
35
|
+
DATE_LONG_PRETTY = '{date_long_pretty}',
|
36
|
+
|
37
|
+
# 6:39 AM or 6:39 PM / 06:39 or 18:39 (depending on user preferences)
|
38
|
+
TIME = '{time}',
|
39
|
+
|
40
|
+
# 6:39:45 AM 6:39:42 PM / 06:39:45 or 18:39:42 (depending on user
|
41
|
+
# preferences)
|
42
|
+
TIME_SECS = '{time_secs}'
|
43
|
+
].freeze
|
44
|
+
|
45
|
+
# Format a URL
|
46
|
+
#
|
47
|
+
# See: https://api.slack.com/reference/surfaces/formatting#links
|
48
|
+
def link(url, link_text: nil)
|
49
|
+
"<#{[url, link_text].compact.join('|')}>"
|
50
|
+
end
|
51
|
+
|
52
|
+
# Format a mailto link
|
53
|
+
#
|
54
|
+
# See: https://api.slack.com/reference/surfaces/formatting#links
|
55
|
+
def mailto(address, link_text: nil)
|
56
|
+
"<mailto:#{[address, link_text].compact.join('|')}>"
|
57
|
+
end
|
58
|
+
|
59
|
+
# Link a public channel
|
60
|
+
#
|
61
|
+
# See: https://api.slack.com/reference/surfaces/formatting#linking-channels
|
62
|
+
def channel(identifier)
|
63
|
+
"<##{identifier}>"
|
64
|
+
end
|
65
|
+
|
66
|
+
# Mention a user
|
67
|
+
#
|
68
|
+
# See: https://api.slack.com/reference/surfaces/formatting#mentioning-users
|
69
|
+
def user(identifier)
|
70
|
+
"<@#{identifier}>"
|
71
|
+
end
|
72
|
+
|
73
|
+
# Mention a group
|
74
|
+
#
|
75
|
+
# See: https://api.slack.com/reference/surfaces/formatting#mentioning-groups
|
76
|
+
def group(identifier)
|
77
|
+
"<!subteam^#{identifier}>"
|
78
|
+
end
|
79
|
+
|
80
|
+
# Mention @here (all active users in the current channel)
|
81
|
+
#
|
82
|
+
# See: https://api.slack.com/reference/surfaces/formatting#special-mentions
|
83
|
+
def at_here
|
84
|
+
# additional "|here" is for supporting very old mobile clients apparently!
|
85
|
+
'<!here|here>'
|
86
|
+
end
|
87
|
+
|
88
|
+
# Mention @channel (all users in the current channel)
|
89
|
+
#
|
90
|
+
# See: https://api.slack.com/reference/surfaces/formatting#special-mentions
|
91
|
+
def at_channel
|
92
|
+
'<!channel>'
|
93
|
+
end
|
94
|
+
|
95
|
+
# Mention @everyone (all users in #general)
|
96
|
+
#
|
97
|
+
# See: https://api.slack.com/reference/surfaces/formatting#special-mentions
|
98
|
+
def at_everyone
|
99
|
+
'<!everyone>'
|
100
|
+
end
|
101
|
+
|
102
|
+
# Localise a UNIX timestamp to the user's local timezone
|
103
|
+
#
|
104
|
+
# See: https://api.slack.com/reference/surfaces/formatting#date-formatting
|
105
|
+
def date(timestamp, token_string:, link: nil, fallback_text: nil)
|
106
|
+
datetime_str = [timestamp, token_string, link].compact.join('^')
|
107
|
+
str = [datetime_str, fallback_text].compact.join('|')
|
108
|
+
|
109
|
+
"<!date^#{str}>"
|
110
|
+
end
|
111
|
+
|
112
|
+
# Escape special characters (<,>,&) with their HTML entity code so
|
113
|
+
# Slack's text parsers knows to interpret them as literals.
|
114
|
+
#
|
115
|
+
# See: https://api.slack.com/reference/surfaces/formatting#escaping
|
116
|
+
def escape(text)
|
117
|
+
text
|
118
|
+
.gsub('&', '&')
|
119
|
+
.gsub('>', '>')
|
120
|
+
.gsub('<', '<')
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
@@ -59,8 +59,21 @@ module Slack
|
|
59
59
|
append(element)
|
60
60
|
end
|
61
61
|
|
62
|
-
def
|
63
|
-
element = Element::
|
62
|
+
def datepicker(action_id:, placeholder: nil, initial: nil, emoji: nil)
|
63
|
+
element = Element::Datepicker.new(
|
64
|
+
placeholder: placeholder,
|
65
|
+
action_id: action_id,
|
66
|
+
initial: initial,
|
67
|
+
emoji: emoji
|
68
|
+
)
|
69
|
+
|
70
|
+
yield(element) if block_given?
|
71
|
+
|
72
|
+
append(element)
|
73
|
+
end
|
74
|
+
|
75
|
+
def timepicker(action_id:, placeholder: nil, initial: nil, emoji: nil)
|
76
|
+
element = Element::Timepicker.new(
|
64
77
|
placeholder: placeholder,
|
65
78
|
action_id: action_id,
|
66
79
|
initial: initial,
|
@@ -79,7 +79,7 @@ module Slack
|
|
79
79
|
end
|
80
80
|
|
81
81
|
def datepicker(action_id:, placeholder: nil, initial: nil, emoji: nil)
|
82
|
-
@element = Element::
|
82
|
+
@element = Element::Datepicker.new(
|
83
83
|
action_id: action_id,
|
84
84
|
placeholder: placeholder,
|
85
85
|
initial: initial,
|
@@ -91,6 +91,19 @@ module Slack
|
|
91
91
|
self
|
92
92
|
end
|
93
93
|
|
94
|
+
def timepicker(action_id:, placeholder: nil, initial: nil, emoji: nil)
|
95
|
+
@element = Element::Timepicker.new(
|
96
|
+
action_id: action_id,
|
97
|
+
placeholder: placeholder,
|
98
|
+
emoji: emoji,
|
99
|
+
initial: initial
|
100
|
+
)
|
101
|
+
|
102
|
+
yield(@element) if block_given?
|
103
|
+
|
104
|
+
self
|
105
|
+
end
|
106
|
+
|
94
107
|
def multi_channels_select(placeholder:, action_id:, initial: nil, emoji: nil, max_selected_items: nil)
|
95
108
|
@element = Element::MultiChannelsSelect.new(
|
96
109
|
placeholder: placeholder,
|
@@ -1,7 +1,5 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require_relative './section/multi_select_elements'
|
4
|
-
|
5
3
|
module Slack
|
6
4
|
module BlockKit
|
7
5
|
module Layout
|
@@ -94,8 +92,21 @@ module Slack
|
|
94
92
|
accessorise(element)
|
95
93
|
end
|
96
94
|
|
97
|
-
def
|
98
|
-
element = Element::
|
95
|
+
def datepicker(action_id:, placeholder: nil, initial: nil, emoji: nil)
|
96
|
+
element = Element::Datepicker.new(
|
97
|
+
placeholder: placeholder,
|
98
|
+
action_id: action_id,
|
99
|
+
initial: initial,
|
100
|
+
emoji: emoji
|
101
|
+
)
|
102
|
+
|
103
|
+
yield(element) if block_given?
|
104
|
+
|
105
|
+
accessorise(element)
|
106
|
+
end
|
107
|
+
|
108
|
+
def timepicker(action_id:, placeholder: nil, initial: nil, emoji: nil)
|
109
|
+
element = Element::Timepicker.new(
|
99
110
|
placeholder: placeholder,
|
100
111
|
action_id: action_id,
|
101
112
|
initial: initial,
|
@@ -0,0 +1,51 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Slack
|
4
|
+
module BlockKit
|
5
|
+
module Layout
|
6
|
+
# A video block is designed to embed videos in all app surfaces
|
7
|
+
# (e.g. link unfurls, messages, modals, App Home) — anywhere you can put blocks!
|
8
|
+
# To use the video block within your app, you must have the links.embed:write scope.
|
9
|
+
#
|
10
|
+
# https://api.slack.com/reference/messaging/blocks#context
|
11
|
+
class Video
|
12
|
+
TYPE = 'video'
|
13
|
+
|
14
|
+
def initialize(alt_text:, thumbnail_url:, video_url:, title:, description:, **optional_args)
|
15
|
+
@alt_text = alt_text
|
16
|
+
@thumbnail_url = thumbnail_url
|
17
|
+
@video_url = video_url
|
18
|
+
@author_name = optional_args[:author_name]
|
19
|
+
@block_id = optional_args[:block_id]
|
20
|
+
@provider_icon_url = optional_args[:provider_icon_url]
|
21
|
+
@provider_name = optional_args[:provider_name]
|
22
|
+
@title_url = optional_args[:title_url]
|
23
|
+
@description = Composition::PlainText.new(
|
24
|
+
text: description,
|
25
|
+
emoji: optional_args[:emoji]
|
26
|
+
)
|
27
|
+
@title = Composition::PlainText.new(
|
28
|
+
text: title,
|
29
|
+
emoji: optional_args[:emoji]
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
def as_json(*)
|
34
|
+
{
|
35
|
+
type: TYPE,
|
36
|
+
alt_text: @alt_text,
|
37
|
+
thumbnail_url: @thumbnail_url,
|
38
|
+
video_url: @video_url,
|
39
|
+
author_name: @author_name,
|
40
|
+
block_id: @block_id,
|
41
|
+
provider_icon_url: @provider_icon_url,
|
42
|
+
provider_name: @provider_name,
|
43
|
+
title_url: @title_url,
|
44
|
+
description: @description.as_json,
|
45
|
+
title: @title.as_json
|
46
|
+
}.compact
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
data/lib/slack/block_kit.rb
CHANGED
@@ -8,12 +8,6 @@ module Slack
|
|
8
8
|
|
9
9
|
module Layout; end
|
10
10
|
|
11
|
-
Dir[File.join(__dir__, 'block_kit', 'composition', '*.rb')].sort.each { |file| require file }
|
12
|
-
Dir[File.join(__dir__, 'block_kit', 'element', '*.rb')].sort.each { |file| require file }
|
13
|
-
Dir[File.join(__dir__, 'block_kit', 'layout', '*.rb')].sort.each { |file| require file }
|
14
|
-
Dir[File.join(__dir__, 'block_kit', '*.rb')].sort.each { |file| require file }
|
15
|
-
Dir[File.join(__dir__, 'surfaces', '*.rb')].sort.each { |file| require file }
|
16
|
-
|
17
11
|
module_function
|
18
12
|
|
19
13
|
def blocks
|
data/lib/slack/surfaces/modal.rb
CHANGED
data/lib/slack-ruby-block-kit.rb
CHANGED
@@ -1,3 +1,14 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require 'zeitwerk'
|
4
|
+
|
5
|
+
loader = Zeitwerk::Loader.new
|
6
|
+
loader.tag = 'slack-ruby-block-kit'
|
7
|
+
loader.push_dir(__dir__)
|
8
|
+
loader.ignore(__FILE__)
|
9
|
+
loader.inflector.inflect('version' => 'VERSION')
|
10
|
+
loader.setup
|
11
|
+
|
12
|
+
require 'slack/block_kit'
|
13
|
+
|
14
|
+
loader.eager_load
|
data/{bin → script}/console
RENAMED
data/script/lint
ADDED
data/script/test
ADDED
@@ -1,8 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
5
|
-
require 'slack/block_kit/version'
|
3
|
+
require_relative 'lib/slack/block_kit/version'
|
6
4
|
|
7
5
|
Gem::Specification.new do |spec|
|
8
6
|
spec.name = 'slack-ruby-block-kit'
|
@@ -20,4 +18,8 @@ Gem::Specification.new do |spec|
|
|
20
18
|
end
|
21
19
|
spec.require_paths = ['lib']
|
22
20
|
spec.required_ruby_version = '>= 2.5'
|
21
|
+
spec.metadata = {
|
22
|
+
'rubygems_mfa_required' => 'true'
|
23
|
+
}
|
24
|
+
spec.add_dependency 'zeitwerk', '~> 2.6'
|
23
25
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
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.19.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Christian Gregg
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
12
|
-
dependencies:
|
11
|
+
date: 2022-09-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: zeitwerk
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '2.6'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '2.6'
|
13
27
|
description:
|
14
28
|
email:
|
15
29
|
- c_arlt@hotmail.com
|
@@ -18,8 +32,11 @@ extensions: []
|
|
18
32
|
extra_rdoc_files: []
|
19
33
|
files:
|
20
34
|
- ".deepsource.toml"
|
35
|
+
- ".devcontainer/Dockerfile"
|
36
|
+
- ".devcontainer/devcontainer.json"
|
21
37
|
- ".github/dependabot.yml"
|
22
38
|
- ".github/workflows/ci.yml"
|
39
|
+
- ".github/workflows/release.yml"
|
23
40
|
- ".gitignore"
|
24
41
|
- ".rspec"
|
25
42
|
- ".rubocop.yml"
|
@@ -29,7 +46,6 @@ files:
|
|
29
46
|
- LICENSE.txt
|
30
47
|
- README.md
|
31
48
|
- Rakefile
|
32
|
-
- bin/console
|
33
49
|
- lib/slack-ruby-block-kit.rb
|
34
50
|
- lib/slack/block_kit.rb
|
35
51
|
- lib/slack/block_kit/blocks.rb
|
@@ -44,7 +60,7 @@ files:
|
|
44
60
|
- lib/slack/block_kit/element/channels_select.rb
|
45
61
|
- lib/slack/block_kit/element/checkboxes.rb
|
46
62
|
- lib/slack/block_kit/element/conversations_select.rb
|
47
|
-
- lib/slack/block_kit/element/
|
63
|
+
- lib/slack/block_kit/element/datepicker.rb
|
48
64
|
- lib/slack/block_kit/element/external_select.rb
|
49
65
|
- lib/slack/block_kit/element/image.rb
|
50
66
|
- lib/slack/block_kit/element/multi_channels_select.rb
|
@@ -58,6 +74,7 @@ files:
|
|
58
74
|
- lib/slack/block_kit/element/static_select.rb
|
59
75
|
- lib/slack/block_kit/element/timepicker.rb
|
60
76
|
- lib/slack/block_kit/element/users_select.rb
|
77
|
+
- lib/slack/block_kit/formatting.rb
|
61
78
|
- lib/slack/block_kit/layout/actions.rb
|
62
79
|
- lib/slack/block_kit/layout/context.rb
|
63
80
|
- lib/slack/block_kit/layout/divider.rb
|
@@ -66,15 +83,20 @@ files:
|
|
66
83
|
- lib/slack/block_kit/layout/input.rb
|
67
84
|
- lib/slack/block_kit/layout/section.rb
|
68
85
|
- lib/slack/block_kit/layout/section/multi_select_elements.rb
|
86
|
+
- lib/slack/block_kit/layout/video.rb
|
69
87
|
- lib/slack/block_kit/version.rb
|
70
88
|
- lib/slack/surfaces/home.rb
|
71
89
|
- lib/slack/surfaces/message.rb
|
72
90
|
- lib/slack/surfaces/modal.rb
|
91
|
+
- script/console
|
92
|
+
- script/lint
|
93
|
+
- script/test
|
73
94
|
- slack-ruby-block-kit.gemspec
|
74
95
|
homepage: https://github.com/CGA1123/slack-ruby-block-kit
|
75
96
|
licenses:
|
76
97
|
- MIT
|
77
|
-
metadata:
|
98
|
+
metadata:
|
99
|
+
rubygems_mfa_required: 'true'
|
78
100
|
post_install_message:
|
79
101
|
rdoc_options: []
|
80
102
|
require_paths:
|
@@ -90,7 +112,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
90
112
|
- !ruby/object:Gem::Version
|
91
113
|
version: '0'
|
92
114
|
requirements: []
|
93
|
-
rubygems_version: 3.
|
115
|
+
rubygems_version: 3.3.21
|
94
116
|
signing_key:
|
95
117
|
specification_version: 4
|
96
118
|
summary: A ruby wrapper for Slack's Block Kit
|