labimotion 0.1.11 → 0.1.14

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1303b57a0c08ea23b3c81a83dd08374677a17cd1c7c107bb5e05930eb7ac8b44
4
- data.tar.gz: c668c97c8847ff134c3a085601d5774d2e3d502ab1e806c4d6b84fb0537c925b
3
+ metadata.gz: 4462059ccf7843ed6aee9d493e2fcadf9cb6675fd2e71652eb8ce670cd3e3630
4
+ data.tar.gz: bf3f3b3c664117b679b19ba27171ed37f45371e267a44988e0a709c98b9b66e7
5
5
  SHA512:
6
- metadata.gz: 7cf10a4dc830c1f1af18e8c0744a7d53b2ba94cd2ab61e63ea35901810e31db7def8dcfbe37690ea408444e80cb61a4a463b2a6717e4acdcd947c7548f5a4eef
7
- data.tar.gz: f11672099578786496bb2d4adfd325ef5ce148960db5cf812277afad1087b35ec2174aab4c568c1e207c5c56bde967fe06fd648e7237471f4c34593bbae35d1f
6
+ metadata.gz: ec3bfa245f202a31bb6e1a46104296b7ed7eab6500eabc7832adcaf0ded162492d46403459a476f89468ae8a513af83e5f8d23e057efd0820829be745c150e55
7
+ data.tar.gz: 04f4c1e4856c2a9909a487dfa4e2764aac737ac76379e892d07fd66da5347be2c55ec94281b7241bae57736c2667fe03250c945930295285b447850b9039fd92
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Labimotion
2
4
  ## Generic Dataset API
3
5
  class GenericDatasetAPI < Grape::API
@@ -21,6 +21,8 @@ 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)
24
26
  end
25
27
  end
26
28
 
@@ -32,6 +34,8 @@ module Labimotion
32
34
  get do
33
35
  list = klass_list(params[:generic_only])
34
36
  present list, with: Labimotion::ElementKlassEntity, root: 'klass'
37
+ rescue StandardError => e
38
+ Labimotion.log_exception(e, current_user)
35
39
  end
36
40
  end
37
41
 
@@ -67,6 +71,9 @@ module Labimotion
67
71
  post do
68
72
  authenticate_admin!('elements')
69
73
  update_element_klass(current_user, params)
74
+ rescue StandardError => e
75
+ Labimotion.log_exception(e, current_user)
76
+ raise e
70
77
  end
71
78
  end
72
79
 
@@ -79,6 +86,9 @@ module Labimotion
79
86
  get do
80
87
  list = list_klass_revisions(params)
81
88
  present list, with: Labimotion::KlassRevisionEntity, root: 'revisions'
89
+ rescue StandardError => e
90
+ Labimotion.log_exception(e, current_user)
91
+ []
82
92
  end
83
93
  end
84
94
 
@@ -90,6 +100,9 @@ module Labimotion
90
100
  get do
91
101
  list = element_revisions(params)
92
102
  present list, with: Labimotion::ElementRevisionEntity, root: 'revisions'
103
+ rescue StandardError => e
104
+ Labimotion.log_exception(e, current_user)
105
+ []
93
106
  end
94
107
  end
95
108
 
@@ -104,6 +117,9 @@ module Labimotion
104
117
  authenticate_admin!(params[:klass].gsub(/(Klass)/, 's').downcase)
105
118
  delete_klass_revision(params)
106
119
  status 201
120
+ rescue StandardError => e
121
+ Labimotion.log_exception(e, current_user)
122
+ raise e
107
123
  end
108
124
  end
109
125
 
@@ -117,6 +133,9 @@ module Labimotion
117
133
  post do
118
134
  delete_revision(params)
119
135
  status 201
136
+ rescue StandardError => e
137
+ Labimotion.log_exception(e, current_user)
138
+ raise e
120
139
  end
121
140
  end
122
141
 
@@ -129,6 +148,9 @@ module Labimotion
129
148
  klass = Labimotion::Segment.find(params[:id])
130
149
  list = klass.segments_revisions unless klass.nil?
131
150
  present list&.sort_by(&:created_at).reverse, with: Labimotion::SegmentRevisionEntity, root: 'revisions'
151
+ rescue StandardError => e
152
+ Labimotion.log_exception(e, current_user)
153
+ []
132
154
  end
133
155
  end
134
156
 
@@ -152,6 +174,8 @@ module Labimotion
152
174
  post do
153
175
  upload_generics_files(current_user, params)
154
176
  true
177
+ rescue StandardError => e
178
+ Labimotion.log_exception(e, current_user)
155
179
  end
156
180
  end
157
181
 
@@ -160,6 +184,30 @@ module Labimotion
160
184
  get do
161
185
  list = Labimotion::ElementKlass.all.sort_by { |e| e.place }
162
186
  present list, with: Labimotion::ElementKlassEntity, root: 'klass'
187
+ rescue StandardError => e
188
+ Labimotion.log_exception(e, current_user)
189
+ []
190
+ end
191
+ end
192
+
193
+ namespace :fetch_repo do
194
+ desc 'fetch Generic Element Klass from Chemotion Repository'
195
+ get do
196
+ fetch_repo('ElementKlass')
197
+ end
198
+ end
199
+
200
+ namespace :create_repo_klass do
201
+ desc 'create Generic Element Klass'
202
+ params do
203
+ requires :identifier, type: String, desc: 'Identifier'
204
+ end
205
+ post do
206
+ create_repo_klass(params, current_user)
207
+ present ElementKlass.all, with: Labimotion::ElementKlassEntity, root: 'klass'
208
+ rescue StandardError => e
209
+ Labimotion.log_exception(e, current_user)
210
+ { error: e.message }
163
211
  end
164
212
  end
165
213
 
@@ -176,6 +224,8 @@ module Labimotion
176
224
  end
177
225
  post do
178
226
  deactivate_klass(params)
227
+ rescue StandardError => e
228
+ Labimotion.log_exception(e, current_user)
179
229
  end
180
230
  end
181
231
 
@@ -188,6 +238,9 @@ module Labimotion
188
238
  delete ':id' do
189
239
  delete_klass(params)
190
240
  status 201
241
+ rescue StandardError => e
242
+ Labimotion.log_exception(e, current_user)
243
+ raise e
191
244
  end
192
245
  end
193
246
 
@@ -197,14 +250,17 @@ module Labimotion
197
250
  requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
198
251
  requires :id, type: Integer, desc: 'Klass ID'
199
252
  requires :properties_template, type: Hash
200
- optional :is_release, type: Boolean, default: false
253
+ optional :release, type: String, default: 'draft', desc: 'release status', values: %w[draft major minor patch]
201
254
  end
202
255
  after_validation do
203
256
  authenticate_admin!(params[:klass].gsub(/(Klass)/, 's').downcase)
204
257
  @klz = fetch_klass(params[:klass], params[:id])
205
258
  end
206
259
  post do
207
- update_template(params)
260
+ update_template(params, current_user)
261
+ rescue StandardError => e
262
+ Labimotion.log_exception(e, current_user)
263
+ raise e
208
264
  end
209
265
  end
210
266
 
@@ -216,10 +272,10 @@ module Labimotion
216
272
  optional :from_date, type: Integer, desc: 'created_date from in ms'
217
273
  optional :to_date, type: Integer, desc: 'created_date to in ms'
218
274
  optional :filter_created_at, type: Boolean, desc: 'filter by created at or updated at'
275
+ optional :sort_column, type: String, desc: 'sort by updated_at or selected layers property'
219
276
  end
220
277
  paginate per_page: 7, offset: 0, max_per_page: 100
221
278
  get do
222
-
223
279
  scope = list_serialized_elements(params, current_user)
224
280
 
225
281
  reset_pagination_page(scope)
@@ -235,6 +291,9 @@ module Labimotion
235
291
  end
236
292
  end
237
293
  { generic_elements: generic_elements }
294
+ rescue StandardError => e
295
+ Labimotion.log_exception(e, current_user)
296
+ { generic_elements: [] }
238
297
  end
239
298
 
240
299
  desc 'Return serialized element by id'
@@ -262,6 +321,8 @@ module Labimotion
262
321
  attachments: Entities::AttachmentEntity.represent(element.attachments),
263
322
  }
264
323
  end
324
+ rescue StandardError => e
325
+ Labimotion.log_exception(e, current_user)
265
326
  end
266
327
  end
267
328
 
@@ -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
 
@@ -4,7 +4,7 @@ require 'labimotion/entities/application_entity'
4
4
  module Labimotion
5
5
  # GenericKlassEntity
6
6
  class GenericKlassEntity < ApplicationEntity
7
- expose :id, :uuid, :label, :desc, :properties_template, :properties_release, :is_active,
7
+ expose :id, :uuid, :label, :desc, :properties_template, :properties_release, :is_active, :version,
8
8
  :place, :released_at, :identifier, :sync_time, :created_by, :updated_by, :created_at, :updated_at
9
9
  expose_timestamps(timestamp_fields: [:released_at])
10
10
  expose_timestamps(timestamp_fields: [:created_at])
@@ -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|
@@ -3,7 +3,7 @@
3
3
  module Labimotion
4
4
  # KlassRevisionEntity
5
5
  class KlassRevisionEntity < ApplicationEntity
6
- expose :id, :uuid, :properties_release, :released_at
6
+ expose :id, :uuid, :properties_release, :version, :released_at
7
7
 
8
8
  expose :klass_id do |object|
9
9
  klass_id = object.element_klass_id if object.respond_to? :element_klass_id
@@ -15,8 +15,9 @@ module Labimotion
15
15
 
16
16
  def create_repo_klass(params, current_user)
17
17
  response = Labimotion::TemplateHub.fetch_identifier('DatasetKlass', params[:identifier])
18
- attributes = response.slice('ols_term_id', 'label', 'desc', 'uuid', 'identifier') # .except(:id, :is_active, :place, :created_by, :created_at, :updated_at)
19
- attributes['properties_template'] = response['properties_release']
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_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
@@ -27,8 +28,9 @@ module Labimotion
27
28
  ds.update!(attributes)
28
29
  else
29
30
  attributes['created_by'] = current_user.id
30
- Labimotion::DatasetKlass.create!(attributes)
31
+ ds = Labimotion::DatasetKlass.create!(attributes)
31
32
  end
33
+ ds.create_klasses_revision(current_user)
32
34
  rescue StandardError => e
33
35
  Labimotion.log_exception(e, current_user)
34
36
  # { error: e.message }
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'grape'
4
- require 'labimotion/version'
4
+ require 'labimotion/utils/utils'
5
5
  # require 'labimotion/models/element_klass'
6
6
  module Labimotion
7
7
  ## ElementHelpers
@@ -20,11 +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
- attributes[:properties_template]['uuid'] = uuid if attributes[:properties_template].present?
24
- attributes[:properties_template] = template unless attributes[:properties_template].present?
25
- attributes[:properties_template]['eln'] = Chemotion::Application.config.version if attributes[:properties_template].present?
26
- attributes[:properties_template]['labimotion'] = Labimotion::VERSION if attributes[:properties_template].present?
27
- attributes[:properties_template]['klass'] = 'ElementKlass' if attributes[:properties_template].present?
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'
28
27
  attributes[:is_active] = false
29
28
  attributes[:uuid] = uuid
30
29
  attributes[:released_at] = DateTime.now
@@ -33,8 +32,8 @@ module Labimotion
33
32
 
34
33
  new_klass = Labimotion::ElementKlass.create!(attributes)
35
34
  new_klass.reload
36
- new_klass.create_klasses_revision(current_user.id)
37
- klass_names_file = Rails.root.join('config', 'klasses.json')
35
+ new_klass.create_klasses_revision(current_user)
36
+ klass_names_file = Rails.root.join('app/packs/klasses.json')
38
37
  klasses = Labimotion::ElementKlass.where(is_active: true)&.pluck(:name) || []
39
38
  File.write(klass_names_file, klasses)
40
39
  klasses
@@ -68,11 +67,12 @@ module Labimotion
68
67
  uuid = SecureRandom.uuid
69
68
  params[:properties]['uuid'] = uuid
70
69
  params[:properties]['klass_uuid'] = klass[:uuid]
71
- params[:properties]['eln'] = Chemotion::Application.config.version
72
- params[:properties]['labimotion'] = Labimotion::VERSION
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?
75
+ properties.delete('flowObject') unless properties['flowObject'].nil?
76
76
  properties.delete('select_options') unless properties['select_options'].nil?
77
77
  attributes = {
78
78
  name: params[:name],
@@ -109,14 +109,14 @@ module Labimotion
109
109
  params.delete(:container)
110
110
  params.delete(:properties)
111
111
  attributes = declared(params.except(:segments), include_missing: false)
112
- properties['eln'] = Chemotion::Application.config.version
113
- properties['labimotion'] = Labimotion::VERSION
112
+ properties['pkg'] = Labimotion::Utils.pkg(properties['pkg'])
114
113
  if element.klass_uuid != properties['klass_uuid'] || element.properties != properties || element.name != params[:name]
115
114
  properties['klass'] = 'Element'
116
115
  uuid = SecureRandom.uuid
117
116
  properties['uuid'] = uuid
118
117
 
119
118
  properties.delete('flow') unless properties['flow'].nil?
119
+ properties.delete('flowObject') unless properties['flowObject'].nil?
120
120
  properties.delete('select_options') unless properties['select_options'].nil?
121
121
 
122
122
  attributes['properties'] = properties
@@ -168,8 +168,8 @@ module Labimotion
168
168
  (attach_ary << att_ary).flatten! unless att_ary&.empty?
169
169
 
170
170
  if Labimotion::IS_RAILS5 == true
171
- TransferThumbnailToPublicJob.set(queue: "transfer_thumbnail_to_public_#{current_user.id}").perform_now(attach_ary) unless attach_ary.empty?
172
- TransferFileFromTmpJob.set(queue: "transfer_file_from_tmp_#{current_user.id}").perform_now(attach_ary) unless attach_ary.empty?
171
+ TransferThumbnailToPublicJob.set(queue: "transfer_thumbnail_to_public_#{current_user.id}").perform_later(attach_ary) unless attach_ary.empty?
172
+ TransferFileFromTmpJob.set(queue: "transfer_file_from_tmp_#{current_user.id}").perform_later(attach_ary) unless attach_ary.empty?
173
173
  end
174
174
  true
175
175
  rescue StandardError => e
@@ -180,7 +180,7 @@ module Labimotion
180
180
  def element_revisions(params)
181
181
  klass = Labimotion::Element.find(params[:id])
182
182
  list = klass.elements_revisions unless klass.nil?
183
- list&.sort_by(&:created_at)&.reverse
183
+ list&.sort_by(&:created_at)&.reverse&.first(10)
184
184
  rescue StandardError => e
185
185
  Labimotion.log_exception(e, current_user)
186
186
  raise e
@@ -245,7 +245,7 @@ module Labimotion
245
245
  .where(
246
246
  element_klasses: { name: params[:el_type] },
247
247
  collections_elements: { collection_id: collection_id },
248
- ).includes(:tag, collections: :sync_collections_users).order('created_at DESC')
248
+ ).includes(:tag, collections: :sync_collections_users)
249
249
  else
250
250
  Labimotion::Element.none
251
251
  end
@@ -254,14 +254,65 @@ module Labimotion
254
254
  from = params[:from_date]
255
255
  to = params[:to_date]
256
256
  by_created_at = params[:filter_created_at] || false
257
- scope = scope.created_time_from(Time.at(from)) if from && by_created_at
258
- scope = scope.created_time_to(Time.at(to) + 1.day) if to && by_created_at
259
- scope = scope.updated_time_from(Time.at(from)) if from && !by_created_at
260
- 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
261
286
  scope
262
287
  rescue StandardError => e
263
288
  Labimotion.log_exception(e, current_user)
264
289
  raise e
265
290
  end
291
+
292
+ def create_repo_klass(params, current_user)
293
+ response = Labimotion::TemplateHub.fetch_identifier('ElementKlass', params[:identifier])
294
+ attributes = response.slice('name', 'label', 'desc', 'icon_name', 'klass_prefix', 'is_generic', 'identifier', 'properties_release', 'version')
295
+ attributes['properties_release']['identifier'] = attributes['identifier']
296
+ attributes['properties_template'] = attributes['properties_release']
297
+ attributes['place'] = ((Labimotion::DatasetKlass.all.length * 10) || 0) + 10
298
+ attributes['is_active'] = false
299
+ attributes['updated_by'] = current_user.id
300
+ attributes['sync_by'] = current_user.id
301
+ attributes['sync_time'] = DateTime.now
302
+
303
+ element_klass = Labimotion::ElementKlass.find_by(identifier: attributes['identifier'])
304
+ if element_klass.present?
305
+ element_klass.update!(attributes)
306
+ else
307
+ attributes['created_by'] = current_user.id
308
+ element_klass = Labimotion::ElementKlass.create!(attributes)
309
+ end
310
+ element_klass.create_klasses_revision(current_user)
311
+ rescue StandardError => e
312
+ Labimotion.log_exception(e, current_user)
313
+ # { error: e.message }
314
+ raise e
315
+ end
316
+
266
317
  end
267
318
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'grape'
3
- require 'labimotion/version'
3
+ require 'labimotion/utils/utils'
4
4
  # Helper for associated sample
5
5
  module Labimotion
6
6
  ## Generic Helpers
@@ -41,23 +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
- if Labimotion::IS_RAILS5 == false
49
- properties['uuid'] = uuid unless params[:is_release] == true && @klz.identifier.present?
50
- else
51
- properties['uuid'] = uuid
52
- end
53
- properties['eln'] = Chemotion::Application.config.version
54
- properties['labimotion'] = Labimotion::VERSION
55
- properties['klass'] = @klz.class.name
48
+ properties['uuid'] = uuid
49
+ klz.version = Labimotion::Utils.next_version(params[:release], klz.version)
50
+ properties['version'] = klz.version
51
+ properties['pkg'] = Labimotion::Utils.pkg(params['pkg'] || (klz.properties_template && klz.properties_template['pkg']))
52
+ properties['klass'] = klz.class.name.split('::').last
53
+ properties['identifier'] = klz.identifier
54
+ properties.delete('eln') if properties['eln'].present?
56
55
  klz.updated_by = current_user.id
57
56
  klz.properties_template = properties
58
57
  klz.save!
59
58
  klz.reload
60
- klz.create_klasses_revision(current_user.id) if params[:is_release] == true
59
+ klz.create_klasses_revision(current_user) if params[:release] != 'draft'
61
60
  klz
62
61
  rescue StandardError => e
63
62
  Labimotion.log_exception(e, current_user)
@@ -89,7 +88,7 @@ module Labimotion
89
88
  def list_klass_revisions(params)
90
89
  klass = "Labimotion::#{params[:klass]}".constantize.find_by(id: params[:id])
91
90
  list = klass.send("#{params[:klass].underscore}es_revisions") unless klass.nil?
92
- list.sort_by(&:released_at).reverse
91
+ list&.order(released_at: :desc)&.limit(10)
93
92
  rescue StandardError => e
94
93
  Labimotion.log_exception(e, current_user)
95
94
  raise e
@@ -97,12 +96,8 @@ module Labimotion
97
96
 
98
97
 
99
98
  ###############
100
-
101
-
102
99
  def generate_klass_file
103
- klass_dir = File.join(Rails.root, 'data')
104
- !File.directory?(klass_dir) && FileUtils.mkdir_p(klass_dir)
105
- klass_names_file = File.join(klass_dir, 'klasses.json')
100
+ klass_names_file = Rails.root.join('app/packs/klasses.json')
106
101
  klasses = Labimotion::ElementKlass.where(is_active: true)&.pluck(:name) || []
107
102
  File.write(klass_names_file, klasses)
108
103
  rescue StandardError => e
@@ -193,37 +188,37 @@ module Labimotion
193
188
  raise e
194
189
  end
195
190
 
196
- def create_attachments(files, del_files, type, id, user_id)
191
+ def create_attachments(files, del_files, type, id, identifier, user_id)
197
192
  attach_ary = []
198
- (files || []).each do |file|
193
+ (files || []).each_with_index do |file, index|
199
194
  next unless (tempfile = file[:tempfile])
200
195
 
201
- a = Attachment.new(
196
+ att = Attachment.new(
202
197
  bucket: file[:container_id],
203
198
  filename: file[:filename],
204
199
  con_state: Labimotion::ConState::NONE,
205
200
  file_path: file[:tempfile],
206
201
  created_by: user_id,
207
202
  created_for: user_id,
203
+ identifier: identifier[index],
208
204
  content_type: file[:type],
209
205
  attachable_type: type,
210
206
  attachable_id: id,
211
207
  )
212
208
  begin
213
- a.save!
214
- attach_ary.push(a.id)
209
+ att.save!
210
+ attach_ary.push(att.id)
215
211
  ensure
216
212
  tempfile.close
217
213
  tempfile.unlink
218
214
  end
219
215
  end
220
216
  unless (del_files || []).empty?
221
- Attachment.where('id IN (?) AND attachable_type = (?)', del_files.map!(&:to_i),
222
- 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)
223
218
  end
224
219
  attach_ary
225
220
  rescue StandardError => e
226
- Labimotion.log_exception(e, current_user)
221
+ Labimotion.log_exception(e)
227
222
  raise e
228
223
  end
229
224
 
@@ -246,7 +241,7 @@ module Labimotion
246
241
  filter_list || []
247
242
  rescue StandardError => e
248
243
  Labimotion.log_exception(e, current_user)
249
- raise e
244
+ { error: 'Cannot connect to Chemotion Repository' }
250
245
  end
251
246
  end
252
247
  end
@@ -1,6 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
  require 'grape'
3
3
  require 'labimotion/models/segment_klass'
4
+ require 'labimotion/utils/utils'
5
+
4
6
  module Labimotion
5
7
  ## ElementHelpers
6
8
  module SegmentHelpers
@@ -26,8 +28,7 @@ module Labimotion
26
28
  attributes = declared(params, include_missing: false)
27
29
  attributes[:properties_template]['uuid'] = uuid if attributes[:properties_template].present?
28
30
  template = (attributes[:properties_template].presence || template)
29
- template['eln'] = Chemotion::Application.config.version
30
- template['labimotion'] = Labimotion::VERSION
31
+ template['pkg'] = Labimotion::Utils.pkg(template['pkg'])
31
32
  template['klass'] = 'SegmentKlass'
32
33
  attributes.merge!(properties_template: template, element_klass: @klass, created_by: current_user.id,
33
34
  place: place)
@@ -37,7 +38,7 @@ module Labimotion
37
38
  attributes[:properties_release] = attributes[:properties_template]
38
39
  klass = Labimotion::SegmentKlass.create!(attributes)
39
40
  klass.reload
40
- klass.create_klasses_revision(current_user.id)
41
+ klass.create_klasses_revision(current_user)
41
42
  klass
42
43
  rescue StandardError => e
43
44
  Labimotion.log_exception(e, current_user)
@@ -64,8 +65,9 @@ module Labimotion
64
65
 
65
66
  def create_repo_klass(params, current_user)
66
67
  response = Labimotion::TemplateHub.fetch_identifier('SegmentKlass', params[:identifier])
67
- attributes = response.slice('label', 'desc', 'uuid', 'identifier', 'released_at') # .except(:id, :is_active, :place, :created_by, :created_at, :updated_at)
68
- attributes['properties_template'] = response['properties_release']
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']
69
71
  attributes['place'] = ((Labimotion::SegmentKlass.all.length * 10) || 0) + 10
70
72
  attributes['is_active'] = false
71
73
  attributes['updated_by'] = current_user.id
@@ -74,20 +76,21 @@ module Labimotion
74
76
 
75
77
  element_klass = Labimotion::ElementKlass.find_by(identifier: response['element_klass']['identifier'])
76
78
  element_klass = Labimotion::ElementKlass.find_by(name: response['element_klass']['name']) if element_klass.nil?
77
- if element_klass.nil?
78
- el_attributes = response['element_klass'].slice('name', 'label', 'desc', 'uuid', 'identifier', 'icon_name', 'klass_prefix', 'is_generic', 'released_at')
79
- el_attributes['properties_template'] = response['element_klass']['properties_release']
80
- Labimotion::ElementKlass.create!(el_attributes)
81
- end
79
+ return { error: 'ElementKlass not found' } if element_klass.nil?
82
80
 
81
+ # el_attributes = response['element_klass'].slice('name', 'label', 'desc', 'uuid', 'identifier', 'icon_name', 'klass_prefix', 'is_generic', 'released_at')
82
+ # el_attributes['properties_template'] = response['element_klass']['properties_release']
83
+ # Labimotion::ElementKlass.create!(el_attributes)
83
84
 
84
- if Labimotion::SegmentKlass.find_by(ols_term_id: attributes['ols_term_id']).present?
85
- ds = Labimotion::SegmentKlass.find_by(ols_term_id: attributes['ols_term_id'])
86
- ds.update!(attributes)
85
+ attributes['element_klass_id'] = element_klass.id
86
+ segment_klass = Labimotion::SegmentKlass.find_by(identifier: attributes['identifier'])
87
+ if segment_klass.present?
88
+ segment_klass.update!(attributes)
87
89
  else
88
90
  attributes['created_by'] = current_user.id
89
- Labimotion::SegmentKlass.create!(attributes)
91
+ segment_klass = Labimotion::SegmentKlass.create!(attributes)
90
92
  end
93
+ segment_klass.create_klasses_revision(current_user)
91
94
  rescue StandardError => e
92
95
  Labimotion.log_exception(e, current_user)
93
96
  raise e