Module: SlackValidBlockKit::Validator::Element

Included in:
Runner
Defined in:
lib/slack_valid_block_kit/validator/element.rb

Constant Summary collapse

BUTTON_PROPERTIES =
i(type text action_id url value style confirm accessibility_label)
CHECKBOXES_PROPERTIES =
i(type action_id options initial_options confirm focus_on_load)
DATEPICKER_PROPERTIES =
i(type action_id placeholder initial_date confirm focus_on_load)
IMAGE_PROPERTIES =
i(type image_url alt_text)
OVERFLOW_PROPERTIES =
i(type action_id options confirm)
PLAIN_TEXT_INPUT_PROPERTIES =
i(type action_id placeholder initial_value multiline min_length max_length dispatch_action_config focus_on_load)
RADIO_BUTTONS_PROPERTIES =
i(type action_id options initial_option confirm focus_on_load)
TIMEPICKER_PROPERTIES =
i(type action_id placeholder initial_time confirm focus_on_load)

Instance Method Summary collapse

Instance Method Details

#validate_button(hash, path, options = nil) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
# File 'lib/slack_valid_block_kit/validator/element.rb', line 13

def validate_button(hash, path, options = nil)
  validate_for_properties(hash, path, BUTTON_PROPERTIES)
  validate_for(hash[:type], "#{path}.type", String, true, only: ["button"])
  validate_for_plain_text(hash[:text], "#{path}.text", true, 75)
  validate_for_action_id(hash[:action_id], "#{path}.action_id")
  validate_for(hash[:url], "#{path}.url", String, false, max: 3000)
  validate_for(hash[:value], "#{path}.value", String, false, max: 2000)
  validate_for(hash[:style], "#{path}.style", String, false, only: %w(primary danger))
  validate_for(hash[:confirm], "#{path}.confirm", Hash, false)
  validate_confirmation(hash[:confirm], "#{path}.confirm") unless hash[:confirm].nil?
  validate_for(hash[:accessibility_label], "#{path}.accessibility_label", String, false, max: 75)
end

#validate_checkboxes(hash, path, options = nil) ⇒ Object



26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/slack_valid_block_kit/validator/element.rb', line 26

def validate_checkboxes(hash, path, options = nil)
  validate_for_properties(hash, path, CHECKBOXES_PROPERTIES)
  validate_for(hash[:type], "#{path}.type", String, true, only: ["checkboxes"])

  validate_for(hash[:options], "#{path}.options", Array, true, max: 10)
  options = Array(hash[:options])
  options.each_with_index do |e, i|
    validate_option(e, "#{path}.options[#{i}]", { text_type: :text_objects })
  end
  validate_for(hash[:initial_options], "#{path}.initial_options", Array, false, max: options.size, only: options)

  validate_common_for_input(hash, path, options)
end

#validate_datepicker(hash, path, options = nil) ⇒ Object



40
41
42
43
44
45
46
47
48
49
50
51
52
# File 'lib/slack_valid_block_kit/validator/element.rb', line 40

def validate_datepicker(hash, path, options = nil)
  validate_for_properties(hash, path, DATEPICKER_PROPERTIES)
  validate_for(hash[:type], "#{path}.type", String, true, only: ["datepicker"])

  validate_for_plain_text(hash[:placeholder], "#{path}.placeholder", false, 150)
  validate_for(hash[:initial_date], "#{path}.initial_date", String, false)

  if hash[:initial_date].is_a?(String) && !hash[:initial_date] =~ /^\d{4}-(0[1-9]|1[0-2])-(0[1-9]|[1-2]\d|3[0-1])$/
    add_error("#{path}.initial_date", :invalid_format)
  end

  validate_common_for_input(hash, path, options)
end

#validate_image(hash, path, options = nil) ⇒ Object



54
55
56
57
58
59
60
# File 'lib/slack_valid_block_kit/validator/element.rb', line 54

def validate_image(hash, path, options = nil)
  validate_for_properties(hash, path, IMAGE_PROPERTIES)
  validate_for(hash[:type], "#{path}.type", String, true, only: ["image"])

  validate_for(hash[:image_url], "#{path}.image_url", String, true)
  validate_for(hash[:alt_text], "#{path}.alt_text", String, true)
end

#validate_overflow(hash, path, options = nil) ⇒ Object



62
63
64
65
66
67
68
69
70
71
72
73
74
75
# File 'lib/slack_valid_block_kit/validator/element.rb', line 62

def validate_overflow(hash, path, options = nil)
  validate_for_properties(hash, path, OVERFLOW_PROPERTIES)
  validate_for(hash[:type], "#{path}.type", String, true, only: ["overflow"])
  validate_for_action_id(hash[:action_id], "#{path}.action_id")

  validate_for(hash[:options], "#{path}.options", Array, true, max: 5, min: 2)
  options = Array(hash[:options])
  options.each_with_index do |e, i|
    validate_option(e, "#{path}.options[#{i}]", { text_type: :text_objects })
  end

  validate_for(hash[:confirm], "#{path}.confirm", Hash, false)
  validate_confirmation(hash[:confirm], "#{path}.confirm") unless hash[:confirm].nil?
end

#validate_plain_text_input(hash, path, options = nil) ⇒ Object



77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
# File 'lib/slack_valid_block_kit/validator/element.rb', line 77

def validate_plain_text_input(hash, path, options = nil)
  validate_for_properties(hash, path, PLAIN_TEXT_INPUT_PROPERTIES)
  validate_for(hash[:type], "#{path}.type", String, true, only: ["plain_text_input"])
  validate_for_action_id(hash[:action_id], "#{path}.action_id")
  validate_for_plain_text(hash[:placeholder], "#{path}.placeholder", false, 150)
  validate_for(hash[:initial_value], "#{path}.initial_value", String, false)
  validate_for(hash[:multiline], "#{path}.multiline", :bool, false)
  validate_for(hash[:min_length], "#{path}.min_length", Integer, false, max: 3000)
  validate_for(hash[:max_length], "#{path}.max_length", Integer, false)

  validate_for(hash[:dispatch_action_config], "#{path}.dispatch_action_config", Hash, false)
  validate_dispatch_action_config(hash[:dispatch_action_config], "#{path}.dispatch_action_config") unless hash[:dispatch_action_config].nil?

  validate_for_focus_on_load(hash[:focus_on_load], "#{path}.focus_on_load")
end

#validate_radio_buttons(hash, path, options = nil) ⇒ Object



93
94
95
96
97
98
99
100
101
102
103
104
105
# File 'lib/slack_valid_block_kit/validator/element.rb', line 93

def validate_radio_buttons(hash, path, options = nil)
  validate_for_properties(hash, path, RADIO_BUTTONS_PROPERTIES)
  validate_for(hash[:type], "#{path}.type", String, true, only: ["radio_buttons"])

  validate_for(hash[:options], "#{path}.options", Array, true, max: 10)
  options = Array(hash[:options])
  options.each_with_index do |e, i|
    validate_option(e, "#{path}.options[#{i}]", { text_type: :text_objects })
  end
  validate_for(hash[:initial_options], "#{path}.initial_options", Array, false, max: options.size, only: options)

  validate_common_for_input(hash, path, options)
end

#validate_timepicker(hash, path, options = nil) ⇒ Object



107
108
109
110
111
112
113
114
115
116
117
118
# File 'lib/slack_valid_block_kit/validator/element.rb', line 107

def validate_timepicker(hash, path, options = nil)
  validate_for_properties(hash, path, TIMEPICKER_PROPERTIES)
  validate_for(hash[:type], "#{path}.type", String, true, only: ["timepicker"])

  validate_for_plain_text(hash[:placeholder], "#{path}.placeholder", false, 150)
  validate_for(hash[:initial_time], "#{path}.initial_time", String, false)
  if hash[:initial_time].is_a?(String) && !hash[:initial_time] =~ /^(0\d|1[0-2])-[0-5]\d$/
    add_error("#{path}.initial_time", :invalid_format)
  end

  validate_common_for_input(hash, path, options)
end