Module: BlockKit

Defined in:
lib/block_kit/validators/array_inclusion_validator.rb,
lib/block_kit.rb,
lib/block_kit/base.rb,
lib/block_kit/types.rb,
lib/block_kit/blocks.rb,
lib/block_kit/fixers.rb,
lib/block_kit/layout.rb,
lib/block_kit/version.rb,
lib/block_kit/concerns.rb,
lib/block_kit/elements.rb,
lib/block_kit/surfaces.rb,
lib/block_kit/typed_set.rb,
lib/block_kit/types/set.rb,
lib/block_kit/types/text.rb,
lib/block_kit/validators.rb,
lib/block_kit/composition.rb,
lib/block_kit/fixers/base.rb,
lib/block_kit/layout/base.rb,
lib/block_kit/layout/file.rb,
lib/block_kit/typed_array.rb,
lib/block_kit/types/array.rb,
lib/block_kit/layout/image.rb,
lib/block_kit/layout/input.rb,
lib/block_kit/layout/video.rb,
lib/block_kit/types/blocks.rb,
lib/block_kit/types/option.rb,
lib/block_kit/configuration.rb,
lib/block_kit/elements/base.rb,
lib/block_kit/layout/header.rb,
lib/block_kit/surfaces/base.rb,
lib/block_kit/surfaces/home.rb,
lib/block_kit/types/generic.rb,
lib/block_kit/elements/image.rb,
lib/block_kit/layout/actions.rb,
lib/block_kit/layout/context.rb,
lib/block_kit/layout/divider.rb,
lib/block_kit/layout/section.rb,
lib/block_kit/surfaces/modal.rb,
lib/block_kit/elements/button.rb,
lib/block_kit/elements/select.rb,
lib/block_kit/fixers/truncate.rb,
lib/block_kit/layout/markdown.rb,
lib/block_kit/composition/text.rb,
lib/block_kit/layout/rich_text.rb,
lib/block_kit/surfaces/message.rb,
lib/block_kit/concerns/external.rb,
lib/block_kit/elements/overflow.rb,
lib/block_kit/fixers/associated.rb,
lib/block_kit/fixers/null_value.rb,
lib/block_kit/composition/mrkdwn.rb,
lib/block_kit/composition/option.rb,
lib/block_kit/composition/trigger.rb,
lib/block_kit/elements/checkboxes.rb,
lib/block_kit/elements/file_input.rb,
lib/block_kit/composition/workflow.rb,
lib/block_kit/concerns/confirmable.rb,
lib/block_kit/concerns/has_options.rb,
lib/block_kit/elements/base_button.rb,
lib/block_kit/elements/date_picker.rb,
lib/block_kit/elements/time_picker.rb,
lib/block_kit/concerns/dispatchable.rb,
lib/block_kit/elements/multi_select.rb,
lib/block_kit/elements/number_input.rb,
lib/block_kit/elements/users_select.rb,
lib/block_kit/layout/rich_text/list.rb,
lib/block_kit/composition/plain_text.rb,
lib/block_kit/composition/slack_file.rb,
lib/block_kit/elements/radio_buttons.rb,
lib/block_kit/elements/static_select.rb,
lib/block_kit/layout/rich_text/quote.rb,
lib/block_kit/elements/url_text_input.rb,
lib/block_kit/composition/option_group.rb,
lib/block_kit/concerns/has_placeholder.rb,
lib/block_kit/elements/channels_select.rb,
lib/block_kit/elements/datetime_picker.rb,
lib/block_kit/elements/external_select.rb,
lib/block_kit/elements/rich_text_input.rb,
lib/block_kit/elements/workflow_button.rb,
lib/block_kit/layout/rich_text/section.rb,
lib/block_kit/elements/email_text_input.rb,
lib/block_kit/elements/plain_text_input.rb,
lib/block_kit/layout/rich_text/elements.rb,
lib/block_kit/concerns/focusable_on_load.rb,
lib/block_kit/concerns/has_option_groups.rb,
lib/block_kit/composition/input_parameter.rb,
lib/block_kit/composition/overflow_option.rb,
lib/block_kit/concerns/has_initial_option.rb,
lib/block_kit/elements/multi_users_select.rb,
lib/block_kit/concerns/has_initial_options.rb,
lib/block_kit/elements/multi_static_select.rb,
lib/block_kit/elements/conversations_select.rb,
lib/block_kit/layout/rich_text/preformatted.rb,
lib/block_kit/elements/multi_channels_select.rb,
lib/block_kit/elements/multi_external_select.rb,
lib/block_kit/layout/rich_text/elements/date.rb,
lib/block_kit/layout/rich_text/elements/link.rb,
lib/block_kit/layout/rich_text/elements/text.rb,
lib/block_kit/layout/rich_text/elements/user.rb,
lib/block_kit/composition/confirmation_dialog.rb,
lib/block_kit/composition/conversation_filter.rb,
lib/block_kit/concerns/conversation_selection.rb,
lib/block_kit/concerns/has_rich_text_elements.rb,
lib/block_kit/layout/rich_text/elements/color.rb,
lib/block_kit/layout/rich_text/elements/emoji.rb,
lib/block_kit/validators/associated_validator.rb,
lib/block_kit/layout/rich_text/elements/channel.rb,
lib/block_kit/composition/dispatch_action_config.rb,
lib/block_kit/elements/multi_conversations_select.rb,
lib/block_kit/layout/rich_text/elements/broadcast.rb,
lib/block_kit/layout/rich_text/elements/usergroup.rb,
lib/block_kit/concerns/plain_text_emoji_assignment.rb,
lib/block_kit/layout/rich_text/elements/text_style.rb,
lib/block_kit/layout/rich_text/elements/mention_style.rb

Overview

Source: https://github.com/sciencehistory/kithe/blob/master/app/validators/array_inclusion_validator.rb

Like the default Rails inclusion validator, but the built-in Rails validator won't work on an array of things.

So if you have an array of primitive values, you can use this to validate that all elements of the array are in the inclusion list.

Or that all the elements of the array are whatever you want, by supplying a proc that returns false for bad values.

Empty arrays are always allowed, add a presence validator if you don't want to allow them, eg validates :genre, presence: true, array_inclusion: { in: whatever }

Custom message can interpolate rejected_values value. (Should also work for i18n)

Note: There isn't currently a great way to show primitive array validation errors on a form for an invalid edit, the validation error can only be shown as if for the entire array field, not the individual invalid edit. You might consider modelling as a compound Model with only one attribute instead of as a primitive.

Examples:

class Work < Kithe::Work
  attr_json :genre, :string, array: true
  validates :genre, array_inclusion: { in: ALLOWED_GENRES  }
  validates :genre, array_inclusion: { proc: ->(val) { val =~ /\d+/ } }
  #...
validates :genre, array_inclusion: { in: ALLOWED_GENRES, message: "option %{rejected_values} not allowed"  }

Defined Under Namespace

Modules: Composition, Concerns, Elements, Fixers, Layout, Surfaces, Types, Validators Classes: Base, Blocks, Configuration, TypedArray, TypedSet

Constant Summary collapse

VERSION =
"1.0.7"

Class Method Summary collapse

Class Method Details

.blocks(attributes = {}, &block) ⇒ Object



34
35
36
# File 'lib/block_kit.rb', line 34

def self.blocks(attributes = {}, &block)
  Blocks.new(attributes, &block)
end

.configure {|configuration| ... } ⇒ Object

Yields:

  • (configuration)

Raises:

  • (ArgumentError)


28
29
30
31
32
# File 'lib/block_kit.rb', line 28

def self.configure(&block)
  raise ArgumentError, "BlockKit.configure requires a block" unless block_given?

  yield(configuration)
end

.home(attributes = {}, &block) ⇒ Object



38
39
40
# File 'lib/block_kit.rb', line 38

def self.home(attributes = {}, &block)
  Surfaces::Home.new(attributes, &block)
end

.message(attributes = {}, &block) ⇒ Object



46
47
48
# File 'lib/block_kit.rb', line 46

def self.message(attributes = {}, &block)
  Surfaces::Message.new(attributes, &block)
end


42
43
44
# File 'lib/block_kit.rb', line 42

def self.modal(attributes = {}, &block)
  Surfaces::Modal.new(attributes, &block)
end