Module: RDBr::Web::PresentationHelpers
- Included in:
- Helpers
- Defined in:
- lib/rdbr/web/presentation_helpers.rb
Instance Method Summary collapse
- #filterable_column?(relation, column) ⇒ Boolean
- #foreign_record_url(namespace, relation, column, row) ⇒ Object
- #record_label(relation, row, exclude: []) ⇒ Object
- #render_table_value(relation, column, value) ⇒ Object
- #render_value(value, compact: false) ⇒ Object
Instance Method Details
#filterable_column?(relation, column) ⇒ Boolean
19 20 21 |
# File 'lib/rdbr/web/presentation_helpers.rb', line 19 def filterable_column?(relation, column) !relation.uniquely_constrained_column?(column.name) end |
#foreign_record_url(namespace, relation, column, row) ⇒ Object
28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/rdbr/web/presentation_helpers.rb', line 28 def foreign_record_url(namespace, relation, column, row) = (column, row[column.name]) return () if foreign_key = relation.foreign_keys.find{|key| key.columns.include?(column.name) } return unless foreign_key target_namespace, target = foreign_target(namespace, foreign_key) return unless navigable_foreign_key?(target, foreign_key) key = foreign_key.referenced_columns.zip(foreign_key.columns.map{|name| row[name] }).to_h return if key.values.any?(&:nil?) record_url(target_namespace.name, target.name, key, target.primary_key) end |
#record_label(relation, row, exclude: []) ⇒ Object
23 24 25 26 |
# File 'lib/rdbr/web/presentation_helpers.rb', line 23 def record_label(relation, row, exclude: []) label = record_identity(relation).label(row, exclude: exclude) display_text(label, limit: 100) end |
#render_table_value(relation, column, value) ⇒ Object
4 5 6 7 8 9 10 11 12 13 14 15 16 17 |
# File 'lib/rdbr/web/presentation_helpers.rb', line 4 def render_table_value(relation, column, value) return render_temporal_filter(column, value) if temporal_column?(column) && !value.nil? = (column, value) deferred = deferred_table_value(column, value) unless return deferred if deferred rendered = ? () : render_column_value(column, value, compact: true) return rendered unless filterable_column?(relation, column) && directly_filterable?(column, value) title = "Filter #{column.name} by this value" href = Rack::Utils.escape_html(add_filter_url(column, value)) %(<a class="value-filter" href="#{href}" title="#{Rack::Utils.escape_html(title)}">#{rendered}</a>) end |
#render_value(value, compact: false) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/rdbr/web/presentation_helpers.rb', line 44 def render_value(value, compact: false) return '<span class="null">NULL</span>' if value.nil? return render_structured(value, compact: compact) if value.is_a?(Array) || value.is_a?(Hash) text = display_value(value) text = "#{text.slice(0, 160)}…" if compact && text.length > 160 css_class = text.empty? ? 'empty' : value_class(value) %(<span class="#{css_class}">#{Rack::Utils.escape_html(text)}</span>) end |