slack-ruby-block-kit 0.7.0 → 0.12.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (38) hide show
  1. checksums.yaml +4 -4
  2. data/.github/workflows/ci.yml +27 -0
  3. data/.rubocop.yml +19 -0
  4. data/.rubocop_todo.yml +10 -0
  5. data/CHANGELOG.md +79 -0
  6. data/Gemfile +3 -1
  7. data/Gemfile.lock +25 -14
  8. data/README.md +1 -1
  9. data/lib/slack/block_kit.rb +44 -2
  10. data/lib/slack/block_kit/composition/confirmation_dialog.rb +16 -0
  11. data/lib/slack/block_kit/composition/conversation_filter.rb +33 -0
  12. data/lib/slack/block_kit/composition/option.rb +6 -1
  13. data/lib/slack/block_kit/composition/option_group.rb +2 -2
  14. data/lib/slack/block_kit/element/button.rb +3 -11
  15. data/lib/slack/block_kit/element/channels_select.rb +3 -11
  16. data/lib/slack/block_kit/element/checkboxes.rb +53 -0
  17. data/lib/slack/block_kit/element/conversations_select.rb +13 -7
  18. data/lib/slack/block_kit/element/date_picker.rb +3 -9
  19. data/lib/slack/block_kit/element/external_select.rb +3 -12
  20. data/lib/slack/block_kit/element/multi_channels_select.rb +5 -14
  21. data/lib/slack/block_kit/element/multi_conversations_select.rb +16 -11
  22. data/lib/slack/block_kit/element/multi_external_select.rb +5 -14
  23. data/lib/slack/block_kit/element/multi_static_select.rb +18 -25
  24. data/lib/slack/block_kit/element/multi_users_select.rb +5 -14
  25. data/lib/slack/block_kit/element/overflow_menu.rb +4 -11
  26. data/lib/slack/block_kit/element/radio_buttons.rb +53 -0
  27. data/lib/slack/block_kit/element/static_select.rb +20 -25
  28. data/lib/slack/block_kit/element/users_select.rb +3 -11
  29. data/lib/slack/block_kit/layout/header.rb +29 -0
  30. data/lib/slack/block_kit/layout/image.rb +1 -4
  31. data/lib/slack/block_kit/layout/section.rb +21 -1
  32. data/lib/slack/block_kit/version.rb +7 -0
  33. data/lib/slack/surfaces/home.rb +35 -0
  34. data/lib/slack/surfaces/message.rb +34 -0
  35. data/lib/slack/surfaces/modal.rb +76 -0
  36. data/slack-ruby-block-kit.gemspec +1 -8
  37. metadata +17 -9
  38. data/.circleci/config.yml +0 -49
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fa3cc74b7d6e5de2e6889ec9fdc8ba02b8678be5731708cb7b5319985d839354
4
- data.tar.gz: a261f505882c2662bd1009ff3a020a394154dcfe336439e032e0942085a2df46
3
+ metadata.gz: 7f687b2454f80feed6080ab0fd166e64cf49a00508d9b9982a661ecd86119d0b
4
+ data.tar.gz: 2a96434b288cfd05db43a7d29dfc91d547bdca30f55a00d5a82837756a6c8fec
5
5
  SHA512:
6
- metadata.gz: 99d3a21decd19a4cfb54351bf31d2ec36516f2777a010ceae26e21b121f3bf229b8c8df2d7a9cef7598ae8fe2f93e42642321d8d7cd72cccdc8b384a62845da2
7
- data.tar.gz: c90b7442867bc51d87d8d1bb2c6a34193bcc6ad3cec7808527955e5bc0b157360ffac521ed58b8bd545fca76c3bf86f4d459e649eb26f0e5a69b10a990aa4076
6
+ metadata.gz: 4af8e9ce974a3324d7df340fe21e85a5ec4018b67e9dd8744ea8b1d9537017ef3a21e02db60deb43e19270c7310e1a4ff27d742dba39067811a49381b5a08d77
7
+ data.tar.gz: d66f7d4e796172ea73938b589f6e26f46e78ab106c1c94d6d323498c9f483df1e26a5d98af15da6b35ef51d2ea00ba9fea64e65344898530665a839e1af0259a
@@ -0,0 +1,27 @@
1
+ name: Test & Lint
2
+
3
+ on:
4
+ push:
5
+ branches: [ master ]
6
+ pull_request:
7
+ branches: [ master ]
8
+
9
+ jobs:
10
+ build:
11
+ runs-on: ubuntu-latest
12
+ continue-on-error: ${{ matrix.experimental }}
13
+ strategy:
14
+ fail-fast: false
15
+ matrix:
16
+ ruby: [ '2.6', '2.7' ]
17
+ experimental: [ false ]
18
+ name: Ruby ${{ matrix.ruby }}
19
+ steps:
20
+ - uses: actions/checkout@v2
21
+ - uses: ruby/setup-ruby@v1
22
+ with:
23
+ ruby-version: ${{ matrix.ruby }}
24
+ - run: gem install bundler:2.1.4
25
+ - run: bundle install
26
+ - run: bundle exec rubocop
27
+ - run: bundle exec rspec --format progress
@@ -3,6 +3,7 @@ inherit_from: .rubocop_todo.yml
3
3
 
4
4
  AllCops:
5
5
  TargetRubyVersion: 2.5.3
6
+ NewCops: enable
6
7
 
7
8
  Layout/LineLength:
8
9
  Max: 120
@@ -53,3 +54,21 @@ Style/HashTransformValues:
53
54
 
54
55
  Style/SlicingWithRange:
55
56
  Enabled: true
57
+
58
+ Lint/MixedRegexpCaptureTypes:
59
+ Enabled: true
60
+
61
+ Style/RedundantFetchBlock:
62
+ Enabled: true
63
+
64
+ Style/RedundantRegexpCharacterClass:
65
+ Enabled: true
66
+
67
+ Style/RedundantRegexpEscape:
68
+ Enabled: true
69
+
70
+ RSpec/MultipleMemoizedHelpers:
71
+ Max: 10
72
+
73
+ RSpec/NestedGroups:
74
+ Max: 4
@@ -17,6 +17,12 @@ Metrics/BlockLength:
17
17
  Metrics/ClassLength:
18
18
  Max: 117
19
19
 
20
+ # Offense count: 1
21
+ # Configuration parameters: IgnoredMethods.
22
+ Metrics/CyclomaticComplexity:
23
+ Exclude:
24
+ - 'lib/slack/block_kit/element/multi_static_select.rb'
25
+
20
26
  # Offense count: 5
21
27
  # Configuration parameters: Max.
22
28
  RSpec/ExampleLength:
@@ -24,6 +30,10 @@ RSpec/ExampleLength:
24
30
  - 'spec/lib/slack/block_kit/composition/confirmation_dialog_spec.rb'
25
31
  - 'spec/lib/slack/block_kit/composition/option_group_spec.rb'
26
32
  - 'spec/lib/slack/block_kit/composition/option_spec.rb'
33
+ - 'spec/lib/slack/block_kit/element/checkboxes_spec.rb'
34
+ - 'spec/lib/slack/block_kit/element/radio_buttons_spec.rb'
35
+ - 'spec/lib/slack/block_kit/composition/option_spec.rb'
36
+ - 'spec/lib/slack/block_kit/element/multi_static_select_spec.rb'
27
37
 
28
38
  # Offense count: 4
29
39
  Style/Documentation:
@@ -0,0 +1,79 @@
1
+ # Changelog
2
+ All notable changes to this project will be documented in this file.
3
+
4
+ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
5
+ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6
+
7
+ ## [Unreleased]
8
+
9
+ ### Added
10
+ - N/A
11
+
12
+ ### Changed
13
+ - N/A
14
+
15
+ ### Deprecated
16
+ - N/A
17
+
18
+ ### Removed
19
+ - N/A
20
+
21
+ ### Fixed
22
+ - N/A
23
+
24
+ ### Security
25
+ - N/A
26
+
27
+
28
+ ---
29
+
30
+
31
+ ## [0.12.0] - 2020-10-06
32
+
33
+ ### Added
34
+ - `Slack::BlockKit::Layout::Header` (#57)
35
+
36
+ ### Removed
37
+ - `Slack::BlockKit::Element::Checkboxes#initial`, use the `initial:` keyword on `#option`
38
+ - `Slack::BlockKit::Element::MultiStaticSelect#initial`, use the `initial:` keyword on `#option`
39
+ - `Slack::BlockKit::Element::StaticSelect#initial`, use the `initial:` keyword on `#option`
40
+
41
+
42
+ ---
43
+
44
+
45
+ ## [0.11.0] - 2020-10-03
46
+
47
+ ### Added
48
+ - Add `Slack::BlockKit::Element::RadioButtons` (#52 by @caalberts)
49
+
50
+ ### Changed
51
+ - Internal refactoring of `#confirmation_dialog` methods into a shared `Confirmable` module. (#48)
52
+
53
+ ### Fixed
54
+ - Ruby2.7 kwarg deprecation warnings
55
+
56
+
57
+ ---
58
+
59
+
60
+ ## [0.10.0] - 2020-09-11
61
+
62
+ ### Added
63
+ - Add `Slack::BlockKit::Element::Checkboxes` (#44 by @caalberts)
64
+
65
+ ### Fixed
66
+ - Fixed initial options in multi select blocks (#46 by @caalberts)
67
+
68
+
69
+ ---
70
+
71
+ See [releases] for previous changes.
72
+
73
+
74
+ [Unreleased]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.12.0...HEAD
75
+ [0.12.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.11.0...v0.12.0
76
+ [0.11.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.10.0...v0.11.0
77
+ [0.10.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.9.0...v0.10.0
78
+
79
+ [releases]: https://github.com/CGA1123/slack-ruby-block-kit/releases
data/Gemfile CHANGED
@@ -2,5 +2,7 @@
2
2
 
3
3
  source 'https://rubygems.org'
4
4
 
5
- # Specify your gem's dependencies in tenios-rb.gemspec
6
5
  gemspec
6
+
7
+ gem 'codecov', require: false
8
+ gem 'simplecov', require: false
@@ -1,28 +1,33 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- slack-ruby-block-kit (0.7.0)
4
+ slack-ruby-block-kit (0.12.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
8
8
  specs:
9
9
  ast (2.4.1)
10
+ codecov (0.2.11)
11
+ json
12
+ simplecov
10
13
  coderay (1.1.2)
11
14
  diff-lcs (1.3)
12
- dotenv (2.7.5)
15
+ docile (1.3.2)
16
+ dotenv (2.7.6)
13
17
  faraday (1.0.1)
14
18
  multipart-post (>= 1.2, < 3)
19
+ json (2.3.1)
15
20
  method_source (1.0.0)
16
21
  multipart-post (2.1.1)
17
- parallel (1.19.1)
18
- parser (2.7.1.3)
19
- ast (~> 2.4.0)
22
+ parallel (1.19.2)
23
+ parser (2.7.2.0)
24
+ ast (~> 2.4.1)
20
25
  pry (0.13.1)
21
26
  coderay (~> 1.1)
22
27
  method_source (~> 1.0)
23
28
  rainbow (3.0.0)
24
29
  rake (13.0.1)
25
- regexp_parser (1.7.1)
30
+ regexp_parser (1.8.1)
26
31
  rexml (3.2.4)
27
32
  rspec (3.9.0)
28
33
  rspec-core (~> 3.9.0)
@@ -39,20 +44,24 @@ GEM
39
44
  rspec-support (3.9.3)
40
45
  rspec_junit_formatter (0.4.1)
41
46
  rspec-core (>= 2, < 4, != 2.12.0)
42
- rubocop (0.85.1)
47
+ rubocop (0.93.0)
43
48
  parallel (~> 1.10)
44
- parser (>= 2.7.0.1)
49
+ parser (>= 2.7.1.5)
45
50
  rainbow (>= 2.2.2, < 4.0)
46
- regexp_parser (>= 1.7)
51
+ regexp_parser (>= 1.8)
47
52
  rexml
48
- rubocop-ast (>= 0.0.3)
53
+ rubocop-ast (>= 0.6.0)
49
54
  ruby-progressbar (~> 1.7)
50
55
  unicode-display_width (>= 1.4.0, < 2.0)
51
- rubocop-ast (0.0.3)
52
- parser (>= 2.7.0.1)
53
- rubocop-rspec (1.40.0)
54
- rubocop (>= 0.68.1)
56
+ rubocop-ast (0.7.1)
57
+ parser (>= 2.7.1.5)
58
+ rubocop-rspec (1.43.2)
59
+ rubocop (~> 0.87)
55
60
  ruby-progressbar (1.10.1)
61
+ simplecov (0.19.0)
62
+ docile (~> 1.1)
63
+ simplecov-html (~> 0.11)
64
+ simplecov-html (0.12.2)
56
65
  unicode-display_width (1.7.0)
57
66
 
58
67
  PLATFORMS
@@ -60,6 +69,7 @@ PLATFORMS
60
69
 
61
70
  DEPENDENCIES
62
71
  bundler
72
+ codecov
63
73
  dotenv
64
74
  faraday
65
75
  pry
@@ -68,6 +78,7 @@ DEPENDENCIES
68
78
  rspec_junit_formatter
69
79
  rubocop
70
80
  rubocop-rspec
81
+ simplecov
71
82
  slack-ruby-block-kit!
72
83
 
73
84
  BUNDLED WITH
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
- [![CircleCI](https://circleci.com/gh/CGA1123/slack-ruby-block-kit/tree/master.svg?style=svg)](https://circleci.com/gh/CGA1123/slack-ruby-block-kit/tree/master)
2
1
  [![Gem Version](https://badge.fury.io/rb/slack-ruby-block-kit.svg)](https://badge.fury.io/rb/slack-ruby-block-kit)
2
+ [![codecov](https://codecov.io/gh/CGA1123/slack-ruby-block-kit/branch/master/graph/badge.svg)](https://codecov.io/gh/CGA1123/slack-ruby-block-kit)
3
3
 
4
4
  # Slack::BlockKit
5
5
 
@@ -6,12 +6,11 @@ module Slack
6
6
  module Element; end
7
7
  module Layout; end
8
8
 
9
- VERSION = '0.7.0'
10
-
11
9
  Dir[File.join(__dir__, 'block_kit', 'composition', '*.rb')].sort.each { |file| require file }
12
10
  Dir[File.join(__dir__, 'block_kit', 'element', '*.rb')].sort.each { |file| require file }
13
11
  Dir[File.join(__dir__, 'block_kit', 'layout', '*.rb')].sort.each { |file| require file }
14
12
  Dir[File.join(__dir__, 'block_kit', '*.rb')].sort.each { |file| require file }
13
+ Dir[File.join(__dir__, 'surfaces', '*.rb')].sort.each { |file| require file }
15
14
 
16
15
  module_function
17
16
 
@@ -22,5 +21,48 @@ module Slack
22
21
 
23
22
  blocks
24
23
  end
24
+
25
+ def home(blocks: nil,
26
+ private_metadata: nil, callback_id: nil, external_id: nil)
27
+ home_surface = Slack::Surfaces::Home.new(blocks: blocks,
28
+ private_metadata: private_metadata,
29
+ callback_id: callback_id,
30
+ external_id: external_id)
31
+
32
+ yield(home_surface) if block_given?
33
+
34
+ home_surface
35
+ end
36
+
37
+ def modal(title: nil,
38
+ blocks: nil,
39
+ private_metadata: nil, callback_id: nil, external_id: nil,
40
+ clear_on_close: nil, notify_on_close: nil)
41
+ modal_surface = Slack::Surfaces::Modal.new(title: title,
42
+ blocks: blocks,
43
+ private_metadata: private_metadata,
44
+ callback_id: callback_id,
45
+ external_id: external_id,
46
+ clear_on_close: clear_on_close,
47
+ notify_on_close: notify_on_close)
48
+
49
+ yield(modal_surface) if block_given?
50
+
51
+ modal_surface
52
+ end
53
+
54
+ def message(blocks: nil, channel: nil, thread_ts: nil, as_user: nil, text: nil)
55
+ message_surface = Slack::Surfaces::Message.new(
56
+ blocks: blocks,
57
+ channel: channel,
58
+ thread_ts: thread_ts,
59
+ text: text,
60
+ as_user: as_user
61
+ )
62
+
63
+ yield(message_surface) if block_given?
64
+
65
+ message_surface
66
+ end
25
67
  end
26
68
  end
@@ -9,6 +9,22 @@ module Slack
9
9
  #
10
10
  # https://api.slack.com/reference/messaging/composition-objects#confirm
11
11
  class ConfirmationDialog
12
+ # {Confirmable} contains the common behaviour for configuring a
13
+ # {ConfirmationDialog}
14
+ module Confirmable
15
+ def self.included(klass)
16
+ klass.attr_accessor :confirm
17
+ end
18
+
19
+ def confirmation_dialog
20
+ self.confirm = Composition::ConfirmationDialog.new
21
+
22
+ yield(confirm) if block_given?
23
+
24
+ self
25
+ end
26
+ end
27
+
12
28
  def initialize
13
29
  @title, @confirm, @text, @style = nil
14
30
  end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Slack
4
+ module BlockKit
5
+ module Composition
6
+ # Provides a way to filter the list of options in a conversations select menu
7
+ # or conversations multi-select menu.
8
+ #
9
+ # @param [Array] only - "include" field
10
+ #
11
+ # https://api.slack.com/reference/block-kit/composition-objects#filter_conversations
12
+ # https://api.slack.com/reference/block-kit/block-elements#conversation_multi_select
13
+ # https://api.slack.com/reference/block-kit/block-elements#conversation_select
14
+ class ConversationFilter
15
+ def initialize(only: nil,
16
+ exclude_external_shared_channels: nil,
17
+ exclude_bot_users: nil)
18
+ @only = only
19
+ @exclude_external_shared_channels = exclude_external_shared_channels
20
+ @exclude_bot_users = exclude_bot_users
21
+ end
22
+
23
+ def as_json(*)
24
+ {
25
+ include: @only,
26
+ exclude_external_shared_channels: @exclude_external_shared_channels,
27
+ exclude_bot_users: @exclude_bot_users
28
+ }.compact
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
@@ -8,11 +8,16 @@ module Slack
8
8
  # https://api.slack.com/reference/messaging/composition-objects#option
9
9
  # https://api.slack.com/reference/messaging/block-elements#select
10
10
  class Option
11
- def initialize(value:, text:, emoji: nil, description: nil, url: nil)
11
+ def initialize(value:, text:, initial: false, emoji: nil, description: nil, url: nil)
12
12
  @text = PlainText.new(text: text, emoji: emoji)
13
13
  @value = value
14
14
  @description = description && PlainText.new(text: description, emoji: emoji)
15
15
  @url = url
16
+ @initial = initial
17
+ end
18
+
19
+ def initial?
20
+ !!@initial
16
21
  end
17
22
 
18
23
  def as_json(*)
@@ -17,8 +17,8 @@ module Slack
17
17
  yield(self) if block_given?
18
18
  end
19
19
 
20
- def option(text:, value:, emoji: nil)
21
- @options << Option.new(text: text, value: value, emoji: emoji)
20
+ def option(text:, value:, emoji: nil, initial: false)
21
+ @options << Option.new(text: text, value: value, emoji: emoji, initial: initial)
22
22
 
23
23
  self
24
24
  end
@@ -9,9 +9,9 @@ module Slack
9
9
  #
10
10
  # https://api.slack.com/reference/messaging/block-elements#button
11
11
  class Button
12
- TYPE = 'button'
12
+ include Composition::ConfirmationDialog::Confirmable
13
13
 
14
- attr_accessor :confirm
14
+ TYPE = 'button'
15
15
 
16
16
  def initialize(text:, action_id:, style: nil, emoji: nil, url: nil, value: nil)
17
17
  @text = Composition::PlainText.new(text: text, emoji: emoji)
@@ -23,14 +23,6 @@ module Slack
23
23
  yield(self) if block_given?
24
24
  end
25
25
 
26
- def confirmation_dialog
27
- @confirm = Composition::ConfirmationDialog.new
28
-
29
- yield(@confirm) if block_given?
30
-
31
- @confirm
32
- end
33
-
34
26
  def as_json(*)
35
27
  {
36
28
  type: TYPE,
@@ -39,7 +31,7 @@ module Slack
39
31
  url: @url,
40
32
  value: @value,
41
33
  style: @style,
42
- confirm: @confirm&.as_json
34
+ confirm: confirm&.as_json
43
35
  }.compact
44
36
  end
45
37
  end