Class: CrudComponents::Fields::StringField

Inherits:
Base
  • Object
show all
Defined in:
lib/crud_components/fields/string_field.rb

Overview

string column: text cell, text input, escaped case-insensitive contains.

Direct Known Subclasses

TextField

Constant Summary collapse

URL_NAMES =

Name-gated smart renderers: a column literally named ‘email` (or `*_email`) renders as a `mailto:` link; one named `url`, `website`, `link` or `homepage` renders an http(s) value as a link. Gated on the column name, never the value — a column that merely happens to hold a URL or an “@” is left alone, so the behaviour is predictable and you can’t accidentally turn arbitrary text into links. ‘as:` overrides (opt out, or force a renderer).

%w[url website link homepage].freeze

Constants inherited from Base

Base::NON_EDITABLE_COLUMNS

Instance Attribute Summary

Attributes inherited from Base

#facets, #model, #name, #options

Instance Method Summary collapse

Methods inherited from Base

#apply_filter, #apply_filter_facet, #apply_sort, #column, #custom_header?, #declared_preloads, #derived_filter_control, #eager_load, #editable?, #editable_permitted?, #filter_choices, #filter_control, #filter_facet, #filter_includes_null?, #filterable?, #form_partial, #group_label, #group_model, #header, #header_actions, #human_name, #initialize, #nullable?, #permit_param, #permitted?, #picker_label, #range_filter?, #render_block, #renderer, #renderer_options, #sort_facet, #sortable?, #value

Constructor Details

This class inherits a constructor from CrudComponents::Fields::Base

Instance Method Details

#apply_derived_filter(scope, exact: nil) ⇒ Object



33
34
35
36
37
38
# File 'lib/crud_components/fields/string_field.rb', line 33

def apply_derived_filter(scope, exact: nil, **)
  return scope unless exact

  # explicit escape char: backslash is not SQLite's default
  scope.where(arel_column.matches(like_pattern(exact), '\\'))
end

#default_editable?Boolean

Returns:

  • (Boolean)


30
# File 'lib/crud_components/fields/string_field.rb', line 30

def default_editable? = !NON_EDITABLE_COLUMNS.include?(name.to_s)

#default_rendererObject

A column named email / url / website / link gets the matching smart renderer by default (a mailto: / http link). ‘as:` still overrides.



15
# File 'lib/crud_components/fields/string_field.rb', line 15

def default_renderer = smart_renderer || :string

#derived_filterable?Boolean

Returns:

  • (Boolean)


28
# File 'lib/crud_components/fields/string_field.rb', line 28

def derived_filterable? = true

#derived_sortable?Boolean

Returns:

  • (Boolean)


29
# File 'lib/crud_components/fields/string_field.rb', line 29

def derived_sortable? = true

#form_controlObject



31
# File 'lib/crud_components/fields/string_field.rb', line 31

def form_control = :string

#smart_rendererObject

The renderer the column name implies (:email / :url), or nil for none. Public so a path column (publisher.email, authors.email) can reuse the same name rules by delegating to this field rather than duplicating them.



20
21
22
23
24
25
26
# File 'lib/crud_components/fields/string_field.rb', line 20

def smart_renderer
  n = name.to_s
  return :email if n == 'email' || n.end_with?('_email')
  return :url if URL_NAMES.include?(n)

  nil
end