Module: Labimotion::ExporterHelpers
- Defined in:
- lib/labimotion/helpers/exporter_helpers.rb
Overview
ExporterHelpers provides utility methods for formatting and processing export data
Constant Summary collapse
- CONST_UNNAMED =
Constants
'(Unnamed)'
Instance Method Summary collapse
-
#expandable_field?(field_type) ⇒ Boolean
Check if field type should be expanded (DRAG_SAMPLE or DRAG_MOLECULE).
-
#extract_value_system(sub_val, sub_field) ⇒ Object
Extract value_system from sub_val or sub_field.
-
#find_unit_by_key(option_layers, value_system) ⇒ Object
Find unit label by field and key.
-
#find_unit_label(sub_val, sub_field) ⇒ Object
Find unit label for system-defined field.
-
#format_default_cell(sub_val, sub_field) ⇒ Object
Format default cell.
-
#format_drag_field_cell(sub_val, sub_field) ⇒ Object
Format drag field cell (DRAG_SAMPLE or DRAG_MOLECULE), returns hyperlink or label.
-
#format_expanded_cell(sub_val, exp_field) ⇒ Object
Format expanded cell for DRAG_SAMPLE or DRAG_MOLECULE with sub-headers.
-
#format_select_cell(sub_val, sub_field) ⇒ Object
Format select cell.
-
#format_system_defined_cell(sub_val, sub_field) ⇒ Object
Format system-defined cell with unit.
-
#format_table_cell(sub_val, sub_field) ⇒ Object
Format table cell value based on field type.
-
#generate_filename(element_name, segment_name, layer_name, field_name) ⇒ Object
Generate sanitized filename for export.
-
#map_sub_header_to_property(sub_header) ⇒ Object
Map sub-header to property key.
-
#normalize_column_name(col_name) ⇒ Object
Normalize column name, returns CONST_UNNAMED for blank values.
Instance Method Details
#expandable_field?(field_type) ⇒ Boolean
Check if field type should be expanded (DRAG_SAMPLE or DRAG_MOLECULE)
17 18 19 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 17 def (field_type) [Labimotion::FieldType::DRAG_SAMPLE, Labimotion::FieldType::DRAG_MOLECULE].include?(field_type) end |
#extract_value_system(sub_val, sub_field) ⇒ Object
Extract value_system from sub_val or sub_field
118 119 120 121 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 118 def extract_value_system(sub_val, sub_field) field_data = sub_val[sub_field['id']] field_data.is_a?(Hash) ? field_data['value_system'] : sub_field['value_system'] end |
#find_unit_by_key(option_layers, value_system) ⇒ Object
Find unit label by field and key
124 125 126 127 128 129 130 131 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 124 def find_unit_by_key(option_layers, value_system) field_config = Labimotion::Units::FIELDS.find { |o| o[:field] == option_layers } return '' unless field_config units = field_config.fetch(:units, []) unit = units.find { |u| u[:key] == value_system } unit ? unit.fetch(:label, '') : '' end |
#find_unit_label(sub_val, sub_field) ⇒ Object
Find unit label for system-defined field
112 113 114 115 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 112 def find_unit_label(sub_val, sub_field) value_system = extract_value_system(sub_val, sub_field) find_unit_by_key(sub_field['option_layers'], value_system) end |
#format_default_cell(sub_val, sub_field) ⇒ Object
Format default cell
134 135 136 137 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 134 def format_default_cell(sub_val, sub_field) cell_data = sub_val[sub_field['id']] cell_data.is_a?(Hash) ? cell_data['value'].to_s : cell_data.to_s end |
#format_drag_field_cell(sub_val, sub_field) ⇒ Object
Format drag field cell (DRAG_SAMPLE or DRAG_MOLECULE), returns hyperlink or label
85 86 87 88 89 90 91 92 93 94 95 96 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 85 def format_drag_field_cell(sub_val, sub_field) val = sub_val[sub_field['id']]['value'] || {} return '' if val.blank? svg_url = val['el_svg'].to_s if svg_url.present? full_url = URI.join(Rails.application.config.root_url, svg_url).to_s { hyperlink: full_url, text: '[image link]' } else val['el_label'].to_s end end |
#format_expanded_cell(sub_val, exp_field) ⇒ Object
Format expanded cell for DRAG_SAMPLE or DRAG_MOLECULE with sub-headers
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 50 def (sub_val, exp_field) field_id = exp_field['id'] sub_header = exp_field['sub_header'] return '' if field_id.nil? || sub_val[field_id].nil? val = sub_val[field_id]['value'] || {} return '' if val.blank? || !val.is_a?(Hash) property_key = map_sub_header_to_property(sub_header) val[property_key].to_s rescue StandardError => e Labimotion.log_exception(e) '' end |
#format_select_cell(sub_val, sub_field) ⇒ Object
Format select cell
99 100 101 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 99 def format_select_cell(sub_val, sub_field) sub_val[sub_field['id']]['value'].to_s end |
#format_system_defined_cell(sub_val, sub_field) ⇒ Object
Format system-defined cell with unit
104 105 106 107 108 109 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 104 def format_system_defined_cell(sub_val, sub_field) value = sub_val[sub_field['id']]['value'].to_s unit = find_unit_label(sub_val, sub_field) unit.present? ? "#{value} #{unit}" : value end |
#format_table_cell(sub_val, sub_field) ⇒ Object
Format table cell value based on field type
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 31 def format_table_cell(sub_val, sub_field) return '' if sub_field.fetch('id', nil).nil? || sub_val[sub_field['id']].nil? case sub_field['type'] when Labimotion::FieldType::DRAG_SAMPLE, Labimotion::FieldType::DRAG_MOLECULE format_drag_field_cell(sub_val, sub_field) when Labimotion::FieldType::SELECT format_select_cell(sub_val, sub_field) when Labimotion::FieldType::SYSTEM_DEFINED format_system_defined_cell(sub_val, sub_field) else format_default_cell(sub_val, sub_field) end rescue StandardError => e Labimotion.log_exception(e) '' end |
#generate_filename(element_name, segment_name, layer_name, field_name) ⇒ Object
Generate sanitized filename for export
22 23 24 25 26 27 28 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 22 def generate_filename(element_name, segment_name, layer_name, field_name) = Time.zone.now.strftime('%Y%m%d_%H%M%S') parts = [element_name] parts << segment_name unless segment_name.empty? parts.push(layer_name, field_name, ) parts.join('_').gsub(/\s+/, '_').gsub(/[()]/, '(' => '[', ')' => ']') end |
#map_sub_header_to_property(sub_header) ⇒ Object
Map sub-header to property key
67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 67 def map_sub_header_to_property(sub_header) property_map = { 'name' => 'el_name', 'label' => 'el_label', 'short_label' => 'el_short_label', 'external_label' => 'el_external_label', 'molecular_weight' => 'el_molecular_weight', 'smiles' => 'el_smiles', 'inchikey' => 'el_inchikey', 'iupac' => 'el_iupac', 'sum_formula' => 'el_sum_formula', 'decoupled' => 'el_decoupled' } property_map[sub_header] || "el_#{sub_header}" end |
#normalize_column_name(col_name) ⇒ Object
Normalize column name, returns CONST_UNNAMED for blank values
10 11 12 13 14 |
# File 'lib/labimotion/helpers/exporter_helpers.rb', line 10 def normalize_column_name(col_name) return CONST_UNNAMED if col_name.nil? || col_name.to_s.strip.empty? col_name end |