slack-ruby-block-kit 0.11.0 → 0.12.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/.github/workflows/ci.yml +0 -4
- data/.rubocop.yml +4 -0
- data/.rubocop_todo.yml +2 -0
- data/CHANGELOG.md +24 -1
- data/Gemfile +3 -0
- data/Gemfile.lock +18 -9
- data/README.md +1 -1
- data/lib/slack/block_kit.rb +0 -2
- 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/checkboxes.rb +12 -14
- data/lib/slack/block_kit/element/multi_static_select.rb +15 -16
- data/lib/slack/block_kit/element/radio_buttons.rb +12 -7
- data/lib/slack/block_kit/element/static_select.rb +17 -16
- data/lib/slack/block_kit/layout/header.rb +29 -0
- data/lib/slack/block_kit/version.rb +7 -0
- data/slack-ruby-block-kit.gemspec +1 -8
- metadata +5 -4
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA256:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 7f687b2454f80feed6080ab0fd166e64cf49a00508d9b9982a661ecd86119d0b
         | 
| 4 | 
            +
              data.tar.gz: 2a96434b288cfd05db43a7d29dfc91d547bdca30f55a00d5a82837756a6c8fec
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 4af8e9ce974a3324d7df340fe21e85a5ec4018b67e9dd8744ea8b1d9537017ef3a21e02db60deb43e19270c7310e1a4ff27d742dba39067811a49381b5a08d77
         | 
| 7 | 
            +
              data.tar.gz: d66f7d4e796172ea73938b589f6e26f46e78ab106c1c94d6d323498c9f483df1e26a5d98af15da6b35ef51d2ea00ba9fea64e65344898530665a839e1af0259a
         | 
    
        data/.github/workflows/ci.yml
    CHANGED
    
    
    
        data/.rubocop.yml
    CHANGED
    
    
    
        data/.rubocop_todo.yml
    CHANGED
    
    | @@ -32,6 +32,8 @@ RSpec/ExampleLength: | |
| 32 32 | 
             
                - 'spec/lib/slack/block_kit/composition/option_spec.rb'
         | 
| 33 33 | 
             
                - 'spec/lib/slack/block_kit/element/checkboxes_spec.rb'
         | 
| 34 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'
         | 
| 35 37 |  | 
| 36 38 | 
             
            # Offense count: 4
         | 
| 37 39 | 
             
            Style/Documentation:
         | 
    
        data/CHANGELOG.md
    CHANGED
    
    | @@ -25,6 +25,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |
| 25 25 | 
             
            - N/A
         | 
| 26 26 |  | 
| 27 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 | 
            +
             | 
| 28 45 | 
             
            ## [0.11.0] - 2020-10-03
         | 
| 29 46 |  | 
| 30 47 | 
             
            ### Added
         | 
| @@ -37,6 +54,9 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |
| 37 54 | 
             
            - Ruby2.7 kwarg deprecation warnings
         | 
| 38 55 |  | 
| 39 56 |  | 
| 57 | 
            +
            ---
         | 
| 58 | 
            +
             | 
| 59 | 
            +
             | 
| 40 60 | 
             
            ## [0.10.0] - 2020-09-11
         | 
| 41 61 |  | 
| 42 62 | 
             
            ### Added
         | 
| @@ -46,10 +66,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 | |
| 46 66 | 
             
            - Fixed initial options in multi select blocks (#46 by @caalberts)
         | 
| 47 67 |  | 
| 48 68 |  | 
| 69 | 
            +
            ---
         | 
| 70 | 
            +
             | 
| 49 71 | 
             
            See [releases] for previous changes.
         | 
| 50 72 |  | 
| 51 73 |  | 
| 52 | 
            -
            [Unreleased]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0. | 
| 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
         | 
| 53 76 | 
             
            [0.11.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.10.0...v0.11.0
         | 
| 54 77 | 
             
            [0.10.0]: https://github.com/CGA1123/slack-ruby-block-kit/compare/v0.9.0...v0.10.0
         | 
| 55 78 |  | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,28 +1,33 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                slack-ruby-block-kit (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)
         | 
| 15 | 
            +
                docile (1.3.2)
         | 
| 12 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 22 | 
             
                parallel (1.19.2)
         | 
| 18 | 
            -
                parser (2.7. | 
| 23 | 
            +
                parser (2.7.2.0)
         | 
| 19 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.8. | 
| 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,22 +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. | 
| 47 | 
            +
                rubocop (0.93.0)
         | 
| 43 48 | 
             
                  parallel (~> 1.10)
         | 
| 44 49 | 
             
                  parser (>= 2.7.1.5)
         | 
| 45 50 | 
             
                  rainbow (>= 2.2.2, < 4.0)
         | 
| 46 | 
            -
                  regexp_parser (>= 1. | 
| 51 | 
            +
                  regexp_parser (>= 1.8)
         | 
| 47 52 | 
             
                  rexml
         | 
| 48 | 
            -
                  rubocop-ast (>= 0. | 
| 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.7. | 
| 56 | 
            +
                rubocop-ast (0.7.1)
         | 
| 52 57 | 
             
                  parser (>= 2.7.1.5)
         | 
| 53 | 
            -
                  strscan (>= 1.0.0)
         | 
| 54 58 | 
             
                rubocop-rspec (1.43.2)
         | 
| 55 59 | 
             
                  rubocop (~> 0.87)
         | 
| 56 60 | 
             
                ruby-progressbar (1.10.1)
         | 
| 57 | 
            -
                 | 
| 61 | 
            +
                simplecov (0.19.0)
         | 
| 62 | 
            +
                  docile (~> 1.1)
         | 
| 63 | 
            +
                  simplecov-html (~> 0.11)
         | 
| 64 | 
            +
                simplecov-html (0.12.2)
         | 
| 58 65 | 
             
                unicode-display_width (1.7.0)
         | 
| 59 66 |  | 
| 60 67 | 
             
            PLATFORMS
         | 
| @@ -62,6 +69,7 @@ PLATFORMS | |
| 62 69 |  | 
| 63 70 | 
             
            DEPENDENCIES
         | 
| 64 71 | 
             
              bundler
         | 
| 72 | 
            +
              codecov
         | 
| 65 73 | 
             
              dotenv
         | 
| 66 74 | 
             
              faraday
         | 
| 67 75 | 
             
              pry
         | 
| @@ -70,6 +78,7 @@ DEPENDENCIES | |
| 70 78 | 
             
              rspec_junit_formatter
         | 
| 71 79 | 
             
              rubocop
         | 
| 72 80 | 
             
              rubocop-rspec
         | 
| 81 | 
            +
              simplecov
         | 
| 73 82 | 
             
              slack-ruby-block-kit!
         | 
| 74 83 |  | 
| 75 84 | 
             
            BUNDLED WITH
         | 
    
        data/README.md
    CHANGED
    
    | @@ -1,5 +1,5 @@ | |
| 1 | 
            -
            [](https://circleci.com/gh/CGA1123/slack-ruby-block-kit/tree/master)
         | 
| 2 1 | 
             
            [](https://badge.fury.io/rb/slack-ruby-block-kit)
         | 
| 2 | 
            +
            [](https://codecov.io/gh/CGA1123/slack-ruby-block-kit)
         | 
| 3 3 |  | 
| 4 4 | 
             
            # Slack::BlockKit
         | 
| 5 5 |  | 
    
        data/lib/slack/block_kit.rb
    CHANGED
    
    | @@ -6,8 +6,6 @@ module Slack | |
| 6 6 | 
             
                module Element; end
         | 
| 7 7 | 
             
                module Layout; end
         | 
| 8 8 |  | 
| 9 | 
            -
                VERSION = '0.11.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 }
         | 
| @@ -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
         | 
| @@ -15,26 +15,16 @@ module Slack | |
| 15 15 | 
             
                    def initialize(action_id:)
         | 
| 16 16 | 
             
                      @action_id = action_id
         | 
| 17 17 | 
             
                      @options = []
         | 
| 18 | 
            -
                      @initial_options = []
         | 
| 19 18 |  | 
| 20 19 | 
             
                      yield(self) if block_given?
         | 
| 21 20 | 
             
                    end
         | 
| 22 21 |  | 
| 23 | 
            -
                    def option(value:, text:, description: nil)
         | 
| 22 | 
            +
                    def option(value:, text:, initial: false, description: nil)
         | 
| 24 23 | 
             
                      @options << Composition::Option.new(
         | 
| 25 24 | 
             
                        value: value,
         | 
| 26 25 | 
             
                        text: text,
         | 
| 27 | 
            -
                        description: description
         | 
| 28 | 
            -
             | 
| 29 | 
            -
             | 
| 30 | 
            -
                      self
         | 
| 31 | 
            -
                    end
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                    def initial(value:, text:, description: nil)
         | 
| 34 | 
            -
                      @initial_options << Composition::Option.new(
         | 
| 35 | 
            -
                        value: value,
         | 
| 36 | 
            -
                        text: text,
         | 
| 37 | 
            -
                        description: description
         | 
| 26 | 
            +
                        description: description,
         | 
| 27 | 
            +
                        initial: initial
         | 
| 38 28 | 
             
                      )
         | 
| 39 29 |  | 
| 40 30 | 
             
                      self
         | 
| @@ -45,10 +35,18 @@ module Slack | |
| 45 35 | 
             
                        type: TYPE,
         | 
| 46 36 | 
             
                        action_id: @action_id,
         | 
| 47 37 | 
             
                        options: @options.map(&:as_json),
         | 
| 48 | 
            -
                        initial_options:  | 
| 38 | 
            +
                        initial_options: initial_options&.map(&:as_json),
         | 
| 49 39 | 
             
                        confirm: confirm&.as_json
         | 
| 50 40 | 
             
                      }.compact
         | 
| 51 41 | 
             
                    end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                    private
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    def initial_options
         | 
| 46 | 
            +
                      initial = @options.select(&:initial?)
         | 
| 47 | 
            +
             | 
| 48 | 
            +
                      initial.empty? ? nil : initial
         | 
| 49 | 
            +
                    end
         | 
| 52 50 | 
             
                  end
         | 
| 53 51 | 
             
                end
         | 
| 54 52 | 
             
              end
         | 
| @@ -17,7 +17,7 @@ module Slack | |
| 17 17 |  | 
| 18 18 | 
             
                    TYPE = 'multi_static_select'
         | 
| 19 19 |  | 
| 20 | 
            -
                    attr_accessor :options, :option_groups | 
| 20 | 
            +
                    attr_accessor :options, :option_groups
         | 
| 21 21 |  | 
| 22 22 | 
             
                    def initialize(placeholder:, action_id:, emoji: nil, max_selected_items: nil)
         | 
| 23 23 | 
             
                      @placeholder = Composition::PlainText.new(text: placeholder, emoji: emoji)
         | 
| @@ -26,17 +26,17 @@ module Slack | |
| 26 26 |  | 
| 27 27 | 
             
                      @options = nil
         | 
| 28 28 | 
             
                      @option_groups = nil
         | 
| 29 | 
            -
                      @initial_options = nil
         | 
| 30 29 |  | 
| 31 30 | 
             
                      yield(self) if block_given?
         | 
| 32 31 | 
             
                    end
         | 
| 33 32 |  | 
| 34 | 
            -
                    def option(value:, text:, emoji: nil)
         | 
| 33 | 
            +
                    def option(value:, text:, initial: false, emoji: nil)
         | 
| 35 34 | 
             
                      @options ||= []
         | 
| 36 35 | 
             
                      @options << Composition::Option.new(
         | 
| 37 36 | 
             
                        value: value,
         | 
| 38 37 | 
             
                        text: text,
         | 
| 39 | 
            -
                        emoji: emoji
         | 
| 38 | 
            +
                        emoji: emoji,
         | 
| 39 | 
            +
                        initial: initial
         | 
| 40 40 | 
             
                      )
         | 
| 41 41 |  | 
| 42 42 | 
             
                      self
         | 
| @@ -53,17 +53,6 @@ module Slack | |
| 53 53 | 
             
                      self
         | 
| 54 54 | 
             
                    end
         | 
| 55 55 |  | 
| 56 | 
            -
                    def initial(value:, text:, emoji: nil)
         | 
| 57 | 
            -
                      @initial_options ||= []
         | 
| 58 | 
            -
                      @initial_options << Composition::Option.new(
         | 
| 59 | 
            -
                        value: value,
         | 
| 60 | 
            -
                        text: text,
         | 
| 61 | 
            -
                        emoji: emoji
         | 
| 62 | 
            -
                      )
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                      self
         | 
| 65 | 
            -
                    end
         | 
| 66 | 
            -
             | 
| 67 56 | 
             
                    def as_json(*)
         | 
| 68 57 | 
             
                      {
         | 
| 69 58 | 
             
                        type: TYPE,
         | 
| @@ -71,11 +60,21 @@ module Slack | |
| 71 60 | 
             
                        action_id: @action_id,
         | 
| 72 61 | 
             
                        options: @options&.map(&:as_json),
         | 
| 73 62 | 
             
                        option_groups: @option_groups&.map(&:as_json),
         | 
| 74 | 
            -
                        initial_options:  | 
| 63 | 
            +
                        initial_options: initial_options&.map(&:as_json),
         | 
| 75 64 | 
             
                        confirm: confirm&.as_json,
         | 
| 76 65 | 
             
                        max_selected_items: @max_selected_items
         | 
| 77 66 | 
             
                      }.compact
         | 
| 78 67 | 
             
                    end
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                    private
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                    def initial_options
         | 
| 72 | 
            +
                      all_options = options || option_groups&.flat_map(&:options)
         | 
| 73 | 
            +
             | 
| 74 | 
            +
                      initial = all_options&.select(&:initial?)
         | 
| 75 | 
            +
             | 
| 76 | 
            +
                      initial&.empty? ? nil : initial
         | 
| 77 | 
            +
                    end
         | 
| 79 78 | 
             
                  end
         | 
| 80 79 | 
             
                end
         | 
| 81 80 | 
             
              end
         | 
| @@ -11,10 +11,11 @@ module Slack | |
| 11 11 |  | 
| 12 12 | 
             
                    TYPE = 'radio_buttons'
         | 
| 13 13 |  | 
| 14 | 
            -
                    attr_accessor :options | 
| 14 | 
            +
                    attr_accessor :options
         | 
| 15 15 |  | 
| 16 16 | 
             
                    def initialize(action_id:)
         | 
| 17 17 | 
             
                      @action_id = action_id
         | 
| 18 | 
            +
                      @options = []
         | 
| 18 19 |  | 
| 19 20 | 
             
                      yield(self) if block_given?
         | 
| 20 21 | 
             
                    end
         | 
| @@ -22,14 +23,12 @@ module Slack | |
| 22 23 | 
             
                    def option(value:, text:, initial: false)
         | 
| 23 24 | 
             
                      option = Composition::Option.new(
         | 
| 24 25 | 
             
                        value: value,
         | 
| 25 | 
            -
                        text: text
         | 
| 26 | 
            +
                        text: text,
         | 
| 27 | 
            +
                        initial: initial
         | 
| 26 28 | 
             
                      )
         | 
| 27 29 |  | 
| 28 | 
            -
                      @options ||= []
         | 
| 29 30 | 
             
                      @options << option
         | 
| 30 31 |  | 
| 31 | 
            -
                      @initial_option = option if initial
         | 
| 32 | 
            -
             | 
| 33 32 | 
             
                      self
         | 
| 34 33 | 
             
                    end
         | 
| 35 34 |  | 
| @@ -37,11 +36,17 @@ module Slack | |
| 37 36 | 
             
                      {
         | 
| 38 37 | 
             
                        type: TYPE,
         | 
| 39 38 | 
             
                        action_id: @action_id,
         | 
| 40 | 
            -
                        options: @options | 
| 41 | 
            -
                        initial_option:  | 
| 39 | 
            +
                        options: @options.map(&:as_json),
         | 
| 40 | 
            +
                        initial_option: initial_option&.as_json,
         | 
| 42 41 | 
             
                        confirm: confirm&.as_json
         | 
| 43 42 | 
             
                      }.compact
         | 
| 44 43 | 
             
                    end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                    private
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                    def initial_option
         | 
| 48 | 
            +
                      @options&.find(&:initial?)
         | 
| 49 | 
            +
                    end
         | 
| 45 50 | 
             
                  end
         | 
| 46 51 | 
             
                end
         | 
| 47 52 | 
             
              end
         | 
| @@ -17,7 +17,7 @@ module Slack | |
| 17 17 |  | 
| 18 18 | 
             
                    TYPE = 'static_select'
         | 
| 19 19 |  | 
| 20 | 
            -
                    attr_accessor :options, :option_groups | 
| 20 | 
            +
                    attr_accessor :options, :option_groups
         | 
| 21 21 |  | 
| 22 22 | 
             
                    def initialize(placeholder:, action_id:, emoji: nil)
         | 
| 23 23 | 
             
                      @placeholder = Composition::PlainText.new(text: placeholder, emoji: emoji)
         | 
| @@ -26,12 +26,13 @@ module Slack | |
| 26 26 | 
             
                      yield(self) if block_given?
         | 
| 27 27 | 
             
                    end
         | 
| 28 28 |  | 
| 29 | 
            -
                    def option(value:, text:, emoji: nil)
         | 
| 29 | 
            +
                    def option(value:, text:, initial: false, emoji: nil)
         | 
| 30 30 | 
             
                      @options ||= []
         | 
| 31 31 | 
             
                      @options << Composition::Option.new(
         | 
| 32 32 | 
             
                        value: value,
         | 
| 33 33 | 
             
                        text: text,
         | 
| 34 | 
            -
                        emoji: emoji
         | 
| 34 | 
            +
                        emoji: emoji,
         | 
| 35 | 
            +
                        initial: initial
         | 
| 35 36 | 
             
                      )
         | 
| 36 37 |  | 
| 37 38 | 
             
                      self
         | 
| @@ -48,27 +49,27 @@ module Slack | |
| 48 49 | 
             
                      self
         | 
| 49 50 | 
             
                    end
         | 
| 50 51 |  | 
| 51 | 
            -
                    def initial(value:, text:, emoji: nil)
         | 
| 52 | 
            -
                      @initial_option = Composition::Option.new(
         | 
| 53 | 
            -
                        value: value,
         | 
| 54 | 
            -
                        text: text,
         | 
| 55 | 
            -
                        emoji: emoji
         | 
| 56 | 
            -
                      )
         | 
| 57 | 
            -
             | 
| 58 | 
            -
                      self
         | 
| 59 | 
            -
                    end
         | 
| 60 | 
            -
             | 
| 61 52 | 
             
                    def as_json(*)
         | 
| 62 53 | 
             
                      {
         | 
| 63 54 | 
             
                        type: TYPE,
         | 
| 64 55 | 
             
                        placeholder: @placeholder.as_json,
         | 
| 65 56 | 
             
                        action_id: @action_id,
         | 
| 66 | 
            -
                        options:  | 
| 67 | 
            -
                        option_groups:  | 
| 68 | 
            -
                        initial_option:  | 
| 57 | 
            +
                        options: options&.map(&:as_json),
         | 
| 58 | 
            +
                        option_groups: option_groups&.map(&:as_json),
         | 
| 59 | 
            +
                        initial_option: initial_option&.as_json,
         | 
| 69 60 | 
             
                        confirm: confirm&.as_json
         | 
| 70 61 | 
             
                      }.compact
         | 
| 71 62 | 
             
                    end
         | 
| 63 | 
            +
             | 
| 64 | 
            +
                    private
         | 
| 65 | 
            +
             | 
| 66 | 
            +
                    def initial_option
         | 
| 67 | 
            +
                      opts = options || option_groups&.flat_map(&:options)
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                      return unless opts
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                      opts.find(&:initial?)
         | 
| 72 | 
            +
                    end
         | 
| 72 73 | 
             
                  end
         | 
| 73 74 | 
             
                end
         | 
| 74 75 | 
             
              end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Slack
         | 
| 4 | 
            +
              module BlockKit
         | 
| 5 | 
            +
                module Layout
         | 
| 6 | 
            +
                  # A header is a plain-text block that displays in a larger, bold font.
         | 
| 7 | 
            +
                  # Use it to delineate between different groups of content in your app's
         | 
| 8 | 
            +
                  # surfaces.
         | 
| 9 | 
            +
                  #
         | 
| 10 | 
            +
                  # https://api.slack.com/reference/block-kit/blocks#header
         | 
| 11 | 
            +
                  class Header
         | 
| 12 | 
            +
                    TYPE = 'header'
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                    def initialize(text:, block_id: nil, emoji: nil)
         | 
| 15 | 
            +
                      @text = Composition::PlainText.new(text: text, emoji: emoji)
         | 
| 16 | 
            +
                      @block_id = block_id
         | 
| 17 | 
            +
                    end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                    def as_json(*)
         | 
| 20 | 
            +
                      {
         | 
| 21 | 
            +
                        type: TYPE,
         | 
| 22 | 
            +
                        text: @text.as_json,
         | 
| 23 | 
            +
                        block_id: @block_id
         | 
| 24 | 
            +
                      }.compact
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            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")
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 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.12.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: 2020-10- | 
| 11 | 
            +
            date: 2020-10-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: bundler
         | 
| @@ -185,10 +185,12 @@ files: | |
| 185 185 | 
             
            - lib/slack/block_kit/layout/actions.rb
         | 
| 186 186 | 
             
            - lib/slack/block_kit/layout/context.rb
         | 
| 187 187 | 
             
            - lib/slack/block_kit/layout/divider.rb
         | 
| 188 | 
            +
            - lib/slack/block_kit/layout/header.rb
         | 
| 188 189 | 
             
            - lib/slack/block_kit/layout/image.rb
         | 
| 189 190 | 
             
            - lib/slack/block_kit/layout/input.rb
         | 
| 190 191 | 
             
            - lib/slack/block_kit/layout/section.rb
         | 
| 191 192 | 
             
            - lib/slack/block_kit/layout/section/multi_select_elements.rb
         | 
| 193 | 
            +
            - lib/slack/block_kit/version.rb
         | 
| 192 194 | 
             
            - lib/slack/surfaces/home.rb
         | 
| 193 195 | 
             
            - lib/slack/surfaces/message.rb
         | 
| 194 196 | 
             
            - lib/slack/surfaces/modal.rb
         | 
| @@ -196,8 +198,7 @@ files: | |
| 196 198 | 
             
            homepage: https://github.com/CGA1123/slack-ruby-block-kit
         | 
| 197 199 | 
             
            licenses:
         | 
| 198 200 | 
             
            - MIT
         | 
| 199 | 
            -
            metadata:
         | 
| 200 | 
            -
              allowed_push_host: https://rubygems.org
         | 
| 201 | 
            +
            metadata: {}
         | 
| 201 202 | 
             
            post_install_message:
         | 
| 202 203 | 
             
            rdoc_options: []
         | 
| 203 204 | 
             
            require_paths:
         |