Class: CrudComponents::Fields::StringField
- Defined in:
- lib/crud_components/fields/string_field.rb
Overview
string column: text cell, text input, escaped case-insensitive contains.
Direct Known Subclasses
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
Instance Attribute Summary
Attributes inherited from Base
#facets, #model, #name, #options
Instance Method Summary collapse
- #apply_derived_filter(scope, exact: nil) ⇒ Object
- #default_editable? ⇒ Boolean
-
#default_renderer ⇒ Object
A column named email / url / website / link gets the matching smart renderer by default (a mailto: / http link).
- #derived_filterable? ⇒ Boolean
- #derived_sortable? ⇒ Boolean
- #form_control ⇒ Object
-
#smart_renderer ⇒ Object
The renderer the column name implies (:email / :url), or nil for none.
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
30 |
# File 'lib/crud_components/fields/string_field.rb', line 30 def default_editable? = !NON_EDITABLE_COLUMNS.include?(name.to_s) |
#default_renderer ⇒ Object
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
28 |
# File 'lib/crud_components/fields/string_field.rb', line 28 def derived_filterable? = true |
#derived_sortable? ⇒ Boolean
29 |
# File 'lib/crud_components/fields/string_field.rb', line 29 def derived_sortable? = true |
#form_control ⇒ Object
31 |
# File 'lib/crud_components/fields/string_field.rb', line 31 def form_control = :string |
#smart_renderer ⇒ Object
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 |