block-kit 1.0.3 → 1.0.5

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.
Files changed (35) hide show
  1. checksums.yaml +4 -4
  2. data/.tool-versions +1 -0
  3. data/lib/block_kit/base.rb +8 -0
  4. data/lib/block_kit/blocks.rb +2 -3
  5. data/lib/block_kit/composition/dispatch_action_config.rb +6 -3
  6. data/lib/block_kit/composition/slack_file.rb +1 -1
  7. data/lib/block_kit/composition/trigger.rb +4 -0
  8. data/lib/block_kit/composition.rb +1 -0
  9. data/lib/block_kit/concerns/confirmable.rb +2 -0
  10. data/lib/block_kit/concerns/conversation_selection.rb +3 -0
  11. data/lib/block_kit/concerns/dispatchable.rb +1 -1
  12. data/lib/block_kit/concerns/has_rich_text_elements.rb +1 -8
  13. data/lib/block_kit/concerns/plain_text_emoji_assignment.rb +2 -2
  14. data/lib/block_kit/elements/datetime_picker.rb +2 -0
  15. data/lib/block_kit/elements/image.rb +2 -0
  16. data/lib/block_kit/elements/overflow.rb +1 -1
  17. data/lib/block_kit/elements/time_picker.rb +2 -0
  18. data/lib/block_kit/elements.rb +2 -0
  19. data/lib/block_kit/layout/actions.rb +1 -8
  20. data/lib/block_kit/layout/context.rb +1 -8
  21. data/lib/block_kit/layout/image.rb +2 -0
  22. data/lib/block_kit/layout/rich_text/elements/channel.rb +2 -0
  23. data/lib/block_kit/layout/rich_text/elements/user.rb +2 -0
  24. data/lib/block_kit/layout/rich_text/elements/usergroup.rb +5 -0
  25. data/lib/block_kit/layout/rich_text/elements.rb +1 -0
  26. data/lib/block_kit/layout/rich_text/list.rb +1 -1
  27. data/lib/block_kit/layout/rich_text.rb +9 -16
  28. data/lib/block_kit/layout/video.rb +2 -0
  29. data/lib/block_kit/surfaces/base.rb +1 -1
  30. data/lib/block_kit/surfaces/home.rb +0 -7
  31. data/lib/block_kit/surfaces/message.rb +1 -8
  32. data/lib/block_kit/surfaces/modal.rb +0 -7
  33. data/lib/block_kit/version.rb +1 -1
  34. data/lib/block_kit.rb +8 -8
  35. metadata +4 -3
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 033e781b6f1656644ae2038ad1c4d1575f9fe1e9179da732127edb43895612c7
4
- data.tar.gz: dbb788025b21764ec964ccfa6c7b2409f47990e64990e62dde1d96ab11e28dd5
3
+ metadata.gz: 9eb45957df50e7755b070ec1e7167490ab8f9f399699ee5de352552f43b6946f
4
+ data.tar.gz: bc88817b9ba976aa1e4804d5e42feb85fa6d42fdcc74cd029ff8f2272ebf3c90
5
5
  SHA512:
6
- metadata.gz: c9fac2d8adf017f7fcdb109ad1c55f011668c5ec3d2e716d895aaaf38e95d46846b8b7c7a78989e7c8cd40f2ec3a05bf3448d9f9332465757bf7ebe512a55caf
7
- data.tar.gz: 777df84ebe6aa32be0ff508d52138bda2546fa5ce0ba60a00aa255637ae3274e78f89382a7cb7dbc70cbbbf91dee43fa937477c30e48aa88ead22e7ebe96dce9
6
+ metadata.gz: f41484044c660930c2c4754fcff3e97e046da19cb14ffd6e4a1af83055e6e5ebcd9d5ca16ec04a538db0e8fc9b22490951ac37f0b27ecbae1401ab3bd0b068de
7
+ data.tar.gz: fbce285e1a58fb5c91309743fbdff18a01c477d9779e44c07336c62253957cc8a0507316476fa49fffa1696a1187e12cc32e57119df2dfea93ee0c6dddbc9fcf
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.4.4
@@ -141,6 +141,10 @@ module BlockKit
141
141
  plain_text_fields = type.block_class.attribute_types.select { |_, v| v.respond_to?(:block_class) && v.block_class == Composition::PlainText }.keys.map(&:to_sym)
142
142
 
143
143
  define_method(as || attribute) do |args = {}, &block|
144
+ # Convert any args that were passed as attribute aliases to the actual attribute name while keeping
145
+ # the original arg names in case we need to reference them in a later error message.
146
+ attribute_aliases = type.block_class.attribute_aliases
147
+ args = args.transform_keys { |arg| attribute_aliases[arg.to_s] || arg } if attribute_aliases.any?
144
148
  args = args.symbolize_keys
145
149
 
146
150
  # Return the existing attribute if no args or block are passed and we're not in a custom-named method
@@ -161,6 +165,10 @@ module BlockKit
161
165
 
162
166
  mutually_exclusive = mutually_exclusive_fields & args.keys
163
167
  if mutually_exclusive.length > 1
168
+ # This is the only error message that might need to show original arg names
169
+ # based on aliases; missing or unknown fields can't be affected.
170
+ mutually_exclusive = mutually_exclusive.map { |arg| attribute_aliases.key(arg) || arg }
171
+
164
172
  message = "mutually exclusive keywords: #{mutually_exclusive.map(&:inspect).join(", ")}"
165
173
  raise ArgumentError, message
166
174
  end
@@ -4,7 +4,7 @@ require "active_support/core_ext/module/delegation"
4
4
 
5
5
  module BlockKit
6
6
  class Blocks < Base
7
- attribute :blocks, Types::Array.of(Types::Blocks.new(*Layout.all))
7
+ attribute :blocks, Types::Array.of(Types::Blocks.new(*Layout.all)), default: []
8
8
  validates :blocks, "block_kit/validators/associated": true
9
9
  fixes :blocks, associated: true
10
10
 
@@ -22,8 +22,7 @@ module BlockKit
22
22
  delegate_missing_to :blocks
23
23
 
24
24
  def initialize(attributes = {})
25
- attributes = attributes.with_indifferent_access
26
- attributes[:blocks] ||= []
25
+ attributes = {blocks: attributes} if attributes.is_a?(Array)
27
26
 
28
27
  super
29
28
  end
@@ -10,18 +10,19 @@ module BlockKit
10
10
  ON_CHARACTER_ENTERED = "on_character_entered"
11
11
  ].freeze
12
12
 
13
- attribute :trigger_actions_on, Types::Set.of(:string)
13
+ attribute :trigger_actions_on, Types::Set.of(:string), default: []
14
14
  validates :trigger_actions_on, presence: true, "block_kit/validators/array_inclusion": {in: VALID_TRIGGERS}
15
15
  fixes :trigger_actions_on, null_value: {error_types: [:inclusion]}
16
16
 
17
+ alias_attribute :triggers, :trigger_actions_on
18
+
17
19
  VALID_TRIGGERS.each do |value|
18
20
  define_method(:"trigger_actions_on_#{value}?") do
19
21
  !!trigger_actions_on&.member?(value)
20
22
  end
21
23
 
22
24
  define_method(:"trigger_actions_on_#{value}!") do
23
- self.trigger_actions_on ||= []
24
- self.trigger_actions_on.add(value)
25
+ trigger_actions_on.add(value)
25
26
  end
26
27
  end
27
28
 
@@ -29,5 +30,7 @@ module BlockKit
29
30
  super().except(:type).merge(trigger_actions_on: trigger_actions_on&.to_a).compact
30
31
  end
31
32
  end
33
+
34
+ DispatchActionConfiguration = DispatchActionConfig
32
35
  end
33
36
  end
@@ -21,7 +21,7 @@ module BlockKit
21
21
  validate :id_or_url_present
22
22
 
23
23
  def as_json(*)
24
- super().except(:type).merge(id: id, url: url).compact
24
+ {id: id, url: url}.compact
25
25
  end
26
26
 
27
27
  private
@@ -16,6 +16,10 @@ module BlockKit
16
16
  validates :customizable_input_parameters, presence: true, "block_kit/validators/associated": true, allow_nil: true
17
17
  fixes :customizable_input_parameters, null_value: {error_types: [:blank]}
18
18
 
19
+ alias_attribute :input_parameters, :customizable_input_parameters
20
+ alias_attribute :customizable_input_params, :customizable_input_parameters
21
+ alias_attribute :input_params, :customizable_input_parameters
22
+
19
23
  dsl_method :customizable_input_parameters, as: :customizable_input_parameter, required_fields: [:name, :value], yields: false
20
24
 
21
25
  alias_method :input_parameter, :customizable_input_parameter
@@ -5,6 +5,7 @@ module BlockKit
5
5
  autoload :ConfirmationDialog, "block_kit/composition/confirmation_dialog"
6
6
  autoload :ConversationFilter, "block_kit/composition/conversation_filter"
7
7
  autoload :DispatchActionConfig, "block_kit/composition/dispatch_action_config"
8
+ autoload :DispatchActionConfiguration, "block_kit/composition/dispatch_action_config"
8
9
  autoload :InputParameter, "block_kit/composition/input_parameter"
9
10
  autoload :Mrkdwn, "block_kit/composition/mrkdwn"
10
11
  autoload :OptionGroup, "block_kit/composition/option_group"
@@ -10,6 +10,8 @@ module BlockKit
10
10
  validates :confirm, "block_kit/validators/associated": true, allow_nil: true
11
11
  fixes :confirm, associated: true
12
12
 
13
+ alias_attribute :confirmation_dialog, :confirm
14
+
13
15
  dsl_method :confirm, required_fields: [:title, :text, :confirm, :deny], yields: false
14
16
  end
15
17
 
@@ -9,10 +9,13 @@ module BlockKit
9
9
  attribute :default_to_current_conversation, :boolean
10
10
  attribute :filter, Types::Generic.of_type(Composition::ConversationFilter)
11
11
 
12
+ alias_attribute :conversation_filter, :filter
13
+
12
14
  validates :filter, "block_kit/validators/associated": true, allow_nil: true
13
15
  fixes :filter, associated: true
14
16
 
15
17
  dsl_method :filter
18
+ alias_method :conversation_filter, :filter
16
19
  end
17
20
 
18
21
  def as_json(*)
@@ -7,13 +7,13 @@ module BlockKit
7
7
 
8
8
  included do
9
9
  attribute :dispatch_action_config, Types::Generic.of_type(Composition::DispatchActionConfig)
10
+ alias_attribute :dispatch_action_configuration, :dispatch_action_config
10
11
 
11
12
  validates :dispatch_action_config, presence: true, "block_kit/validators/associated": true, allow_nil: true
12
13
  fixes :dispatch_action_config, associated: true
13
14
 
14
15
  dsl_method :dispatch_action_config
15
16
  alias_method :dispatch_action_configuration, :dispatch_action_config
16
- alias_attribute :dispatch_action_configuration, :dispatch_action_config
17
17
  end
18
18
 
19
19
  def as_json(*)
@@ -6,7 +6,7 @@ module BlockKit
6
6
  extend ActiveSupport::Concern
7
7
 
8
8
  included do
9
- attribute :elements, Types::Array.of(Types::Blocks.new(*Layout::RichText::Elements.all))
9
+ attribute :elements, Types::Array.of(Types::Blocks.new(*Layout::RichText::Elements.all)), default: []
10
10
  validates :elements, presence: true, "block_kit/validators/associated": true
11
11
  fixes :elements, associated: true
12
12
 
@@ -16,13 +16,6 @@ module BlockKit
16
16
  dsl_method :elements, as: :emoji, type: Layout::RichText::Elements::Emoji, required_fields: [:name], yields: false
17
17
  end
18
18
 
19
- def initialize(attributes = {})
20
- attributes = attributes.with_indifferent_access
21
- attributes[:elements] ||= []
22
-
23
- super
24
- end
25
-
26
19
  def channel(channel_id:, styles: [])
27
20
  style = if styles.present?
28
21
  styles = Array(styles).map { |s| [s.to_s, true] }.to_h
@@ -5,12 +5,12 @@ module BlockKit
5
5
  module PlainTextEmojiAssignment
6
6
  def self.new(*attributes)
7
7
  Module.new do
8
- define_method(:initialize) do |attrs = {}|
8
+ define_method(:initialize) do |attrs = {}, &block|
9
9
  raise ArgumentError, "expected `attributes' to be a Hash, got #{attrs.class}" unless attrs.is_a?(Hash)
10
10
 
11
11
  emoji = attrs.delete(:emoji)
12
12
 
13
- super(attrs)
13
+ super(attrs, &block)
14
14
 
15
15
  unless emoji.nil?
16
16
  attributes.each do |attribute|
@@ -17,5 +17,7 @@ module BlockKit
17
17
  super.merge(initial_date_time: initial_date_time&.to_i).compact
18
18
  end
19
19
  end
20
+
21
+ Datetimepicker = DatetimePicker
20
22
  end
21
23
  end
@@ -14,6 +14,8 @@ module BlockKit
14
14
  attribute :image_url, :string
15
15
  attribute :slack_file, Types::Generic.of_type(Composition::SlackFile)
16
16
 
17
+ alias_attribute :url, :image_url
18
+
17
19
  validates :alt_text, presence: true, length: {maximum: MAX_ALT_TEXT_LENGTH}
18
20
  fixes :alt_text, truncate: {maximum: MAX_ALT_TEXT_LENGTH}
19
21
 
@@ -9,7 +9,7 @@ module BlockKit
9
9
 
10
10
  include Concerns::Confirmable
11
11
 
12
- attribute :options, Types::Array.of(Composition::OverflowOption)
12
+ attribute :options, Types::Array.of(Composition::OverflowOption), default: []
13
13
  validates :options, presence: true, length: {maximum: MAX_OPTIONS, message: "is too long (maximum is %{count} options)"}, "block_kit/validators/associated": true
14
14
  fixes :options, truncate: {maximum: MAX_OPTIONS, dangerous: true}, associated: true
15
15
 
@@ -39,5 +39,7 @@ module BlockKit
39
39
  end
40
40
  end
41
41
  end
42
+
43
+ Timepicker = TimePicker
42
44
  end
43
45
  end
@@ -14,6 +14,7 @@ module BlockKit
14
14
  autoload :ConversationsSelect, "block_kit/elements/conversations_select"
15
15
  autoload :DatePicker, "block_kit/elements/date_picker"
16
16
  autoload :DatetimePicker, "block_kit/elements/datetime_picker"
17
+ autoload :Datetimepicker, "block_kit/elements/datetime_picker"
17
18
  autoload :EmailTextInput, "block_kit/elements/email_text_input"
18
19
  autoload :ExternalSelect, "block_kit/elements/external_select"
19
20
  autoload :FileInput, "block_kit/elements/file_input"
@@ -29,6 +30,7 @@ module BlockKit
29
30
  autoload :RichTextInput, "block_kit/elements/rich_text_input"
30
31
  autoload :StaticSelect, "block_kit/elements/static_select"
31
32
  autoload :TimePicker, "block_kit/elements/time_picker"
33
+ autoload :Timepicker, "block_kit/elements/time_picker"
32
34
  autoload :URLTextInput, "block_kit/elements/url_text_input"
33
35
  autoload :UsersSelect, "block_kit/elements/users_select"
34
36
  autoload :WorkflowButton, "block_kit/elements/workflow_button"
@@ -28,14 +28,7 @@ module BlockKit
28
28
  Elements::WorkflowButton
29
29
  ]
30
30
 
31
- def initialize(attributes = {})
32
- attributes = attributes.with_indifferent_access
33
- attributes[:elements] ||= []
34
-
35
- super
36
- end
37
-
38
- attribute :elements, Types::Array.of(Types::Blocks.new(*SUPPORTED_ELEMENTS))
31
+ attribute :elements, Types::Array.of(Types::Blocks.new(*SUPPORTED_ELEMENTS)), default: []
39
32
  validates :elements, presence: true, length: {maximum: MAX_ELEMENTS, message: "is too long (maximum is %{count} elements)"}, "block_kit/validators/associated": true
40
33
  fixes :elements, truncate: {maximum: MAX_ELEMENTS, dangerous: true}, associated: true
41
34
 
@@ -12,20 +12,13 @@ module BlockKit
12
12
  Composition::PlainText
13
13
  ].freeze
14
14
 
15
- attribute :elements, Types::Array.of(Types::Blocks.new(*SUPPORTED_ELEMENTS))
15
+ attribute :elements, Types::Array.of(Types::Blocks.new(*SUPPORTED_ELEMENTS)), default: []
16
16
  validates :elements, presence: true, length: {maximum: MAX_ELEMENTS, message: "is too long (maximum is %{count} elements)"}, "block_kit/validators/associated": true
17
17
  fixes :elements, truncate: {maximum: MAX_ELEMENTS, dangerous: true}, associated: true
18
18
 
19
19
  dsl_method :elements, as: :mrkdwn, type: Composition::Mrkdwn, required_fields: [:text], yields: false
20
20
  dsl_method :elements, as: :plain_text, type: Composition::PlainText, required_fields: [:text], yields: false
21
21
 
22
- def initialize(attributes = {})
23
- attributes = attributes.with_indifferent_access
24
- attributes[:elements] ||= []
25
-
26
- super
27
- end
28
-
29
22
  def image(alt_text:, image_url: nil, slack_file: nil)
30
23
  if (image_url.nil? && slack_file.nil?) || (image_url && slack_file)
31
24
  raise ArgumentError, "Must provide either image_url or slack_file, but not both."
@@ -16,6 +16,8 @@ module BlockKit
16
16
  attribute :slack_file, Types::Generic.of_type(Composition::SlackFile)
17
17
  plain_text_attribute :title
18
18
 
19
+ alias_attribute :url, :image_url
20
+
19
21
  include Concerns::PlainTextEmojiAssignment.new(:title)
20
22
 
21
23
  validates :alt_text, presence: true, length: {maximum: MAX_ALT_TEXT_LENGTH}
@@ -8,6 +8,8 @@ module BlockKit
8
8
  attribute :channel_id, :string
9
9
  attribute :style, Types::Generic.of_type(RichText::Elements::MentionStyle)
10
10
 
11
+ alias_attribute :id, :channel_id
12
+
11
13
  validates :channel_id, presence: true
12
14
 
13
15
  def as_json(*)
@@ -8,6 +8,8 @@ module BlockKit
8
8
  attribute :user_id, :string
9
9
  attribute :style, Types::Generic.of_type(RichText::Elements::MentionStyle)
10
10
 
11
+ alias_attribute :id, :user_id
12
+
11
13
  validates :user_id, presence: true
12
14
 
13
15
  def as_json(*)
@@ -8,6 +8,9 @@ module BlockKit
8
8
  attribute :usergroup_id, :string
9
9
  attribute :style, Types::Generic.of_type(RichText::Elements::MentionStyle)
10
10
 
11
+ alias_attribute :user_group_id, :usergroup_id
12
+ alias_attribute :id, :usergroup_id
13
+
11
14
  validates :usergroup_id, presence: true
12
15
 
13
16
  def as_json(*)
@@ -17,5 +20,7 @@ module BlockKit
17
20
  ).compact
18
21
  end
19
22
  end
23
+
24
+ RichText::Elements::UserGroup = RichText::Elements::Usergroup
20
25
  end
21
26
  end
@@ -12,6 +12,7 @@ module BlockKit
12
12
  autoload :Text, "block_kit/layout/rich_text/elements/text"
13
13
  autoload :User, "block_kit/layout/rich_text/elements/user"
14
14
  autoload :Usergroup, "block_kit/layout/rich_text/elements/usergroup"
15
+ autoload :UserGroup, "block_kit/layout/rich_text/elements/usergroup"
15
16
 
16
17
  # Utility blocks
17
18
  autoload :MentionStyle, "block_kit/layout/rich_text/elements/mention_style"
@@ -11,7 +11,7 @@ module BlockKit
11
11
  ].freeze
12
12
 
13
13
  attribute :style, :string
14
- attribute :elements, Types::Array.of(RichText::Section)
14
+ attribute :elements, Types::Array.of(RichText::Section), default: []
15
15
  attribute :indent, :integer
16
16
  attribute :offset, :integer
17
17
  attribute :border, :integer
@@ -18,26 +18,19 @@ module BlockKit
18
18
  RichText::Section
19
19
  ].freeze
20
20
 
21
- attribute :elements, Types::Array.of(Types::Blocks.new(*SUPPORTED_ELEMENTS))
21
+ attribute :elements, Types::Array.of(Types::Blocks.new(*SUPPORTED_ELEMENTS)), default: []
22
22
  validates :elements, presence: true, "block_kit/validators/associated": true
23
23
  fixes :elements, associated: true
24
24
 
25
- dsl_method :elements, as: :list, type: RichText::List
26
- dsl_method :elements, as: :preformatted, type: RichText::Preformatted
27
- dsl_method :elements, as: :quote, type: RichText::Quote
28
- dsl_method :elements, as: :section, type: RichText::Section
25
+ dsl_method :elements, as: :rich_text_list, type: RichText::List
26
+ dsl_method :elements, as: :rich_text_preformatted, type: RichText::Preformatted
27
+ dsl_method :elements, as: :rich_text_quote, type: RichText::Quote
28
+ dsl_method :elements, as: :rich_text_section, type: RichText::Section
29
29
 
30
- alias_method :rich_text_list, :list
31
- alias_method :rich_text_preformatted, :preformatted
32
- alias_method :rich_text_quote, :quote
33
- alias_method :rich_text_section, :section
34
-
35
- def initialize(attributes = {})
36
- attributes = attributes.with_indifferent_access
37
- attributes[:elements] ||= []
38
-
39
- super
40
- end
30
+ alias_method :list, :rich_text_list
31
+ alias_method :preformatted, :rich_text_preformatted
32
+ alias_method :quote, :rich_text_quote
33
+ alias_method :section, :rich_text_section
41
34
 
42
35
  def append(element)
43
36
  elements << element
@@ -24,6 +24,8 @@ module BlockKit
24
24
  attribute :thumbnail_url, :string
25
25
  attribute :video_url, :string
26
26
 
27
+ alias_attribute :url, :video_url
28
+
27
29
  include Concerns::PlainTextEmojiAssignment.new(:description, :title)
28
30
 
29
31
  validates :alt_text, presence: true, length: {maximum: MAX_ALT_TEXT_LENGTH}
@@ -20,7 +20,7 @@ module BlockKit
20
20
  Layout::Video
21
21
  ]
22
22
 
23
- attribute :blocks, Types::Array.of(Types::Blocks.new(*SUPPORTED_BLOCKS))
23
+ attribute :blocks, Types::Array.of(Types::Blocks.new(*SUPPORTED_BLOCKS)), default: []
24
24
  attribute :private_metadata, :string
25
25
  attribute :callback_id, :string
26
26
  attribute :external_id, :string
@@ -28,13 +28,6 @@ module BlockKit
28
28
  Elements::TimePicker,
29
29
  Elements::UsersSelect
30
30
  ].freeze
31
-
32
- def initialize(attributes = {})
33
- attributes = attributes.with_indifferent_access
34
- attributes[:blocks] ||= []
35
-
36
- super
37
- end
38
31
  end
39
32
  end
40
33
  end
@@ -32,7 +32,7 @@ module BlockKit
32
32
  ].freeze
33
33
 
34
34
  attribute :text, :string
35
- attribute :blocks, Types::Array.of(Types::Blocks.new(*Layout.all))
35
+ attribute :blocks, Types::Array.of(Types::Blocks.new(*Layout.all)), default: []
36
36
  attribute :thread_ts, :string
37
37
  attribute :mrkdwn, :boolean
38
38
 
@@ -53,13 +53,6 @@ module BlockKit
53
53
  dsl_method :blocks, as: :section, type: Layout::Section
54
54
  dsl_method :blocks, as: :video, type: Layout::Video, required_fields: [:alt_text, :title, :thumbnail_url, :video_url], yields: false
55
55
 
56
- def initialize(attributes = {})
57
- attributes = attributes.with_indifferent_access
58
- attributes[:blocks] ||= []
59
-
60
- super
61
- end
62
-
63
56
  def image(alt_text:, image_url: nil, slack_file: nil, title: nil, emoji: nil, block_id: nil)
64
57
  if (image_url.nil? && slack_file.nil?) || (image_url && slack_file)
65
58
  raise ArgumentError, "Must provide either image_url or slack_file, but not both."
@@ -54,13 +54,6 @@ module BlockKit
54
54
  fixes :submit, truncate: {maximum: MAX_BUTTON_LENGTH}, null_value: {error_types: [:blank]}
55
55
  fix :add_default_submit_button
56
56
 
57
- def initialize(attributes = {})
58
- attributes = attributes.with_indifferent_access
59
- attributes[:blocks] ||= []
60
-
61
- super
62
- end
63
-
64
57
  def as_json(*)
65
58
  super.merge(
66
59
  title: title&.as_json,
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module BlockKit
4
- VERSION = "1.0.3"
4
+ VERSION = "1.0.5"
5
5
  end
data/lib/block_kit.rb CHANGED
@@ -20,19 +20,19 @@ module BlockKit
20
20
 
21
21
  autoload :VERSION, "block_kit/version"
22
22
 
23
- def self.blocks(&block)
24
- Blocks.new(&block)
23
+ def self.blocks(attributes = {}, &block)
24
+ Blocks.new(attributes, &block)
25
25
  end
26
26
 
27
- def self.home(&block)
28
- Surfaces::Home.new(&block)
27
+ def self.home(attributes = {}, &block)
28
+ Surfaces::Home.new(attributes, &block)
29
29
  end
30
30
 
31
- def self.modal(&block)
32
- Surfaces::Modal.new(&block)
31
+ def self.modal(attributes = {}, &block)
32
+ Surfaces::Modal.new(attributes, &block)
33
33
  end
34
34
 
35
- def self.message(&block)
36
- Surfaces::Message.new(&block)
35
+ def self.message(attributes = {}, &block)
36
+ Surfaces::Message.new(attributes, &block)
37
37
  end
38
38
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: block-kit
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - David Celis
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-04-24 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: activemodel
@@ -46,6 +46,7 @@ extensions: []
46
46
  extra_rdoc_files: []
47
47
  files:
48
48
  - ".rspec"
49
+ - ".tool-versions"
49
50
  - CODE_OF_CONDUCT.md
50
51
  - LICENSE.txt
51
52
  - README.md
@@ -184,7 +185,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
184
185
  - !ruby/object:Gem::Version
185
186
  version: '0'
186
187
  requirements: []
187
- rubygems_version: 3.6.6
188
+ rubygems_version: 3.6.7
188
189
  specification_version: 4
189
190
  summary: A powerful DSL-based library for Slack's Block Kit framework.
190
191
  test_files: []