Class: BlockKit::Surfaces::Message

Inherits:
Base
  • Object
show all
Defined in:
lib/block_kit/surfaces/message.rb

Constant Summary collapse

MAX_BLOCKS =
50
SUPPORTED_ELEMENTS =
[
  Elements::Button,
  Elements::ChannelsSelect,
  Elements::Checkboxes,
  Elements::ConversationsSelect,
  Elements::DatePicker,
  Elements::DatetimePicker,
  Elements::ExternalSelect,
  Elements::Image,
  Elements::MultiChannelsSelect,
  Elements::MultiConversationsSelect,
  Elements::MultiExternalSelect,
  Elements::MultiStaticSelect,
  Elements::MultiUsersSelect,
  Elements::Overflow,
  Elements::PlainTextInput,
  Elements::RadioButtons,
  Elements::StaticSelect,
  Elements::TimePicker,
  Elements::UsersSelect,
  Elements::WorkflowButton
].freeze

Instance Method Summary collapse

Methods inherited from Base

#==, fix, #fix_validation_errors, #fix_validation_errors!, fixes, inherited, inspect, #inspect, #pretty_print, #to_json

Constructor Details

#initialize(attributes = {}) ⇒ Message

Returns a new instance of Message.



56
57
58
59
60
61
# File 'lib/block_kit/surfaces/message.rb', line 56

def initialize(attributes = {})
  attributes = attributes.with_indifferent_access
  attributes[:blocks] ||= []

  super
end

Instance Method Details

#append(block) ⇒ Object

Overridden to return ‘self`, allowing chaining.



72
73
74
75
76
# File 'lib/block_kit/surfaces/message.rb', line 72

def append(block)
  blocks << block

  self
end

#as_jsonObject



78
79
80
81
82
83
84
85
# File 'lib/block_kit/surfaces/message.rb', line 78

def as_json(*)
  super().except(:type).merge(
    text: text,
    blocks: blocks&.map(&:as_json),
    thread_ts: thread_ts,
    mrkdwn: mrkdwn
  ).compact
end

#image(alt_text:, image_url: nil, slack_file: nil, title: nil, emoji: nil, block_id: nil) ⇒ Object



63
64
65
66
67
68
69
# File 'lib/block_kit/surfaces/message.rb', line 63

def image(alt_text:, image_url: nil, slack_file: nil, title: nil, emoji: nil, block_id: nil)
  if (image_url.nil? && slack_file.nil?) || (image_url && slack_file)
    raise ArgumentError, "Must provide either image_url or slack_file, but not both."
  end

  append(Layout::Image.new(image_url: image_url, slack_file: slack_file, alt_text: alt_text, title: title, block_id: block_id, emoji: emoji))
end