Module: RDBr::Web::PresentationHelpers

Included in:
Helpers
Defined in:
lib/rdbr/web/presentation_helpers.rb

Instance Method Summary collapse

Instance Method Details

#filterable_column?(relation, column) ⇒ Boolean

Returns:

  • (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)
  related = related_value_for(column, row[column.name])
  return related_value_url(related) if related

  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?

  related = related_value_for(column, value)
  deferred = deferred_table_value(column, value) unless related
  return deferred if deferred

  rendered = related ? render_related_value(related) : 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