Module: BulmaPhlex::Rails::DisplayableBlockOptions

Included in:
DisplayableFormFields
Defined in:
lib/bulma_phlex/rails/concerns/displayable_block_options.rb

Overview

# Displayable Block Options

This concern provides methods to manage display options for Bulma Phlex components, specifically for displayable blocks such as read-only form fields. It allows options to be set for groups of fields, enabling consistent styling and layout.

#### Included Methods

  • ‘with_options` - Wrap a block with specific options for displayable fields.

  • ‘in_columns` - Wrap a block to display fields in Bulma columns.

  • ‘in_grid` - Wrap a block to display fields in a Bulma grid.

Instance Method Summary collapse

Instance Method Details

#block_display_optionsObject

Retrieve the current block display options.



47
48
49
# File 'lib/bulma_phlex/rails/concerns/displayable_block_options.rb', line 47

def block_display_options
  @_block_display_options&.current || {}
end

#in_columns(options = true) ⇒ Object

Wrap a block to display fields in Bulma columns. This adds a columns container and sets the ‘column: true` option for any `show_` fields within the block.

This is a shorthand for ‘with_options(column: true) do`.



55
56
57
# File 'lib/bulma_phlex/rails/concerns/displayable_block_options.rb', line 55

def in_columns(options = true, &) # rubocop:disable Style/OptionalBooleanParameter
  with_options(columns: options, &)
end

#in_grid(options = true) ⇒ Object

Wrap a block to display fields in a Bulma grid. This adds a grid container and sets the ‘grid: true` option for any `show_` fields within the block.

You can optionally pass in any [Grid options](github.com/RockSolt/bulma-phlex#grid) as a hash.



63
64
65
# File 'lib/bulma_phlex/rails/concerns/displayable_block_options.rb', line 63

def in_grid(options = true, &) # rubocop:disable Style/OptionalBooleanParameter
  with_options(grid: options, &)
end

#with_options(**block_options) ⇒ Object

Wrap a block with specific options for displayable fields. This allows redundant options to be specified once for multiple fields. These options are merged with any options passed directly to the individual field methods.

If the ‘:columns` or `:grid` option is provided, the block will be wrapped in a Bulma `columns` or `grid` container, respectively.

Blocks can be nested, with inner block options overriding outer block options.

#### Example

with_options(model: @user, column: true) do
  show_text(:username)
  show_date(birthdate, format: :short)
end


32
33
34
35
36
37
38
39
40
41
42
43
44
# File 'lib/bulma_phlex/rails/concerns/displayable_block_options.rb', line 32

def with_options(**block_options, &)
  (@_block_display_options ||= BlockDisplayOptions.new).push(block_options)

  if @_block_display_options.column?
    render BulmaPhlex::Columns.new(**@_block_display_options.column_options, &)
  elsif @_block_display_options.grid?
    render BulmaPhlex::Grid.new(**@_block_display_options.grid_options, &)
  else
    yield
  end

  @_block_display_options.pop
end