labimotion 0.2.1 → 0.3.0

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: f80c183c86ccc07a012df8b1aaafdcd4fee0bf2663e1c6096d02792bf42b91d0
4
- data.tar.gz: 23bcd1152eed5ceb0d7596e7f60ae6f302d6bef48d2c6972f450ff9b205e0a6f
3
+ metadata.gz: 98cb8ba855fc0078623deb096b7ecb7d3136e4238a3e659c25d8fb19b61327f4
4
+ data.tar.gz: e206d57e3d94ce90a36b4b34f6d974384a09cd1477a0822fff6435e16380005c
5
5
  SHA512:
6
- metadata.gz: 95b5d9f778ca254357e032fb3c3fad35c87056534cb615f06d867b39dfc107188b8bcf9c01ab9a6fa996d019eaaa2c2b41486f219f7304faf748aa7cb1e1c453
7
- data.tar.gz: fb8118dc73c028fd4fe693cf4fbacf8124d474f4ecdbf0c14412deef615ef52648d2ce6b0d919087d72f564e24d22e78cebb0a8cc0ae6b521a8747dee074d762
6
+ metadata.gz: 788f8bac2c8f5d49c89985fe796ab956e77bd0ecdefb9587aa0037fda7a963e3118368a610a3c1e7bf8bc13d314e7d0798daf7d0819f8cb90af8e9b5b9a58aa9
7
+ data.tar.gz: 6fc941c2c4559effa8aec29ed36023427605a92ca015001f094f807065601d4d428829212b136935651af539aef37afcf6e06a51574fafc90bcbc3d8f786bca8
@@ -30,7 +30,7 @@ module Labimotion
30
30
  namespace :fetch_repo do
31
31
  desc 'fetch Generic Dataset Klass from Chemotion Repository'
32
32
  get do
33
- fetch_repo('DatasetKlass')
33
+ fetch_repo('DatasetKlass', current_user)
34
34
  end
35
35
  end
36
36
 
@@ -40,8 +40,9 @@ module Labimotion
40
40
  requires :identifier, type: String, desc: 'Identifier'
41
41
  end
42
42
  post do
43
- create_repo_klass(params, current_user)
44
- present DatasetKlass.all, with: Labimotion::DatasetKlassEntity, root: 'klass'
43
+ msg = create_repo_klass(params, current_user, request.headers['Origin'])
44
+ klass = Labimotion::DatasetKlassEntity.represent(DatasetKlass.all)
45
+ { status: msg[:status], message: msg[:message], klass: klass }
45
46
  rescue StandardError => e
46
47
  Labimotion.log_exception(e, current_user)
47
48
  { error: e.message }
@@ -21,6 +21,9 @@ module Labimotion
21
21
  get do
22
22
  ek = Labimotion::ElementKlass.find_by(name: params[:name])
23
23
  present ek, with: Labimotion::ElementKlassEntity, root: 'klass'
24
+ rescue StandardError => e
25
+ Labimotion.log_exception(e, current_user)
26
+ { klass: [] }
24
27
  end
25
28
  end
26
29
 
@@ -32,6 +35,9 @@ module Labimotion
32
35
  get do
33
36
  list = klass_list(params[:generic_only])
34
37
  present list, with: Labimotion::ElementKlassEntity, root: 'klass'
38
+ rescue StandardError => e
39
+ Labimotion.log_exception(e, current_user)
40
+ { klass: [] }
35
41
  end
36
42
  end
37
43
 
@@ -67,6 +73,9 @@ module Labimotion
67
73
  post do
68
74
  authenticate_admin!('elements')
69
75
  update_element_klass(current_user, params)
76
+ rescue StandardError => e
77
+ Labimotion.log_exception(e, current_user)
78
+ raise e
70
79
  end
71
80
  end
72
81
 
@@ -79,6 +88,9 @@ module Labimotion
79
88
  get do
80
89
  list = list_klass_revisions(params)
81
90
  present list, with: Labimotion::KlassRevisionEntity, root: 'revisions'
91
+ rescue StandardError => e
92
+ Labimotion.log_exception(e, current_user)
93
+ []
82
94
  end
83
95
  end
84
96
 
@@ -90,6 +102,9 @@ module Labimotion
90
102
  get do
91
103
  list = element_revisions(params)
92
104
  present list, with: Labimotion::ElementRevisionEntity, root: 'revisions'
105
+ rescue StandardError => e
106
+ Labimotion.log_exception(e, current_user)
107
+ []
93
108
  end
94
109
  end
95
110
 
@@ -104,6 +119,9 @@ module Labimotion
104
119
  authenticate_admin!(params[:klass].gsub(/(Klass)/, 's').downcase)
105
120
  delete_klass_revision(params)
106
121
  status 201
122
+ rescue StandardError => e
123
+ Labimotion.log_exception(e, current_user)
124
+ raise e
107
125
  end
108
126
  end
109
127
 
@@ -117,6 +135,9 @@ module Labimotion
117
135
  post do
118
136
  delete_revision(params)
119
137
  status 201
138
+ rescue StandardError => e
139
+ Labimotion.log_exception(e, current_user)
140
+ raise e
120
141
  end
121
142
  end
122
143
 
@@ -129,6 +150,9 @@ module Labimotion
129
150
  klass = Labimotion::Segment.find(params[:id])
130
151
  list = klass.segments_revisions unless klass.nil?
131
152
  present list&.sort_by(&:created_at).reverse, with: Labimotion::SegmentRevisionEntity, root: 'revisions'
153
+ rescue StandardError => e
154
+ Labimotion.log_exception(e, current_user)
155
+ []
132
156
  end
133
157
  end
134
158
 
@@ -152,6 +176,9 @@ module Labimotion
152
176
  post do
153
177
  upload_generics_files(current_user, params)
154
178
  true
179
+ rescue StandardError => e
180
+ Labimotion.log_exception(e, current_user)
181
+ raise e
155
182
  end
156
183
  end
157
184
 
@@ -160,13 +187,19 @@ module Labimotion
160
187
  get do
161
188
  list = Labimotion::ElementKlass.all.sort_by { |e| e.place }
162
189
  present list, with: Labimotion::ElementKlassEntity, root: 'klass'
190
+ rescue StandardError => e
191
+ Labimotion.log_exception(e, current_user)
192
+ []
163
193
  end
164
194
  end
165
195
 
166
196
  namespace :fetch_repo do
167
197
  desc 'fetch Generic Element Klass from Chemotion Repository'
168
198
  get do
169
- fetch_repo('ElementKlass')
199
+ fetch_repo('ElementKlass', current_user)
200
+ rescue StandardError => e
201
+ Labimotion.log_exception(e, current_user)
202
+ []
170
203
  end
171
204
  end
172
205
 
@@ -176,8 +209,9 @@ module Labimotion
176
209
  requires :identifier, type: String, desc: 'Identifier'
177
210
  end
178
211
  post do
179
- create_repo_klass(params, current_user)
180
- present ElementKlass.all, with: Labimotion::ElementKlassEntity, root: 'klass'
212
+ msg = create_repo_klass(params, current_user, request.headers['Origin'])
213
+ klass = Labimotion::ElementKlassEntity.represent(ElementKlass.all)
214
+ { status: msg[:status], message: msg[:message], klass: klass }
181
215
  rescue StandardError => e
182
216
  Labimotion.log_exception(e, current_user)
183
217
  { error: e.message }
@@ -197,6 +231,9 @@ module Labimotion
197
231
  end
198
232
  post do
199
233
  deactivate_klass(params)
234
+ rescue StandardError => e
235
+ Labimotion.log_exception(e, current_user)
236
+ raise e
200
237
  end
201
238
  end
202
239
 
@@ -209,6 +246,9 @@ module Labimotion
209
246
  delete ':id' do
210
247
  delete_klass(params)
211
248
  status 201
249
+ rescue StandardError => e
250
+ Labimotion.log_exception(e, current_user)
251
+ raise e
212
252
  end
213
253
  end
214
254
 
@@ -225,7 +265,10 @@ module Labimotion
225
265
  @klz = fetch_klass(params[:klass], params[:id])
226
266
  end
227
267
  post do
228
- update_template(params)
268
+ update_template(params, current_user)
269
+ rescue StandardError => e
270
+ Labimotion.log_exception(e, current_user)
271
+ raise e
229
272
  end
230
273
  end
231
274
 
@@ -237,10 +280,10 @@ module Labimotion
237
280
  optional :from_date, type: Integer, desc: 'created_date from in ms'
238
281
  optional :to_date, type: Integer, desc: 'created_date to in ms'
239
282
  optional :filter_created_at, type: Boolean, desc: 'filter by created at or updated at'
283
+ optional :sort_column, type: String, desc: 'sort by updated_at or selected layers property'
240
284
  end
241
285
  paginate per_page: 7, offset: 0, max_per_page: 100
242
286
  get do
243
-
244
287
  scope = list_serialized_elements(params, current_user)
245
288
 
246
289
  reset_pagination_page(scope)
@@ -256,6 +299,9 @@ module Labimotion
256
299
  end
257
300
  end
258
301
  { generic_elements: generic_elements }
302
+ rescue StandardError => e
303
+ Labimotion.log_exception(e, current_user)
304
+ { generic_elements: [] }
259
305
  end
260
306
 
261
307
  desc 'Return serialized element by id'
@@ -272,7 +318,7 @@ module Labimotion
272
318
  if Labimotion::IS_RAILS5 == true
273
319
  {
274
320
  element: ElementPermissionProxy.new(current_user, element, user_ids).serialized,
275
- attachments: Entities::AttachmentEntity.represent(element.attachments)
321
+ attachments: attach_thumbnail(element&.attachments)
276
322
  }
277
323
  else
278
324
  {
@@ -280,9 +326,11 @@ module Labimotion
280
326
  element,
281
327
  detail_levels: ElementDetailLevelCalculator.new(user: current_user, element: element).detail_levels,
282
328
  ),
283
- attachments: Entities::AttachmentEntity.represent(element.attachments),
329
+ attachments: attach_thumbnail(element&.attachments)
284
330
  }
285
331
  end
332
+ rescue StandardError => e
333
+ Labimotion.log_exception(e, current_user)
286
334
  end
287
335
  end
288
336
 
@@ -302,7 +350,7 @@ module Labimotion
302
350
  if Labimotion::IS_RAILS5 == true
303
351
  {
304
352
  element: ElementPermissionProxy.new(current_user, element, user_ids).serialized,
305
- attachments: Entities::AttachmentEntity.represent(element.attachments)
353
+ attachments: attach_thumbnail(element&.attachments)
306
354
  }
307
355
  else
308
356
  present(
@@ -338,7 +386,7 @@ module Labimotion
338
386
  if Labimotion::IS_RAILS5 == true
339
387
  {
340
388
  element: ElementPermissionProxy.new(current_user, element, user_ids).serialized,
341
- attachments: Entities::AttachmentEntity.represent(element.attachments)
389
+ attachments: attach_thumbnail(element&.attachments)
342
390
  }
343
391
  else
344
392
  {
@@ -346,7 +394,7 @@ module Labimotion
346
394
  element,
347
395
  detail_levels: ElementDetailLevelCalculator.new(user: current_user, element: element).detail_levels,
348
396
  ),
349
- attachments: Entities::AttachmentEntity.represent(element.attachments),
397
+ attachments: attach_thumbnail(element&.attachments),
350
398
  }
351
399
  end
352
400
  rescue StandardError => e
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'open-uri'
4
+ require 'labimotion/models/hub_log'
4
5
 
5
6
  # Belong to Chemotion module
6
7
  module Labimotion
@@ -19,20 +20,25 @@ module Labimotion
19
20
  list = "Labimotion::#{params[:klass]}".constantize.where(is_active: true).where.not(released_at: nil)
20
21
  list = list.where(is_generic: true) if params[:klass] == 'ElementKlass'
21
22
  entities = Labimotion::GenericPublicEntity.represent(list, displayed: params[:with_props])
22
- # entities.length > 1 ? de_encode_json(entities) : []
23
+ rescue StandardError => e
24
+ Labimotion.log_exception(e, current_user)
25
+ []
23
26
  end
24
27
  end
25
28
  namespace :fetch do
26
29
  desc "get active generic templates"
27
30
  params do
28
31
  requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
29
- # requires :fqdn, type: Integer, desc: 'FQDN'
32
+ requires :origin, type: String, desc: 'origin'
30
33
  requires :identifier, type: String, desc: 'Identifier'
31
34
  end
32
- get do
35
+ post do
33
36
  entity = "Labimotion::#{params[:klass]}".constantize.find_by(identifier: params[:identifier])
37
+ Labimotion::HubLog.create(klass: entity, origin: params[:origin], uuid: entity.uuid, version: entity.version)
34
38
  "Labimotion::#{params[:klass]}Entity".constantize.represent(entity)
35
- # entities.length > 1 ? de_encode_json(entities) : []
39
+ rescue StandardError => e
40
+ Labimotion.log_exception(e, current_user)
41
+ raise e
36
42
  end
37
43
  end
38
44
 
@@ -45,6 +51,9 @@ module Labimotion
45
51
  list = Labimotion::ElementKlass.where(is_active: true) if params[:generic_only].present? && params[:generic_only] == true
46
52
  list = Labimotion::ElementKlass.where(is_active: true) unless params[:generic_only].present? && params[:generic_only] == true
47
53
  list.pluck(:name)
54
+ rescue StandardError => e
55
+ Labimotion.log_exception(e, current_user)
56
+ []
48
57
  end
49
58
  end
50
59
 
@@ -118,7 +118,7 @@ module Labimotion
118
118
  namespace :fetch_repo do
119
119
  desc 'fetch Generic Segment Klass from Chemotion Repository'
120
120
  get do
121
- fetch_repo('SegmentKlass')
121
+ fetch_repo('SegmentKlass', current_user)
122
122
  rescue StandardError => e
123
123
  Labimotion.log_exception(e, current_user)
124
124
  { error: e.message }
@@ -131,8 +131,9 @@ module Labimotion
131
131
  requires :identifier, type: String, desc: 'Identifier'
132
132
  end
133
133
  post do
134
- create_repo_klass(params, current_user)
135
- present SegmentKlass.all, with: Labimotion::SegmentKlassEntity, root: 'klass'
134
+ msg = create_repo_klass(params, current_user, request.headers['Origin'])
135
+ klass = Labimotion::SegmentKlassEntity.represent(SegmentKlass.all)
136
+ { status: msg[:status], message: msg[:message], klass: klass }
136
137
  rescue StandardError => e
137
138
  Labimotion.log_exception(e, current_user)
138
139
  ## { error: e.message }
@@ -5,6 +5,7 @@ require 'labimotion/entities/application_entity'
5
5
  # Entity module
6
6
  module Labimotion
7
7
  class GenericPublicEntity < Labimotion::ApplicationEntity
8
+ expose! :uuid
8
9
  expose! :name
9
10
  expose! :desc
10
11
  expose! :icon_name
@@ -12,6 +13,7 @@ module Labimotion
12
13
  expose! :klass_name
13
14
  expose! :label
14
15
  expose! :identifier
16
+ expose! :version
15
17
  expose! :released_at
16
18
  expose! :properties_release, if: :displayed
17
19
  expose :element_klass do |obj|
@@ -13,23 +13,32 @@ module Labimotion
13
13
  end
14
14
  end
15
15
 
16
- def create_repo_klass(params, current_user)
17
- response = Labimotion::TemplateHub.fetch_identifier('DatasetKlass', params[:identifier])
16
+ def create_repo_klass(params, current_user, origin)
17
+ response = Labimotion::TemplateHub.fetch_identifier('DatasetKlass', params[:identifier], origin)
18
18
  attributes = response.slice('ols_term_id', 'label', 'desc', 'uuid', 'identifier', 'properties_release', 'version') # .except(:id, :is_active, :place, :created_by, :created_at, :updated_at)
19
- attributes['properties_template'] = response['properties_release']
19
+ attributes['properties_release']['identifier'] = attributes['identifier']
20
+ attributes['properties_template'] = attributes['properties_release']
20
21
  attributes['place'] = ((Labimotion::DatasetKlass.all.length * 10) || 0) + 10
21
22
  attributes['is_active'] = false
22
23
  attributes['updated_by'] = current_user.id
23
24
  attributes['sync_by'] = current_user.id
24
25
  attributes['sync_time'] = DateTime.now
25
- if Labimotion::DatasetKlass.find_by(ols_term_id: attributes['ols_term_id']).present?
26
- ds = Labimotion::DatasetKlass.find_by(ols_term_id: attributes['ols_term_id'])
27
- ds.update!(attributes)
26
+ dataset_klass = Labimotion::DatasetKlass.find_by(ols_term_id: attributes['ols_term_id'])
27
+ if dataset_klass.present?
28
+ if dataset_klass['uuid'] == attributes['uuid'] && dataset_klass['version'] == attributes['version']
29
+ { status: 'success', message: "This dataset: #{attributes['label']} has the latest version!" }
30
+ else
31
+ ds = Labimotion::DatasetKlass.find_by(ols_term_id: attributes['ols_term_id'])
32
+ ds.update!(attributes)
33
+ ds.create_klasses_revision(current_user)
34
+ { status: 'success', message: "This dataset: [#{attributes['label']}] has been upgraded to the version: #{attributes['version']}!" }
35
+ end
28
36
  else
29
37
  attributes['created_by'] = current_user.id
30
38
  ds = Labimotion::DatasetKlass.create!(attributes)
39
+ ds.create_klasses_revision(current_user)
40
+ { status: 'success', message: "The dataset: #{attributes['label']} has been created using version: #{attributes['version']}!" }
31
41
  end
32
- ds.create_klasses_revision(current_user.id)
33
42
  rescue StandardError => e
34
43
  Labimotion.log_exception(e, current_user)
35
44
  # { error: e.message }
@@ -20,12 +20,10 @@ module Labimotion
20
20
  uuid = SecureRandom.uuid
21
21
  template = { uuid: uuid, layers: {}, select_options: {} }
22
22
  attributes = declared(params, include_missing: false)
23
- if attributes[:properties_template].present?
24
- attributes[:properties_template]['uuid'] = uuid
25
- attributes[:properties_template] = template
26
- attributes[:properties_template]['pkg'] = Labimotion::Utils.pkg(attributes[:properties_template]['pkg'])
27
- attributes[:properties_template]['klass'] = 'ElementKlass'
28
- end
23
+ attributes[:properties_template] = template if attributes[:properties_template].nil?
24
+ attributes[:properties_template]['uuid'] = uuid
25
+ attributes[:properties_template]['pkg'] = Labimotion::Utils.pkg(attributes[:properties_template]['pkg'])
26
+ attributes[:properties_template]['klass'] = 'ElementKlass'
29
27
  attributes[:is_active] = false
30
28
  attributes[:uuid] = uuid
31
29
  attributes[:released_at] = DateTime.now
@@ -34,7 +32,7 @@ module Labimotion
34
32
 
35
33
  new_klass = Labimotion::ElementKlass.create!(attributes)
36
34
  new_klass.reload
37
- new_klass.create_klasses_revision(current_user.id)
35
+ new_klass.create_klasses_revision(current_user)
38
36
  klass_names_file = Rails.root.join('app/packs/klasses.json')
39
37
  klasses = Labimotion::ElementKlass.where(is_active: true)&.pluck(:name) || []
40
38
  File.write(klass_names_file, klasses)
@@ -71,6 +69,7 @@ module Labimotion
71
69
  params[:properties]['klass_uuid'] = klass[:uuid]
72
70
  params[:properties]['pkg'] = Labimotion::Utils.pkg(params[:properties]['pkg'])
73
71
  params[:properties]['klass'] = 'Element'
72
+ params[:properties]['identifier'] = klass[:identifier]
74
73
  properties = params[:properties]
75
74
  properties.delete('flow') unless properties['flow'].nil?
76
75
  properties.delete('flowObject') unless properties['flowObject'].nil?
@@ -160,7 +159,7 @@ module Labimotion
160
159
  att_ary = create_attachments(
161
160
  params[:attfiles],
162
161
  params[:delfiles],
163
- params[:att_type],
162
+ "Labimotion::#{params[:att_type]}",
164
163
  params[:att_id],
165
164
  params[:attfilesIdentifier],
166
165
  current_user.id
@@ -175,8 +174,7 @@ module Labimotion
175
174
  true
176
175
  rescue StandardError => e
177
176
  Labimotion.log_exception(e, current_user)
178
- ## false
179
- raise e
177
+ false
180
178
  end
181
179
 
182
180
  def element_revisions(params)
@@ -247,7 +245,7 @@ module Labimotion
247
245
  .where(
248
246
  element_klasses: { name: params[:el_type] },
249
247
  collections_elements: { collection_id: collection_id },
250
- ).includes(:tag, collections: :sync_collections_users).order('created_at DESC')
248
+ ).includes(:tag, collections: :sync_collections_users)
251
249
  else
252
250
  Labimotion::Element.none
253
251
  end
@@ -256,20 +254,46 @@ module Labimotion
256
254
  from = params[:from_date]
257
255
  to = params[:to_date]
258
256
  by_created_at = params[:filter_created_at] || false
259
- scope = scope.created_time_from(Time.at(from)) if from && by_created_at
260
- scope = scope.created_time_to(Time.at(to) + 1.day) if to && by_created_at
261
- scope = scope.updated_time_from(Time.at(from)) if from && !by_created_at
262
- scope = scope.updated_time_to(Time.at(to) + 1.day) if to && !by_created_at
257
+ if params[:sort_column]&.include?('.')
258
+ layer, field = params[:sort_column].split('.')
259
+
260
+ element_klass = Labimotion::ElementKlass.find_by(name: params[:el_type])
261
+ allowed_fields = element_klass.properties_release.dig('layers', layer, 'fields')&.pluck('field') || []
262
+
263
+ if field.in?(allowed_fields)
264
+ query = ActiveRecord::Base.sanitize_sql(
265
+ [
266
+ "LEFT JOIN LATERAL(
267
+ SELECT field->'value' AS value
268
+ FROM jsonb_array_elements(properties->'layers'->:layer->'fields') a(field)
269
+ WHERE field->>'field' = :field
270
+ ) a ON true",
271
+ { layer: layer, field: field },
272
+ ],
273
+ )
274
+ scope = scope.joins(query).order('value ASC NULLS FIRST')
275
+ else
276
+ scope = scope.order(updated_at: :desc)
277
+ end
278
+ else
279
+ scope = scope.order(updated_at: :desc)
280
+ end
281
+
282
+ scope = scope.elements_created_time_from(Time.at(from)) if from && by_created_at
283
+ scope = scope.elements_created_time_to(Time.at(to) + 1.day) if to && by_created_at
284
+ scope = scope.elements_updated_time_from(Time.at(from)) if from && !by_created_at
285
+ scope = scope.elements_updated_time_to(Time.at(to) + 1.day) if to && !by_created_at
263
286
  scope
264
287
  rescue StandardError => e
265
288
  Labimotion.log_exception(e, current_user)
266
289
  raise e
267
290
  end
268
291
 
269
- def create_repo_klass(params, current_user)
270
- response = Labimotion::TemplateHub.fetch_identifier('ElementKlass', params[:identifier])
271
- attributes = response.slice('name', 'label', 'desc', 'icon_name', 'klass_prefix', 'is_generic', 'identifier', 'properties_release', 'version') # .except(:id, :is_active, :place, :created_by, :created_at, :updated_at)
272
- attributes['properties_template'] = response['properties_release']
292
+ def create_repo_klass(params, current_user, origin)
293
+ response = Labimotion::TemplateHub.fetch_identifier('ElementKlass', params[:identifier], origin)
294
+ attributes = response.slice('name', 'label', 'desc', 'icon_name', 'uuid', 'klass_prefix', 'is_generic', 'identifier', 'properties_release', 'version')
295
+ attributes['properties_release']['identifier'] = attributes['identifier']
296
+ attributes['properties_template'] = attributes['properties_release']
273
297
  attributes['place'] = ((Labimotion::DatasetKlass.all.length * 10) || 0) + 10
274
298
  attributes['is_active'] = false
275
299
  attributes['updated_by'] = current_user.id
@@ -278,17 +302,38 @@ module Labimotion
278
302
 
279
303
  element_klass = Labimotion::ElementKlass.find_by(identifier: attributes['identifier'])
280
304
  if element_klass.present?
281
- element_klass.update!(attributes)
305
+ if element_klass['uuid'] == attributes['uuid'] && element_klass['version'] == attributes['version']
306
+ { status: 'success', message: "This element: #{attributes['name']} has the latest version!" }
307
+ else
308
+ element_klass.update!(attributes)
309
+ element_klass.create_klasses_revision(current_user)
310
+ { status: 'success', message: "This element: [#{attributes['name']}] has been upgraded to the version: #{attributes['version']}!" }
311
+ end
282
312
  else
283
- attributes['created_by'] = current_user.id
284
- element_klass = Labimotion::ElementKlass.create!(attributes)
313
+ exist_klass = Labimotion::ElementKlass.find_by(name: attributes['name'])
314
+ if exist_klass.present?
315
+ { status: 'error', message: "The name [#{attributes['name']}] is already in use." }
316
+ else
317
+ attributes['created_by'] = current_user.id
318
+ element_klass = Labimotion::ElementKlass.create!(attributes)
319
+ element_klass.create_klasses_revision(current_user)
320
+ { status: 'success', message: "The element: #{attributes['name']} has been created using version: #{attributes['version']}!" }
321
+ end
285
322
  end
286
- element_klass.create_klasses_revision(current_user.id)
287
323
  rescue StandardError => e
288
324
  Labimotion.log_exception(e, current_user)
289
325
  # { error: e.message }
290
326
  raise e
291
327
  end
292
328
 
329
+ def attach_thumbnail(_attachments)
330
+ attachments = _attachments&.map do |attachment|
331
+ _att = Entities::AttachmentEntity.represent(attachment, serializable: true)
332
+ _att[:thumbnail] = attachment.thumb ? Base64.encode64(attachment.read_thumbnail) : nil
333
+ _att
334
+ end
335
+ attachments
336
+ end
337
+
293
338
  end
294
339
  end
@@ -41,22 +41,22 @@ module Labimotion
41
41
  raise e
42
42
  end
43
43
 
44
- def update_template(params)
44
+ def update_template(params, current_user)
45
45
  klz = fetch_klass(params[:klass], params[:id])
46
46
  uuid = SecureRandom.uuid
47
47
  properties = params[:properties_template]
48
48
  properties['uuid'] = uuid
49
-
50
49
  klz.version = Labimotion::Utils.next_version(params[:release], klz.version)
51
50
  properties['version'] = klz.version
52
- properties['pkg'] = Labimotion::Utils.pkg(params['pkg'] || klz.properties_template['pkg'])
51
+ properties['pkg'] = Labimotion::Utils.pkg(params['pkg'] || (klz.properties_template && klz.properties_template['pkg']))
53
52
  properties['klass'] = klz.class.name.split('::').last
53
+ properties['identifier'] = klz.identifier
54
54
  properties.delete('eln') if properties['eln'].present?
55
55
  klz.updated_by = current_user.id
56
56
  klz.properties_template = properties
57
57
  klz.save!
58
58
  klz.reload
59
- klz.create_klasses_revision(current_user.id) if params[:release] != 'draft'
59
+ klz.create_klasses_revision(current_user) if params[:release] != 'draft'
60
60
  klz
61
61
  rescue StandardError => e
62
62
  Labimotion.log_exception(e, current_user)
@@ -188,37 +188,37 @@ module Labimotion
188
188
  raise e
189
189
  end
190
190
 
191
- def create_attachments(files, del_files, type, id, user_id)
191
+ def create_attachments(files, del_files, type, id, identifier, user_id)
192
192
  attach_ary = []
193
- (files || []).each do |file|
193
+ (files || []).each_with_index do |file, index|
194
194
  next unless (tempfile = file[:tempfile])
195
195
 
196
- a = Attachment.new(
196
+ att = Attachment.new(
197
197
  bucket: file[:container_id],
198
198
  filename: file[:filename],
199
199
  con_state: Labimotion::ConState::NONE,
200
200
  file_path: file[:tempfile],
201
201
  created_by: user_id,
202
202
  created_for: user_id,
203
+ identifier: identifier[index],
203
204
  content_type: file[:type],
204
205
  attachable_type: type,
205
206
  attachable_id: id,
206
207
  )
207
208
  begin
208
- a.save!
209
- attach_ary.push(a.id)
209
+ att.save!
210
+ attach_ary.push(att.id)
210
211
  ensure
211
212
  tempfile.close
212
213
  tempfile.unlink
213
214
  end
214
215
  end
215
216
  unless (del_files || []).empty?
216
- Attachment.where('id IN (?) AND attachable_type = (?)', del_files.map!(&:to_i),
217
- type).update_all(attachable_id: nil)
217
+ Attachment.where('id IN (?) AND attachable_type = (?)', del_files.map!(&:to_i), type).update_all(attachable_id: nil)
218
218
  end
219
219
  attach_ary
220
220
  rescue StandardError => e
221
- Labimotion.log_exception(e, current_user)
221
+ Labimotion.log_exception(e)
222
222
  raise e
223
223
  end
224
224
 
@@ -230,15 +230,16 @@ module Labimotion
230
230
  Chemotion::Generic::Fetch::Template.list(API::TARGET, name)
231
231
  end
232
232
 
233
- def fetch_repo(name)
234
- current_klasses = "Labimotion::#{name}".constantize.where.not(identifier: nil)&.pluck(:identifier) || []
233
+ def fetch_repo(name, current_user)
234
+ # current_klasses = "Labimotion::#{name}".constantize.where.not(identifier: nil)&.pluck(:identifier) || []
235
235
  response = Labimotion::TemplateHub.list(name)
236
- if response && response['list'].present? && response['list'].length.positive?
237
- filter_list = response['list']&.reject do |ds|
238
- current_klasses.include?(ds['identifier'])
239
- end || []
240
- end
241
- filter_list || []
236
+ # if response && response['list'].present? && response['list'].length.positive?
237
+ # filter_list = response['list']&.reject do |ds|
238
+ # current_klasses.include?(ds['identifier'])
239
+ # end || []
240
+ # end
241
+ # filter_list || []
242
+ (response && response['list']) || []
242
243
  rescue StandardError => e
243
244
  Labimotion.log_exception(e, current_user)
244
245
  { error: 'Cannot connect to Chemotion Repository' }
@@ -38,7 +38,7 @@ module Labimotion
38
38
  attributes[:properties_release] = attributes[:properties_template]
39
39
  klass = Labimotion::SegmentKlass.create!(attributes)
40
40
  klass.reload
41
- klass.create_klasses_revision(current_user.id)
41
+ klass.create_klasses_revision(current_user)
42
42
  klass
43
43
  rescue StandardError => e
44
44
  Labimotion.log_exception(e, current_user)
@@ -63,10 +63,11 @@ module Labimotion
63
63
  raise e
64
64
  end
65
65
 
66
- def create_repo_klass(params, current_user)
67
- response = Labimotion::TemplateHub.fetch_identifier('SegmentKlass', params[:identifier])
68
- attributes = response.slice('label', 'desc', 'uuid', 'identifier', 'released_at', 'properties_release', 'version') # .except(:id, :is_active, :place, :created_by, :created_at, :updated_at)
69
- attributes['properties_template'] = response['properties_release']
66
+ def create_repo_klass(params, current_user, origin)
67
+ response = Labimotion::TemplateHub.fetch_identifier('SegmentKlass', params[:identifier], origin)
68
+ attributes = response.slice('label', 'desc', 'uuid', 'identifier', 'released_at', 'properties_release', 'version')
69
+ attributes['properties_release']['identifier'] = attributes['identifier']
70
+ attributes['properties_template'] = attributes['properties_release']
70
71
  attributes['place'] = ((Labimotion::SegmentKlass.all.length * 10) || 0) + 10
71
72
  attributes['is_active'] = false
72
73
  attributes['updated_by'] = current_user.id
@@ -74,8 +75,8 @@ module Labimotion
74
75
  attributes['sync_time'] = DateTime.now
75
76
 
76
77
  element_klass = Labimotion::ElementKlass.find_by(identifier: response['element_klass']['identifier'])
77
- element_klass = Labimotion::ElementKlass.find_by(name: response['element_klass']['name']) if element_klass.nil?
78
- return { error: 'ElementKlass not found' } if element_klass.nil?
78
+ element_klass = Labimotion::ElementKlass.find_by(name: response['element_klass']['name'], is_generic: false) if element_klass.nil?
79
+ return { status: 'error', message: "The element [#{response['element_klass']['name']}] does not exist in this instance" } if element_klass.nil?
79
80
 
80
81
  # el_attributes = response['element_klass'].slice('name', 'label', 'desc', 'uuid', 'identifier', 'icon_name', 'klass_prefix', 'is_generic', 'released_at')
81
82
  # el_attributes['properties_template'] = response['element_klass']['properties_release']
@@ -84,12 +85,24 @@ module Labimotion
84
85
  attributes['element_klass_id'] = element_klass.id
85
86
  segment_klass = Labimotion::SegmentKlass.find_by(identifier: attributes['identifier'])
86
87
  if segment_klass.present?
87
- segment_klass.update!(attributes)
88
+ if segment_klass['uuid'] == attributes['uuid'] && segment_klass['version'] == attributes['version']
89
+ { status: 'success', message: "This segment: #{attributes['label']} has the latest version!" }
90
+ else
91
+ segment_klass.update!(attributes)
92
+ segment_klass.create_klasses_revision(current_user)
93
+ { status: 'success', message: "This segment: [#{attributes['label']}] has been upgraded to the version: #{attributes['version']}!" }
94
+ end
88
95
  else
89
- attributes['created_by'] = current_user.id
90
- segment_klass = Labimotion::SegmentKlass.create!(attributes)
96
+ exist_klass = Labimotion::SegmentKlass.find_by(label: attributes['label'], element_klass_id: element_klass.id)
97
+ if exist_klass.present?
98
+ { status: 'error', message: "The segment [#{attributes['label']}] is already in use." }
99
+ else
100
+ attributes['created_by'] = current_user.id
101
+ segment_klass = Labimotion::SegmentKlass.create!(attributes)
102
+ segment_klass.create_klasses_revision(current_user)
103
+ { status: 'success', message: "The segment: #{attributes['label']} has been created using version: #{attributes['version']}!" }
104
+ end
91
105
  end
92
- segment_klass.create_klasses_revision(current_user.id)
93
106
  rescue StandardError => e
94
107
  Labimotion.log_exception(e, current_user)
95
108
  raise e
@@ -4,6 +4,7 @@ require 'net/http'
4
4
  require 'uri'
5
5
  require 'json'
6
6
  require 'date'
7
+ require 'labimotion/version'
7
8
  require 'labimotion/utils/utils'
8
9
 
9
10
  # rubocop: disable Metrics/AbcSize
@@ -116,7 +117,7 @@ module Labimotion
116
117
  )
117
118
  # att.attachment_attacher.attach(tmp_file)
118
119
  if att.valid? && Labimotion::IS_RAILS5 == false
119
- att.attachment_attacher.create_derivatives
120
+ ## att.attachment_attacher.create_derivatives
120
121
  att.save!
121
122
  end
122
123
  if att.valid? && Labimotion::IS_RAILS5 == true
@@ -143,12 +144,16 @@ module Labimotion
143
144
  end
144
145
 
145
146
  def self.process(data)
146
- return if data[:a]&.attachable_type != 'Container'
147
-
147
+ return data[:a].con_state if data[:a]&.attachable_type != 'Container'
148
148
  response = nil
149
149
  begin
150
150
  ofile = Rails.root.join(data[:f], data[:a].filename)
151
- FileUtils.cp(data[:a].store.path, ofile)
151
+ if Labimotion::IS_RAILS5 == true
152
+ FileUtils.cp(data[:a].store.path, ofile)
153
+ else
154
+ FileUtils.cp(data[:a].attachment_url, ofile)
155
+ end
156
+
152
157
  File.open(ofile, 'r') do |f|
153
158
  body = { file: f }
154
159
  response = HTTParty.post(
@@ -160,12 +165,14 @@ module Labimotion
160
165
  end
161
166
  if response.ok?
162
167
  Labimotion::Converter.handle_response(data[:a], response)
168
+ Labimotion::ConState::PROCESSED
163
169
  else
164
170
  Labimotion::Converter.logger.error ["Converter Response Error: id: [#{data[:a]&.id}], filename: [#{data[:a]&.filename}], response: #{response}"].join($INPUT_RECORD_SEPARATOR)
171
+ Labimotion::ConState::ERROR
165
172
  end
166
- response
167
173
  rescue StandardError => e
168
- raise e
174
+ Labimotion::Converter.logger.error ["process fail: #{id}", e.message, *e.backtrace].join($INPUT_RECORD_SEPARATOR)
175
+ Labimotion::ConState::ERROR
169
176
  ensure
170
177
  FileUtils.rm_f(ofile)
171
178
  end
@@ -174,14 +181,14 @@ module Labimotion
174
181
  def self.jcamp_converter(id)
175
182
  resp = nil
176
183
  begin
184
+
177
185
  data = Labimotion::Converter.vor_conv(id)
178
186
  return if data.nil?
179
187
 
180
- resp = Labimotion::Converter.process(data)
181
- resp&.success? ? Labimotion::ConState::PROCESSED : Labimotion::ConState::ERROR
188
+ Labimotion::Converter.process(data)
182
189
  rescue StandardError => e
183
- Labimotion::ConState::ERROR
184
190
  Labimotion::Converter.logger.error ["jcamp_converter fail: #{id}", e.message, *e.backtrace].join($INPUT_RECORD_SEPARATOR)
191
+ Labimotion::ConState::ERROR
185
192
  end
186
193
  end
187
194
 
@@ -227,6 +234,8 @@ module Labimotion
227
234
  new_prop = dataset.properties
228
235
  dsr.each do |ds|
229
236
  layer = layers[ds[:layer]]
237
+ next if layer.nil? || layer['fields'].nil?
238
+
230
239
  fields = layer['fields'].select{ |f| f['field'] == ds[:field] }
231
240
  fi = fields&.first
232
241
  idx = layer['fields'].find_index(fi)
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'export_table'
3
+ require 'labimotion/version'
3
4
 
4
5
  module Labimotion
5
6
  ## ExportDataset
@@ -100,10 +101,19 @@ module Labimotion
100
101
  cds = Container.find(id)
101
102
  cds.attachments.where(aasm_state: 'csv').each do |att|
102
103
  name = File.basename(att.filename, '.csv')
103
- sheet = @xfile.workbook.add_worksheet(name: name)
104
- File.open(att.store.path) do |fi|
105
- fi.each_line do |line|
106
- sheet.add_row(line.split(','))
104
+ sheet = @xfile.workbook.add_worksheet(name: name.slice(0, 25))
105
+
106
+ if Labimotion::IS_RAILS5 == true
107
+ File.open(att.store.path) do |fi|
108
+ fi.each_line do |line|
109
+ sheet.add_row(line.split(','))
110
+ end
111
+ end
112
+ else
113
+ File.open(att.attachment_url) do |fi|
114
+ fi.each_line do |line|
115
+ sheet.add_row(line.split(','))
116
+ end
107
117
  end
108
118
  end
109
119
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'labimotion/version'
3
4
  require 'labimotion/utils/utils'
4
5
 
5
6
  module Labimotion
@@ -7,8 +8,8 @@ module Labimotion
7
8
  class NmrMapper
8
9
  def self.is_brucker_binary(id)
9
10
  att = Attachment.find(id)
10
- if att&.attachment_attacher&.file&.url
11
- Zip::File.open(att.attachment_attacher.file.url) do |zip_file|
11
+ if Labimotion::IS_RAILS5 == true
12
+ Zip::File.open(att.store.path) do |zip_file|
12
13
  zip_file.each do |entry|
13
14
  if entry.name.include?('/pdata/') && entry.name.include?('parm.txt')
14
15
  metadata = entry.get_input_stream.read.force_encoding('UTF-8')
@@ -16,6 +17,17 @@ module Labimotion
16
17
  end
17
18
  end
18
19
  end
20
+ else
21
+ if att&.attachment_attacher&.file&.url
22
+ Zip::File.open(att.attachment_attacher.file.url) do |zip_file|
23
+ zip_file.each do |entry|
24
+ if entry.name.include?('/pdata/') && entry.name.include?('parm.txt')
25
+ metadata = entry.get_input_stream.read.force_encoding('UTF-8')
26
+ return metadata
27
+ end
28
+ end
29
+ end
30
+ end
19
31
  end
20
32
  nil
21
33
  end
@@ -1,18 +1,33 @@
1
1
  # frozen_string_literal: true
2
+ require 'labimotion/version'
2
3
  require 'labimotion/utils/utils'
3
4
 
4
5
  module Labimotion
5
6
  class NmrMapperRepo
6
7
  def self.is_brucker_binary(id)
7
8
  att = Attachment.find(id)
8
- Zip::File.open(att.store.path) do |zip_file|
9
- zip_file.each do |entry|
10
- if entry.name.include?('/pdata/') && entry.name.include?('parm.txt')
11
- metadata = entry.get_input_stream.read.force_encoding('UTF-8')
12
- return metadata
9
+ if Labimotion::IS_RAILS5 == true
10
+ Zip::File.open(att.store.path) do |zip_file|
11
+ zip_file.each do |entry|
12
+ if entry.name.include?('/pdata/') && entry.name.include?('parm.txt')
13
+ metadata = entry.get_input_stream.read.force_encoding('UTF-8')
14
+ return metadata
15
+ end
16
+ end
17
+ end
18
+ else
19
+ if att&.attachment_attacher&.file&.url
20
+ Zip::File.open(att.attachment_attacher.file.url) do |zip_file|
21
+ zip_file.each do |entry|
22
+ if entry.name.include?('/pdata/') && entry.name.include?('parm.txt')
23
+ metadata = entry.get_input_stream.read.force_encoding('UTF-8')
24
+ return metadata
25
+ end
26
+ end
13
27
  end
14
28
  end
15
29
  end
30
+
16
31
  nil
17
32
  end
18
33
 
@@ -43,11 +43,15 @@ module Labimotion
43
43
  error!('Cannot connect to Chemotion Repository', 401)
44
44
  end
45
45
 
46
- def self.fetch_identifier(klass, identifier)
47
- # body = { klass: klass, identifier: identifier }
48
- response = HTTParty.get("#{uri('fetch')}?klass=#{klass}&identifier=#{identifier}", timeout: 10)
46
+ def self.fetch_identifier(klass, identifier, origin)
47
+ body = { klass: klass, identifier: identifier, origin: origin }
48
+ response = HTTParty.post(
49
+ uri('fetch'),
50
+ body: body,
51
+ timeout: 10
52
+ )
49
53
  # response.parsed_response if response.code == 200
50
- JSON.parse(response.body) if response.code == 200
54
+ JSON.parse(response.body) if response.code == 201
51
55
  rescue StandardError => e
52
56
  Labimotion.log_exception(e)
53
57
  error!('Cannot connect to Chemotion Repository', 401)
@@ -36,6 +36,7 @@ module Labimotion
36
36
  when Labimotion::ConState::WAIT
37
37
  self.con_state = Labimotion::Converter.jcamp_converter(id)
38
38
  end
39
+ update_column(:con_state, con_state)
39
40
  end
40
41
  end
41
42
  end
@@ -23,6 +23,7 @@ module Labimotion
23
23
  uuid = SecureRandom.uuid
24
24
  props = args[:properties]
25
25
  props['pkg'] = Labimotion::Utils.pkg(props['pkg'])
26
+ props['identifier'] = klass.identifier if klass.identifier.present?
26
27
  props['uuid'] = uuid
27
28
  props['klass'] = 'Dataset'
28
29
 
@@ -1,13 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Labimotion
4
- module GenericKlassRevisions
4
+ ## Generic Klass Revisions Helpers
5
+ module GenericKlassRevisions
5
6
  extend ActiveSupport::Concern
6
7
  included do
7
8
  # has_many :element_klasses_revisions, dependent: :destroy
8
9
  end
9
10
 
10
- def create_klasses_revision(user_id=0)
11
+ def create_klasses_revision(current_user)
11
12
  properties_release = properties_template
12
13
  migrate_workflow if properties_release['flow'].present?
13
14
 
@@ -21,11 +22,19 @@ module Labimotion
21
22
  end
22
23
  properties_release['flowObject']['nodes'] = elements
23
24
  end
25
+ klass_attributes = {
26
+ uuid: properties_template['uuid'],
27
+ properties_template: properties_release,
28
+ properties_release: properties_release,
29
+ released_at: DateTime.now,
30
+ updated_by: current_user&.id,
31
+ released_by: current_user&.id,
32
+ }
24
33
 
25
- self.update!({ uuid: properties_template['uuid'], properties_template: properties_release, properties_release: properties_release, released_at: DateTime.now })
34
+ self.update!(klass_attributes)
26
35
  reload
27
36
  attributes = {
28
- released_by: user_id,
37
+ released_by: released_by,
29
38
  uuid: uuid,
30
39
  version: version,
31
40
  properties_release: properties_release,
@@ -41,13 +41,13 @@ module Labimotion
41
41
 
42
42
  def save_segments(**args) # rubocop:disable Metrics/AbcSize, Metrics/CyclomaticComplexity
43
43
  return if args[:segments].nil?
44
-
45
44
  segments = []
46
- args[:segments].each do |seg|
45
+ args[:segments]&.each do |seg|
47
46
  klass = Labimotion::SegmentKlass.find_by(id: seg['segment_klass_id'])
48
47
  uuid = SecureRandom.uuid
49
48
  props = seg['properties']
50
49
  props['pkg'] = Labimotion::Utils.pkg(props['pkg'])
50
+ props['identifier'] = klass.identifier if klass.identifier.present?
51
51
  props['uuid'] = uuid
52
52
  props['klass'] = 'Segment'
53
53
  segment = Labimotion::Segment.find_by(element_type: Labimotion::Utils.element_name(self.class.name), element_id: self.id, segment_klass_id: seg['segment_klass_id'])
@@ -58,7 +58,7 @@ module Labimotion
58
58
  next if segment.present?
59
59
 
60
60
  props['klass_uuid'] = klass.uuid
61
- segment = Labimotion::Segment.create!(properties_release: klass.properties_release, segment_klass_id: seg['segment_klass_id'], element_type: Labimotion::Utils.element_name(self.class.name), element_id: self.id, properties: props, created_by: args[:current_user_id], uuid: uuid, klass_uuid: klass.uuid)
61
+ segment = Labimotion::Segment.create!(properties_release: klass.properties_release, segment_klass_id: seg['segment_klass_id'], element_type: self.class.name, element_id: self.id, properties: props, created_by: args[:current_user_id], uuid: uuid, klass_uuid: klass.uuid)
62
62
  segments.push(segment)
63
63
  end
64
64
  segments
@@ -23,5 +23,14 @@ module Labimotion
23
23
  end
24
24
  properties
25
25
  end
26
+
27
+ def migrate_workflow
28
+ return if properties_template.nil? || properties_release.nil?
29
+
30
+ return if properties_template['flow'].nil? && properties_release['flow'].nil?
31
+
32
+ update_column(:properties_template, split_workflow(properties_template)) if properties_template['flow']
33
+ update_column(:properties_release, split_workflow(properties_release)) if properties_release['flow']
34
+ end
26
35
  end
27
36
  end
@@ -7,10 +7,12 @@ module Labimotion
7
7
  class Element < ApplicationRecord
8
8
  acts_as_paranoid
9
9
  self.table_name = :elements
10
- include PgSearch::Model
10
+ include PgSearch if Labimotion::IS_RAILS5 == true
11
+ include PgSearch::Model if Labimotion::IS_RAILS5 == false
11
12
  include ElementUIStateScopes
12
13
  include Collectable
13
14
  ## include AnalysisCodes
15
+ include ElementCodes
14
16
  include Taggable
15
17
  include Workflow
16
18
  include Segmentable
@@ -57,7 +59,7 @@ module Labimotion
57
59
 
58
60
 
59
61
  def attachments
60
- Attachment.where(attachable_id: self.id, attachable_type: 'Element')
62
+ Attachment.where(attachable_id: self.id, attachable_type: self.class.name)
61
63
  end
62
64
 
63
65
  def self.get_associated_samples(element_ids)
@@ -23,13 +23,5 @@ module Labimotion
23
23
  )
24
24
  end
25
25
 
26
- def migrate_workflow
27
- return if properties_template.nil? || properties_release.nil?
28
-
29
- return if properties_template['flow'].nil? && properties_release['flow'].nil?
30
-
31
- update_column(:properties_template, split_workflow(properties_template)) if properties_template['flow']
32
- update_column(:properties_release, split_workflow(properties_release)) if properties_release['flow']
33
- end
34
26
  end
35
27
  end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Labimotion
4
+ class HubLog < ApplicationRecord
5
+ self.table_name = :hub_logs
6
+ belongs_to :klass, polymorphic: true, optional: true
7
+ end
8
+ end
@@ -6,6 +6,7 @@ module Labimotion
6
6
  self.table_name = :segment_klasses
7
7
  acts_as_paranoid
8
8
  include GenericKlassRevisions
9
+ include Workflow
9
10
  belongs_to :element_klass, class_name: 'Labimotion::ElementKlass'
10
11
  has_many :segments, dependent: :destroy, class_name: 'Labimotion::Segment'
11
12
  has_many :segment_klasses_revisions, dependent: :destroy, class_name: 'Labimotion::SegmentKlassesRevision'
@@ -22,6 +22,26 @@ module Labimotion
22
22
  fetch_many.call(klasses, {'created_by' => 'User'})
23
23
  end
24
24
 
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
+ })
34
+ collection.elements.each do |element|
35
+
36
+ element, attachments = Labimotion::Export.fetch_properties(element, attachments, &fetch_one)
37
+ fetch_containers.call(element)
38
+ segment, @attachments = Labimotion::Export.fetch_segments(element, attachments, &fetch_one)
39
+ segments += segment if segment.present?
40
+ end
41
+
42
+ [segments, attachments]
43
+
44
+ end
25
45
 
26
46
  def self.fetch_segments(element, attachments, &fetch_one)
27
47
  element_type = element.class.name
@@ -81,7 +81,6 @@ module Labimotion
81
81
  end
82
82
 
83
83
  def self.pkg(pkg)
84
- byebug
85
84
  pkg = {} if pkg.nil?
86
85
  pkg['eln'] = Chemotion::Application.config.version
87
86
  pkg['labimotion'] = Labimotion::VERSION
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Labimotion
4
- # VERSION = '0.1.4'
5
- VERSION = '0.2.1'
6
- IS_RAILS5 = false
4
+ IS_RAILS5 = true
5
+ VERSION = '0.3.0' if Labimotion::IS_RAILS5 == true
6
+ VERSION = '1.0.6' if Labimotion::IS_RAILS5 == false
7
7
  end
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: 0.2.1
4
+ version: 0.3.0
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-08-23 00:00:00.000000000 Z
12
+ date: 2023-09-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -17,14 +17,14 @@ dependencies:
17
17
  requirements:
18
18
  - - "~>"
19
19
  - !ruby/object:Gem::Version
20
- version: 6.1.7
20
+ version: 5.2.0
21
21
  type: :runtime
22
22
  prerelease: false
23
23
  version_requirements: !ruby/object:Gem::Requirement
24
24
  requirements:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
- version: 6.1.7
27
+ version: 5.2.0
28
28
  description:
29
29
  email:
30
30
  - chia-lin.lin@kit.edu
@@ -84,6 +84,7 @@ files:
84
84
  - lib/labimotion/models/elements_element.rb
85
85
  - lib/labimotion/models/elements_revision.rb
86
86
  - lib/labimotion/models/elements_sample.rb
87
+ - lib/labimotion/models/hub_log.rb
87
88
  - lib/labimotion/models/segment.rb
88
89
  - lib/labimotion/models/segment_klass.rb
89
90
  - lib/labimotion/models/segment_klasses_revision.rb