Class: Labimotion::PropertiesEntity
- Inherits:
- 
      ApplicationEntity
      
        - Object
- Grape::Entity
- ApplicationEntity
- Labimotion::PropertiesEntity
 
- Defined in:
- lib/labimotion/entities/properties_entity.rb
Direct Known Subclasses
Constant Summary
Constants inherited from ApplicationEntity
ApplicationEntity::CUSTOM_ENTITY_OPTIONS
Instance Method Summary collapse
- 
  
    
      #properties  ⇒ Object 
    
    
  
  
  
  
  
  
  
  
  
    TODO: Refactor this method to something more readable/understandable. 
- #set_table(field, field_table_objs, obj) ⇒ Object
Methods inherited from ApplicationEntity
Instance Method Details
#properties ⇒ Object
TODO: Refactor this method to something more readable/understandable
| 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | # File 'lib/labimotion/entities/properties_entity.rb', line 8 def properties (object&.properties.is_a?(Hash) && object.properties['layers']&.keys || []).each do |key| # layer = object.properties[key] field_sample_molecules = object.properties['layers'][key]['fields'].select { |ss| ss['type'] == 'drag_sample' || ss['type'] == 'drag_molecule' } field_sample_molecules.each do |field| idx = object.properties['layers'][key]['fields'].index(field) sid = field.dig('value', 'el_id') next unless sid.present? el = field['type'] == 'drag_sample' ? Sample.find_by(id: sid) : Molecule.find_by(id: sid) next unless el.present? next unless object.properties.dig('layers', key, 'fields', idx, 'value').present? object.properties['layers'][key]['fields'][idx]['value']['el_label'] = el.short_label if field['type'] == 'drag_sample' object.properties['layers'][key]['fields'][idx]['value']['el_tip'] = el.short_label if field['type'] == 'drag_sample' object.properties['layers'][key]['fields'][idx]['value']['el_svg'] = field['type'] == 'drag_sample' ? el.get_svg_path : File.join('/images', 'molecules', el.molecule_svg_file) end field_tables = object.properties['layers'][key]['fields'].select { |ss| ss['type'] == 'table' } field_tables.each do |field| idx = object.properties['layers'][key]['fields'].index(field) next unless field['sub_values'].present? && field['sub_fields'].present? field_table_molecules = field['sub_fields'].select { |ss| ss['type'] == 'drag_molecule' } object.properties['layers'][key]['fields'][idx] = set_table(field, field_table_molecules, 'Molecule') if field_table_molecules.present? field_table_samples = field['sub_fields'].select { |ss| ss['type'] == 'drag_sample' } object.properties['layers'][key]['fields'][idx] = set_table(field, field_table_samples, 'Sample') if field_table_samples.present? end end object.properties end | 
#set_table(field, field_table_objs, obj) ⇒ Object
| 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 | # File 'lib/labimotion/entities/properties_entity.rb', line 42 def set_table(field, field_table_objs, obj) col_ids = field_table_objs.map { |x| x.values[0] } col_ids.each do |col_id| field['sub_values'].each do |sub_value| next unless sub_value[col_id].present? && sub_value[col_id]['value'].present? && sub_value[col_id]['value']['el_id'].present? find_obj = obj.constantize.find_by(id: sub_value[col_id]['value']['el_id']) next unless find_obj.present? case obj when 'Molecule' sub_value[col_id]['value']['el_svg'] = File.join('/images', 'molecules', find_obj.molecule_svg_file) sub_value[col_id]['value']['el_inchikey'] = find_obj.inchikey sub_value[col_id]['value']['el_smiles'] = find_obj.cano_smiles sub_value[col_id]['value']['el_iupac'] = find_obj.iupac_name sub_value[col_id]['value']['el_molecular_weight'] = find_obj.molecular_weight when 'Sample' sub_value[col_id]['value']['el_svg'] = find_obj.get_svg_path sub_value[col_id]['value']['el_label'] = find_obj.short_label sub_value[col_id]['value']['el_short_label'] = find_obj.short_label sub_value[col_id]['value']['el_name'] = find_obj.name sub_value[col_id]['value']['el_external_label'] = find_obj.external_label sub_value[col_id]['value']['el_molecular_weight'] = find_obj.decoupled ? find_obj.molecular_mass : find_obj.molecule.molecular_weight end end end field end |