labimotion 1.0.6 → 1.0.11

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4cb214fd84c4c884358893ea3a5c7af5504bf3c9d366747d95c4c86aa6f2c42e
4
- data.tar.gz: 5ec0a7b4e10b6174ba9802648c9f9f15e85c03b491035d375b06ee85e25ce15e
3
+ metadata.gz: 7059d7bb80a3d629ddacc3ef633f4c2b039120b6a6a6754761a84de37a5aa6a0
4
+ data.tar.gz: 842ad058f7563befe7d7bf34a909aab07c97d8c406cd0f5b7f601d79f3af0ea2
5
5
  SHA512:
6
- metadata.gz: 6c2c0a26c8c8ce05d44f976d1146464f72c1dd173529cff04fa9918863c8f074f69299d90d2d9fefafcd5628a5dd28d29ade1b5b9029b4aac88602f05d64db90
7
- data.tar.gz: 67bfe5f4e12b5b8412a95fd4124818dfb4da775baa2558e4934c4b8b86d79c43c0c65f51070e4893ef3cf857bfae2e3efd6061bbbd1b5b5759917bfed936568d
6
+ metadata.gz: 8b03a6c2bc5592268ab5aef1e68a146c23c17e15d0d134a7f965d864dd38538b81051853c6b1d914df84d0f2697e0a8c7623bdbe5d9a548c0ee3a298994a7fba
7
+ data.tar.gz: f314a546d4b70cc3dc042b9e0977b918f984f2b573e512bc6385fe2611001c2e061b15226e2f7e99153db0bdaf0420b36c8b579246d3c5c7bea4cc9f2c60c59a
@@ -23,17 +23,20 @@ module Labimotion
23
23
  end
24
24
 
25
25
  def self.fetch_elements(collection, segments, attachments, fetch_many, fetch_one, fetch_containers)
26
- fetch_many.call(collection.elements, {
27
- 'element_klass_id' => 'Labimotion::ElementKlass',
28
- 'created_by' => 'User',
29
- })
30
- fetch_many.call(collection.collections_elements, {
31
- 'collection_id' => 'Collection',
32
- 'element_id' => 'Labimotion::Element',
33
- })
26
+ # fetch_many.call(collection.elements, {
27
+ # 'element_klass_id' => 'Labimotion::ElementKlass',
28
+ # 'created_by' => 'User',
29
+ # })
30
+ # fetch_many.call(collection.collections_elements, {
31
+ # 'collection_id' => 'Collection',
32
+ # 'element_id' => 'Labimotion::Element',
33
+ # })
34
34
  collection.elements.each do |element|
35
-
36
- element, attachments = Labimotion::Export.fetch_properties(element, attachments, &fetch_one)
35
+ element, attachments = Labimotion::Export.fetch_properties(data, element, attachments, &fetch_one)
36
+ fetch_one.call(element, {
37
+ 'element_klass_id' => 'Labimotion::ElementKlass',
38
+ 'created_by' => 'User',
39
+ })
37
40
  fetch_containers.call(element)
38
41
  segment, @attachments = Labimotion::Export.fetch_segments(element, attachments, &fetch_one)
39
42
  segments += segment if segment.present?
@@ -91,6 +94,15 @@ module Labimotion
91
94
  mol = Molecule.find(id) unless id.nil?
92
95
  properties['layers'][key]['fields'][idx]['value']['el_id'] = fetch_one.call(mol) unless mol.nil?
93
96
  end
97
+
98
+ field_samples = layer['fields'].select { |ss| ss['type'] == 'drag_sample' }
99
+ field_samples.each do |field|
100
+ # idx = properties['layers'][key]['fields'].index(field)
101
+ # id = field["value"] && field["value"]["el_id"] unless idx.nil?
102
+ # ss = Sample.find(id) unless id.nil?
103
+ # properties['layers'][key]['fields'][idx]['value']['el_id'] = fetch_one.call(ss) unless ss.nil?
104
+ end
105
+
94
106
  field_uploads = layer['fields'].select { |ss| ss['type'] == 'upload' }
95
107
  field_uploads.each do |upload|
96
108
  idx = properties['layers'][key]['fields'].index(upload)
@@ -123,7 +135,6 @@ module Labimotion
123
135
  end
124
136
  end
125
137
  end
126
-
127
138
  end
128
139
  instance.properties = properties
129
140
  [instance, attachments]
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'labimotion/utils/import_utils'
3
4
  module Labimotion
4
5
  class Import
5
6
 
@@ -50,7 +51,7 @@ module Labimotion
50
51
  element_type = fields.fetch('element_type')
51
52
  element = instances.fetch(element_type).fetch(element_uuid)
52
53
 
53
- dataset_klass = Labimotion::DatasetKlass.find_by(identifier: dk_id)
54
+ dataset_klass = Labimotion::DatasetKlass.find_by(identifier: dk_id) if dk_id.present?
54
55
  next if gt == true && dataset_klass.nil?
55
56
 
56
57
  dkr = Labimotion::DatasetKlassesRevision.find_by(uuid: fields.fetch('klass_uuid'))
@@ -88,33 +89,21 @@ module Labimotion
88
89
  ek_obj = data.fetch('Labimotion::ElementKlass').fetch(sk_obj["element_klass_id"])
89
90
  element_klass = Labimotion::ElementKlass.find_by(name: ek_obj['name']) if ek_obj.present?
90
91
  next if element_klass.nil? || ek_obj.nil? || ek_obj['is_generic'] == true
92
+
91
93
  element_uuid = fields.fetch('element_id')
92
94
  element_type = fields.fetch('element_type')
93
95
  element = instances.fetch(element_type).fetch(element_uuid)
94
- segment_klass = Labimotion::SegmentKlass.find_by(identifier: sk_id)
95
- next if gt == true && segment_klass.nil?
96
-
97
- skr = Labimotion::SegmentKlassesRevision.find_by(uuid: fields.fetch('klass_uuid'))
98
- segment_klass = skr.segment_klass if segment_klass.nil? && skr.present?
99
-
100
- # segment_klass = Labimotion::SegmentKlass.create!(sk_obj.slice(
101
- # 'label',
102
- # 'desc',
103
- # 'properties_template',
104
- # 'is_active',
105
- # 'place',
106
- # 'properties_release',
107
- # 'uuid',
108
- # 'identifier',
109
- # 'sync_time'
110
- # ).merge(
111
- # element_klass: element_klass,
112
- # created_by: current_user_id,
113
- # released_at: DateTime.now
114
- # )
115
- # ) if segment_klass.nil?
116
-
117
- next if segment_klass.nil?
96
+ segment_klass = Labimotion::SegmentKlass.find_by(identifier: sk_id) if sk_id.present?
97
+ segment_klass = Labimotion::SegmentKlass.find_by(uuid: fields.fetch('klass_uuid')) if segment_klass.nil?
98
+
99
+ if segment_klass.nil?
100
+ skr = Labimotion::SegmentKlassesRevision.find_by(uuid: fields.fetch('klass_uuid'))
101
+ segment_klass = skr.segment_klass if segment_klass.nil? && skr.present?
102
+ end
103
+
104
+ next if segment_klass.nil? || element.nil?
105
+
106
+ ## segment_klass = Labimotion::ImportUtils.create_segment_klass(sk_obj, segment_klass, element_klass, current_user_id)
118
107
 
119
108
  segment = Labimotion::Segment.create!(
120
109
  fields.slice(
@@ -128,52 +117,7 @@ module Labimotion
128
117
  )
129
118
  )
130
119
 
131
- properties = segment.properties
132
- properties['layers'].keys.each do |key|
133
- layer = properties['layers'][key]
134
- field_molecules = layer['fields'].select { |ss| ss['type'] == 'drag_molecule' }
135
- field_molecules.each do |field|
136
- idx = properties['layers'][key]['fields'].index(field)
137
- id = field["value"] && field["value"]["el_id"] unless idx.nil?
138
- mol = Molecule.find_or_create_by_molfile(data.fetch('Molecule')[id]['molfile']) unless id.nil?
139
- unless mol.nil?
140
- properties['layers'][key]['fields'][idx]['value']['el_id'] = mol.id
141
- properties['layers'][key]['fields'][idx]['value']['el_tip'] = "#{mol.inchikey}@@#{mol.cano_smiles}"
142
- properties['layers'][key]['fields'][idx]['value']['el_label'] = mol.iupac_name
143
- end
144
- end
145
-
146
- field_tables = layer['fields'].select { |ss| ss['type'] == 'table' }
147
- field_tables&.each do |field|
148
- tidx = layer['fields'].index(field)
149
- next unless field['sub_values'].present? && field['sub_fields'].present?
150
-
151
- field_table_molecules = field['sub_fields'].select { |ss| ss['type'] == 'drag_molecule' }
152
- if field_table_molecules.present?
153
- col_ids = field_table_molecules.map { |x| x.values[0] }
154
- col_ids.each do |col_id|
155
- field['sub_values'].each_with_index do |sub_value, vdx|
156
- next unless sub_value[col_id].present? && sub_value[col_id]['value'].present? && sub_value[col_id]['value']['el_id'].present?
157
-
158
- svalue = sub_value[col_id]['value']
159
- next unless svalue['el_id'].present? && svalue['el_inchikey'].present?
160
-
161
- tmol = Molecule.find_or_create_by_molfile(data.fetch('Molecule')[svalue['el_id']]['molfile']) unless svalue['el_id'].nil?
162
- unless tmol.nil?
163
- properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_id'] = tmol.id
164
- properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_tip'] = "#{tmol.inchikey}@@#{tmol.cano_smiles}"
165
- properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_label'] = tmol.cano_smiles
166
- properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_smiles'] = tmol.cano_smiles
167
- properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_iupac'] = tmol.iupac_name
168
- properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_inchikey'] = tmol.inchikey
169
- properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_svg'] = File.join('/images', 'molecules', tmol.molecule_svg_file)
170
- properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_molecular_weight'] = tmol.molecular_weight
171
- end
172
- end
173
- end
174
- end
175
- end
176
- end
120
+ properties = Labimotion::ImportUtils.properties_handler(data, segment.properties)
177
121
  segment.update!(properties: properties)
178
122
  update_instances.call(uuid, segment)
179
123
  end
@@ -182,5 +126,43 @@ module Labimotion
182
126
  raise
183
127
  end
184
128
  end
129
+
130
+ def self.import_elements(data, instances, gt, current_user_id, fetch_many, &update_instances)
131
+ data.fetch('Labimotion::Element', {}).each do |uuid, fields|
132
+ klass_id = fields["element_klass_id"]
133
+ ek_obj = data.fetch('Labimotion::ElementKlass', {})[klass_id]
134
+ ek_id = ek_obj["identifier"]
135
+ element_klass = Labimotion::ElementKlass.find_by(identifier: ek_id) if ek_id.present?
136
+ element_klass = Labimotion::ElementKlass.find_by(uuid: fields.fetch('klass_uuid')) if element_klass.nil?
137
+
138
+ if element_klass.nil?
139
+ ekr = Labimotion::ElementKlassesRevision.find_by(uuid: fields.fetch('klass_uuid'))
140
+ element_klass = ekr.element_klass if element_klass.nil? && ekr.present?
141
+ end
142
+ next if element_klass.nil?
143
+
144
+ element = Labimotion::Element.create!(
145
+ fields.slice(
146
+ 'name', 'properties', 'properties_release'
147
+ ).merge(
148
+ created_by: current_user_id,
149
+ element_klass: element_klass,
150
+ collections: fetch_many.call(
151
+ 'Collection', 'Labimotion::CollectionsElement', 'element_id', 'collection_id', uuid
152
+ ),
153
+ uuid: SecureRandom.uuid,
154
+ klass_uuid: ekr&.uuid || element_klass.uuid
155
+ )
156
+ )
157
+
158
+ properties = Labimotion::ImportUtils.properties_handler(data, element.properties)
159
+ element.update!(properties: properties)
160
+ update_instances.call(uuid, element)
161
+ element.container = Container.create_root_container
162
+ end
163
+ rescue StandardError => e
164
+ Rails.logger.error(e.backtrace)
165
+ raise
166
+ end
185
167
  end
186
168
  end
@@ -15,6 +15,7 @@ module Labimotion
15
15
  expose! :properties
16
16
  expose! :properties_release
17
17
  expose! :short_label
18
+ expose! :thumb_svg
18
19
  expose! :type
19
20
  expose! :uuid
20
21
  end
@@ -14,11 +14,35 @@ require 'labimotion/utils/utils'
14
14
 
15
15
  module Labimotion
16
16
  class Converter
17
-
18
17
  def self.logger
19
18
  @@converter_logger ||= Logger.new(Rails.root.join('log/converter.log')) # rubocop:disable Style/ClassVars
20
19
  end
21
20
 
21
+ def self.process_ds(id, current_user = {})
22
+ att = Attachment.find_by(attachable_id: id, con_state: Labimotion::ConState::CONVERTED)
23
+ return if att.nil?
24
+
25
+ dsr = []
26
+ ols = nil
27
+
28
+ Zip::File.open(att.attachment_attacher.file.url) do |zip_file|
29
+ res = Labimotion::Converter.collect_metadata(zip_file) if att.filename.split('.')&.last == 'zip'
30
+ ols = res[:o] unless res&.dig(:o).nil?
31
+ dsr.push(res[:d]) unless res&.dig(:d).nil?
32
+ end
33
+ dsr.flatten!
34
+
35
+ dataset = build_ds(id, ols)
36
+ update_ds(dataset, dsr, current_user) if dataset.present?
37
+
38
+
39
+ rescue StandardError => e
40
+ Labimotion::Converter.logger.error ["Att ID: #{att&.id}, OLS: #{ols}", "DSR: #{dsr}", e.message, *e.backtrace].join($INPUT_RECORD_SEPARATOR)
41
+ raise e
42
+ ensure
43
+ ## tmp_file&.close
44
+ end
45
+
22
46
  def self.uri(api_name)
23
47
  url = Rails.configuration.converter.url
24
48
  "#{url}#{api_name}"
@@ -126,15 +150,17 @@ module Labimotion
126
150
  att.update!(storage: primary_store)
127
151
  end
128
152
 
129
- Zip::File.open(tmp_file.path) do |zip_file|
130
- res = Labimotion::Converter.collect_metadata(zip_file) if name.split('.')&.last == 'zip'
131
- ols = res[:o] unless res&.dig(:o).nil?
132
- dsr.push(res[:d]) unless res&.dig(:d).nil?
133
- end
153
+ if Labimotion::IS_RAILS5 == true
154
+ Zip::File.open(tmp_file.path) do |zip_file|
155
+ res = Labimotion::Converter.collect_metadata(zip_file) if name.split('.')&.last == 'zip'
156
+ ols = res[:o] unless res&.dig(:o).nil?
157
+ dsr.push(res[:d]) unless res&.dig(:d).nil?
158
+ end
134
159
 
135
- dsr.flatten!
136
- if dsr.length.positive? && name.split('.')&.last == 'zip'
137
- Labimotion::Converter.ts('write', att.attachable_id, ols: ols, info: dsr)
160
+ dsr.flatten!
161
+ if dsr.length.positive? && name.split('.')&.last == 'zip'
162
+ Labimotion::Converter.ts('write', att.attachable_id, ols: ols, info: dsr)
163
+ end
138
164
  end
139
165
  rescue StandardError => e
140
166
  raise e
@@ -197,7 +223,7 @@ module Labimotion
197
223
  begin
198
224
  return unless dsr_info && dsr_info[:info]&.length.positive?
199
225
  dataset = Labimotion::Converter.build_ds(att_id, dsr_info[:ols])
200
- Labimotion::Converter.update_ds(dataset, dsr_info[:info], current_user)
226
+ Labimotion::Converter.update_ds(dataset, dsr_info[:info], current_user) if dataset.present?
201
227
  rescue StandardError => e
202
228
  Labimotion::Converter.logger.error ["Att ID: #{att_id}, OLS: #{dsr_info[:ols]}", "DSR: #{dsr_info[:info]}", e.message, *e.backtrace].join($INPUT_RECORD_SEPARATOR)
203
229
  ensure
@@ -6,8 +6,22 @@ require 'labimotion/utils/utils'
6
6
  module Labimotion
7
7
  ## NmrMapper
8
8
  class NmrMapper
9
- def self.is_brucker_binary(id)
10
- att = Attachment.find(id)
9
+ def self.process_ds(id, current_user = {})
10
+ att = Attachment.find_by(attachable_id: id, con_state: Labimotion::ConState::NMR)
11
+ return if att.nil?
12
+
13
+ content = is_brucker_binary(id, att)
14
+ if content.nil?
15
+ att.update_column(:con_state, Labimotion::ConState::NONE)
16
+ else
17
+ data = process(att, id, content)
18
+ generate_ds(id, data, current_user)
19
+ att.update_column(:con_state, Labimotion::ConState::PROCESSED)
20
+ end
21
+ end
22
+
23
+ def self.is_brucker_binary(id, att)
24
+ # att = Attachment.find(id)
11
25
  if Labimotion::IS_RAILS5 == true
12
26
  Zip::File.open(att.store.path) do |zip_file|
13
27
  zip_file.each do |entry|
@@ -32,8 +46,9 @@ module Labimotion
32
46
  nil
33
47
  end
34
48
 
35
- def self.process(id, content)
36
- att = Attachment.find(id)
49
+ def self.process(att, id, content)
50
+ return if att.nil? || content.nil?
51
+
37
52
  lines = content.split("\n").reject(&:empty?)
38
53
  metadata = {}
39
54
  lines.map do |ln|
@@ -42,18 +57,27 @@ module Labimotion
42
57
  end
43
58
  ols = 'CHMO:0000593' if metadata['NUC1'] == '1H'
44
59
  ols = 'CHMO:0000595' if metadata['NUC1'] == '13C'
45
- if content.present? && att.present?
46
- Labimotion::NmrMapper.ts('write', att.attachable_id,
47
- content: { metadata: metadata, ols: ols })
48
- end
60
+
61
+ { content: { metadata: metadata, ols: ols } }
62
+ # if content.present? && att.present?
63
+ # Labimotion::NmrMapper.ts('write', att.attachable_id,
64
+ # content: { metadata: metadata, ols: ols })
65
+ # end
49
66
  end
50
67
 
51
68
  def self.fetch_content(id)
52
- Labimotion::NmrMapper.ts('read', id)
69
+ atts = Attachment.where(attachable_id: id)
70
+ return if atts.nil?
71
+
72
+ atts.each do |att|
73
+ content = Labimotion::NmrMapper.ts('read', att.id)
74
+ return content if content.present?
75
+ end
53
76
  end
54
77
 
55
- def self.generate_ds(id, current_user = {})
56
- data = Labimotion::NmrMapper.fetch_content(id)
78
+
79
+ def self.generate_ds(id, data, current_user = {})
80
+ # data = Labimotion::NmrMapper.fetch_content(id)
57
81
  return if data.nil?
58
82
 
59
83
  obj = Labimotion::NmrMapper.build_ds(id, data[:content])
@@ -22,15 +22,28 @@ module Labimotion
22
22
  end
23
23
 
24
24
  def exec_converter
25
+ return if self.has_attribute?(:con_state) == false || con_state.present?
26
+
25
27
  #return if attachable_id.nil?
26
- return if self.has_attribute?(:con_state) == false || con_state.nil? || con_state == Labimotion::ConState::NONE
28
+ return if Labimotion::IS_RAILS5 == false && self.con_state != Labimotion::ConState::WAIT
29
+
30
+ return if self.has_attribute?(:con_state) == false || self.con_state.nil? || self.con_state == Labimotion::ConState::NONE
31
+
27
32
  case con_state
28
33
  when Labimotion::ConState::NMR
29
- content = Labimotion::NmrMapperRepo.is_brucker_binary(id)
34
+ if Labimotion::IS_RAILS5 == true
35
+ content = Labimotion::NmrMapperRepo.is_brucker_binary(id)
36
+ else
37
+ content = Labimotion::NmrMapper.is_brucker_binary(id)
38
+ end
30
39
  if content.nil?
31
40
  self.con_state = Labimotion::ConState::NONE
32
41
  else
33
- Labimotion::NmrMapperRepo.process(id, content)
42
+ if Labimotion::IS_RAILS5 == true
43
+ Labimotion::NmrMapperRepo.process(id, content)
44
+ else
45
+ Labimotion::NmrMapper.process(id, content)
46
+ end
34
47
  self.con_state = Labimotion::ConState::PROCESSED
35
48
  end
36
49
  when Labimotion::ConState::WAIT
@@ -101,13 +101,20 @@ module Labimotion
101
101
  end
102
102
 
103
103
  def thumb_svg
104
- image_atts = attachments.select do |a_img|
105
- a_img&.content_type&.match(Regexp.union(%w[jpg jpeg png tiff tif]))
106
- end
104
+ if Labimotion::IS_RAILS5 == true
105
+ image_atts = attachments.select do |a_img|
106
+ a_img&.content_type&.match(Regexp.union(%w[jpg jpeg png tiff tif]))
107
+ end
107
108
 
108
- attachment = image_atts[0] || attachments[0]
109
- preview = attachment.read_thumbnail if attachment
110
- preview && Base64.encode64(preview) || 'not available'
109
+ attachment = image_atts[0] || attachments[0]
110
+ preview = attachment.read_thumbnail if attachment
111
+ preview && Base64.encode64(preview) || 'not available'
112
+ else
113
+ image_atts = attachments.select(&:type_image?)
114
+ attachment = image_atts[0] || attachments[0]
115
+ preview = attachment&.read_thumbnail
116
+ (preview && Base64.encode64(preview)) || 'not available'
117
+ end
111
118
  end
112
119
 
113
120
 
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'labimotion/models/concerns/generic_klass_revisions'
3
+ require 'labimotion/models/concerns/workflow'
3
4
 
4
5
  module Labimotion
5
6
  class SegmentKlass < ApplicationRecord
@@ -0,0 +1,116 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Labimotion
4
+ ## Import Utils
5
+ class ImportUtils
6
+ def self.proc_sample(layer, key, data, properties)
7
+ field_samples = layer['fields'].select { |ss| ss['type'] == 'drag_sample' }
8
+ field_samples.each do |field|
9
+ idx = properties['layers'][key]['fields'].index(field)
10
+ id = field["value"] && field["value"]["el_id"] unless idx.nil?
11
+
12
+ # mol = Molecule.find_or_create_by_molfile(data.fetch('Molecule')[id]['molfile']) unless id.nil?
13
+ # unless mol.nil?
14
+ # properties['layers'][key]['fields'][idx]['value']['el_id'] = mol.id
15
+ # properties['layers'][key]['fields'][idx]['value']['el_tip'] = "#{mol.inchikey}@@#{mol.cano_smiles}"
16
+ # properties['layers'][key]['fields'][idx]['value']['el_label'] = mol.iupac_name
17
+ # end
18
+ end
19
+ properties
20
+ rescue StandardError => e
21
+ Rails.logger.error(e.backtrace)
22
+ raise
23
+ end
24
+
25
+ def self.proc_molecule(layer, key, data, properties)
26
+ field_molecules = layer['fields'].select { |ss| ss['type'] == 'drag_molecule' }
27
+ field_molecules.each do |field|
28
+ idx = properties['layers'][key]['fields'].index(field)
29
+ id = field["value"] && field["value"]["el_id"] unless idx.nil?
30
+ mol = Molecule.find_or_create_by_molfile(data.fetch('Molecule')[id]['molfile']) unless id.nil?
31
+ unless mol.nil?
32
+ properties['layers'][key]['fields'][idx]['value']['el_id'] = mol.id
33
+ properties['layers'][key]['fields'][idx]['value']['el_tip'] = "#{mol.inchikey}@@#{mol.cano_smiles}"
34
+ properties['layers'][key]['fields'][idx]['value']['el_label'] = mol.iupac_name
35
+ end
36
+ end
37
+ properties
38
+ rescue StandardError => e
39
+ Rails.logger.error(e.backtrace)
40
+ raise
41
+ end
42
+
43
+ def self.proc_table(layer, key, data, properties)
44
+ field_tables = layer['fields'].select { |ss| ss['type'] == 'table' }
45
+ field_tables&.each do |field|
46
+ tidx = layer['fields'].index(field)
47
+ next unless field['sub_values'].present? && field['sub_fields'].present?
48
+
49
+ field_table_molecules = field['sub_fields'].select { |ss| ss['type'] == 'drag_molecule' }
50
+ if field_table_molecules.present?
51
+ col_ids = field_table_molecules.map { |x| x.values[0] }
52
+ col_ids.each do |col_id|
53
+ field['sub_values'].each_with_index do |sub_value, vdx|
54
+ next unless sub_value[col_id].present? && sub_value[col_id]['value'].present? && sub_value[col_id]['value']['el_id'].present?
55
+
56
+ svalue = sub_value[col_id]['value']
57
+ next unless svalue['el_id'].present? && svalue['el_inchikey'].present?
58
+
59
+ tmol = Molecule.find_or_create_by_molfile(data.fetch('Molecule')[svalue['el_id']]['molfile']) unless svalue['el_id'].nil?
60
+ unless tmol.nil?
61
+ properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_id'] = tmol.id
62
+ properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_tip'] = "#{tmol.inchikey}@@#{tmol.cano_smiles}"
63
+ properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_label'] = tmol.cano_smiles
64
+ properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_smiles'] = tmol.cano_smiles
65
+ properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_iupac'] = tmol.iupac_name
66
+ properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_inchikey'] = tmol.inchikey
67
+ properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_svg'] = File.join('/images', 'molecules', tmol.molecule_svg_file)
68
+ properties['layers'][key]['fields'][tidx]['sub_values'][vdx][col_id]['value']['el_molecular_weight'] = tmol.molecular_weight
69
+ end
70
+ end
71
+ end
72
+ end
73
+ end
74
+ properties
75
+ rescue StandardError => e
76
+ Rails.logger.error(e.backtrace)
77
+ raise
78
+ end
79
+
80
+ def self.properties_handler(data, properties)
81
+ properties && properties['layers'] && properties['layers'].keys&.each do |key|
82
+ layer = properties['layers'][key]
83
+ properties = proc_molecule(layer, key, data, properties)
84
+ properties = proc_table(layer, key, data, properties)
85
+ # properties = proc_sample(layer, key, data, properties)
86
+ end
87
+ properties
88
+ rescue StandardError => e
89
+ Rails.logger.error(e.backtrace)
90
+ raise
91
+ end
92
+
93
+ def self.create_segment_klass(sk_obj, segment_klass, element_klass, current_user_id)
94
+ return if segment_klass.present? || element_klass.nil? || sk_obj.nil?
95
+
96
+ segment_klass = Labimotion::SegmentKlass.create!(sk_obj.slice(
97
+ 'label',
98
+ 'desc',
99
+ 'properties_template',
100
+ 'is_active',
101
+ 'place',
102
+ 'properties_release',
103
+ 'uuid',
104
+ 'identifier',
105
+ 'sync_time'
106
+ ).merge(
107
+ element_klass: element_klass,
108
+ created_by: current_user_id,
109
+ released_at: DateTime.now
110
+ )
111
+ )
112
+
113
+ segment_klass
114
+ end
115
+ end
116
+ end
@@ -1,7 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ ## Labimotion Version
3
4
  module Labimotion
4
5
  IS_RAILS5 = false
5
- VERSION = '0.1.14' if Labimotion::IS_RAILS5 == true
6
- VERSION = '1.0.6' if Labimotion::IS_RAILS5 == false
6
+ VERSION_ELN = '1.0.11'
7
+ VERSION_REPO = '0.3.1'
8
+
9
+ VERSION = Labimotion::VERSION_REPO if Labimotion::IS_RAILS5 == true
10
+ VERSION = Labimotion::VERSION_ELN if Labimotion::IS_RAILS5 == false
7
11
  end
data/lib/labimotion.rb CHANGED
@@ -61,8 +61,11 @@ module Labimotion
61
61
  autoload :ConState, 'labimotion/utils/con_state'
62
62
  autoload :Serializer, 'labimotion/utils/serializer'
63
63
  autoload :Search, 'labimotion/utils/search'
64
- autoload :Export, 'labimotion/utils/export'
65
- autoload :Import, 'labimotion/utils/import'
64
+
65
+
66
+ ######## Collection
67
+ autoload :Export, 'labimotion/collection/export'
68
+ autoload :Import, 'labimotion/collection/import'
66
69
 
67
70
  ######## Models
68
71
  autoload :Element, 'labimotion/models/element'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: labimotion
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chia-Lin Lin
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2023-09-10 00:00:00.000000000 Z
12
+ date: 2023-09-19 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -34,12 +34,13 @@ extensions: []
34
34
  extra_rdoc_files: []
35
35
  files:
36
36
  - lib/labimotion.rb
37
- - lib/labimotion/api.rb
38
37
  - lib/labimotion/apis/converter_api.rb
39
38
  - lib/labimotion/apis/generic_dataset_api.rb
40
39
  - lib/labimotion/apis/generic_element_api.rb
41
40
  - lib/labimotion/apis/labimotion_hub_api.rb
42
41
  - lib/labimotion/apis/segment_api.rb
42
+ - lib/labimotion/collection/export.rb
43
+ - lib/labimotion/collection/import.rb
43
44
  - lib/labimotion/entities/application_entity.rb
44
45
  - lib/labimotion/entities/dataset_entity.rb
45
46
  - lib/labimotion/entities/dataset_klass_entity.rb
@@ -90,15 +91,14 @@ files:
90
91
  - lib/labimotion/models/segment_klasses_revision.rb
91
92
  - lib/labimotion/models/segments_revision.rb
92
93
  - lib/labimotion/utils/con_state.rb
93
- - lib/labimotion/utils/export.rb
94
- - lib/labimotion/utils/import.rb
94
+ - lib/labimotion/utils/import_utils.rb
95
95
  - lib/labimotion/utils/search.rb
96
96
  - lib/labimotion/utils/serializer.rb
97
97
  - lib/labimotion/utils/utils.rb
98
98
  - lib/labimotion/version.rb
99
- homepage: https://github.com/phuang26/labimotion
99
+ homepage: https://gitlab.kit.edu/kit/labimotion/labimotion
100
100
  licenses:
101
- - MIT
101
+ - GPL-3.0
102
102
  metadata: {}
103
103
  post_install_message:
104
104
  rdoc_options: []
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- ## This is the first version of the dataset class
4
- module Labimotion
5
- ## This is the first version of the dataset class
6
- class Api
7
- def initialize
8
- # Initialization code
9
- end
10
-
11
- def gget_data
12
- 'Hello, worlddddddddddddddddddddd!'
13
- end
14
-
15
- def self.hello
16
- 'Hellooooooooooooooooooooo!'
17
- end
18
- end
19
- end