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 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
# File 'lib/labimotion/entities/properties_entity.rb', line 8 def properties (object&.properties.is_a?(Hash) && object.properties[Labimotion::Prop::LAYERS]&.keys || []).each do |key| # layer = object.properties[key] field_sample_molecules = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].select { |ss| ss['type'] == Labimotion::FieldType::DRAG_SAMPLE || ss['type'] == Labimotion::FieldType::DRAG_MOLECULE } field_sample_molecules.each do |field| idx = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].index(field) sid = field.dig('value', 'el_id') next unless sid.present? el = field['type'] == Labimotion::FieldType::DRAG_SAMPLE ? Sample.find_by(id: sid) : Molecule.find_by(id: sid) next unless el.present? next unless object.properties.dig(Labimotion::Prop::LAYERS, key, Labimotion::Prop::FIELDS, idx, 'value').present? object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_label'] = el.short_label if field['type'] == Labimotion::FieldType::DRAG_SAMPLE object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_tip'] = el.short_label if field['type'] == Labimotion::FieldType::DRAG_SAMPLE object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_svg'] = field['type'] == Labimotion::FieldType::DRAG_SAMPLE ? el.get_svg_path : File.join('/images', 'molecules', el&.molecule_svg_file || 'nosvg') end field_sys_reactions = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].select { |ss| ss['type'] == Labimotion::FieldType::SYS_REACTION } field_sys_reactions.each do |field| idx = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].index(field) sid = field.dig('value', 'el_id') next unless sid.present? el = Reaction.find_by(id: sid) if el.blank? object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_tip'] = 'ERROR' object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_svg'] = '' end next unless el.present? next unless object.properties.dig(Labimotion::Prop::LAYERS, key, Labimotion::Prop::FIELDS, idx, 'value').present? object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_label'] = el.short_label object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_tip'] = el.short_label object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_svg'] = el.reaction_svg_file end field_tables = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].select { |ss| ss['type'] == Labimotion::FieldType::TABLE } field_tables.each do |field| idx = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].index(field) next unless field['sub_values'].present? && field[Labimotion::Prop::SUBFIELDS].present? field_table_molecules = field[Labimotion::Prop::SUBFIELDS].select { |ss| ss['type'] == Labimotion::FieldType::DRAG_MOLECULE } object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx] = set_table(field, field_table_molecules, Labimotion::Prop::MOLECULE) if field_table_molecules.present? field_table_samples = field[Labimotion::Prop::SUBFIELDS].select { |ss| ss['type'] == Labimotion::FieldType::DRAG_SAMPLE } object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx] = set_table(field, field_table_samples, Labimotion::Prop::SAMPLE) if field_table_samples.present? end end object.properties end |
#set_table(field, field_table_objs, obj) ⇒ Object
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/labimotion/entities/properties_entity.rb', line 61 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 if find_obj.blank? case obj when Labimotion::Prop::MOLECULE sub_value[col_id]['value']['el_svg'] = File.join('/images', 'molecules', find_obj.molecule_svg_file) if find_obj&.molecule_svg_file&.present? 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 Labimotion::Prop::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 |