Class: RubyUIAdmin::Fields::BooleanGroupField

Inherits:
BaseField
  • Object
show all
Defined in:
lib/ruby_ui_admin/fields/boolean_group_field.rb

Overview

A group of checkboxes whose value is a Hash of { key => boolean }. field :feature_flags, as: :boolean_group, options: { "beta" => "Beta", "pro" => "Pro" }

Instance Attribute Summary

Attributes inherited from BaseField

#block, #id, #options, #resource

Instance Method Summary collapse

Methods inherited from BaseField

#database_id, #default_value, #description, field_type, #fill, #filterable?, #formatted_value, #has_default?, #help, #initialize, #link_to_record?, #name, #permit_params, #permitted_param, #placeholder, #readonly?, register_as, #required?, #sort_lambda, #sortable?, #type, #value, #visible?, #visible_in_view?

Constructor Details

This class inherits a constructor from RubyUIAdmin::Fields::BaseField

Instance Method Details

#checked?(record, key) ⇒ Boolean

Returns:

  • (Boolean)


22
23
24
25
26
27
# File 'lib/ruby_ui_admin/fields/boolean_group_field.rb', line 22

def checked?(record, key)
  value = value(record)
  return false unless value.respond_to?(:[])

  truthy?(value[key.to_s].nil? ? value[key.to_sym] : value[key.to_s])
end

#default_hidden_viewsObject



10
11
12
# File 'lib/ruby_ui_admin/fields/boolean_group_field.rb', line 10

def default_hidden_views
  %i[index]
end

#enabled_labels(record) ⇒ Object



29
30
31
# File 'lib/ruby_ui_admin/fields/boolean_group_field.rb', line 29

def enabled_labels(record)
  group_options.select { |key, _label| checked?(record, key) }.values
end

#fill_value(record, submitted) ⇒ Object

Build the full { key => bool } hash from the submitted (checked-only) params.



39
40
41
42
43
44
45
# File 'lib/ruby_ui_admin/fields/boolean_group_field.rb', line 39

def fill_value(record, )
   ||= {}
  result = group_options.keys.to_h { |key| [key, truthy?([key])] }

  setter = "#{database_id}="
  record.public_send(setter, result) if record.respond_to?(setter)
end

#group_optionsObject

{ key => label }. options: may be a Hash, an Array of keys, or a lambda.



15
16
17
18
19
20
# File 'lib/ruby_ui_admin/fields/boolean_group_field.rb', line 15

def group_options
  raw = options[:options] || {}
  raw = ExecutionContext.new(target: raw, resource: resource).handle if raw.respond_to?(:call)

  raw.is_a?(Hash) ? raw.transform_keys(&:to_s) : Array(raw).to_h { |key| [key.to_s, key.to_s.humanize] }
end

#permit_paramObject

Hash param: permit arbitrary nested keys.



34
35
36
# File 'lib/ruby_ui_admin/fields/boolean_group_field.rb', line 34

def permit_param
  {permitted_param => {}}
end