labimotion 0.1.18 → 0.2.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: d1656db6477e67ec4c028d478acd989e0f8616c765d5455a098d8119bf41d9d3
4
- data.tar.gz: 4eec2bdfee9ed0c15ab7b804d076c0c7c4011df853b98f1b864a3f43e0f63ec5
3
+ metadata.gz: d5939fc9b6467ddec95df7cffac59fa06737aabcf4109fbbae1a4bd1a7200e48
4
+ data.tar.gz: dc5447449a8d3370da9d22363ab589ed1e4cef25f2c2826825982d8673ca0315
5
5
  SHA512:
6
- metadata.gz: 6c1f49548317152dd92f69360440d454c29686a508136e1e905723cf3763590e156848e1c035a48ea3160e540e152ab8add68f1fb2bed37d236a467775d11d56
7
- data.tar.gz: 734ef5c969db235796e4b777101664930027e58b1fa0df718ab1901fcef9dc8501e44e07ce18cab519b81062206fe51d12101687741b61026127d6bfbbaf0c10
6
+ metadata.gz: 63d70a575a715b95296cd8fdd658dbce44b6000f8fa32de507a008a8ffecaa4a4616dc4991115e3645ba2463b6800d9622ac3ab7b201fbe2b7ff30ccd16fedb6
7
+ data.tar.gz: 6151278c9d2afe3e970138d635cb16411733290f4f80c9353baec576c0717e1e73fe9fe53c25a135d201fe5f86b809918f0ae5f721233309f4ab9b02e7681e51
@@ -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', current_user)
33
+ fetch_repo('DatasetKlass')
34
34
  end
35
35
  end
36
36
 
@@ -40,9 +40,8 @@ module Labimotion
40
40
  requires :identifier, type: String, desc: 'Identifier'
41
41
  end
42
42
  post do
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 }
43
+ create_repo_klass(params, current_user)
44
+ present DatasetKlass.all, with: Labimotion::DatasetKlassEntity, root: 'klass'
46
45
  rescue StandardError => e
47
46
  Labimotion.log_exception(e, current_user)
48
47
  { error: e.message }
@@ -21,9 +21,6 @@ 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: [] }
27
24
  end
28
25
  end
29
26
 
@@ -35,9 +32,6 @@ module Labimotion
35
32
  get do
36
33
  list = klass_list(params[:generic_only])
37
34
  present list, with: Labimotion::ElementKlassEntity, root: 'klass'
38
- rescue StandardError => e
39
- Labimotion.log_exception(e, current_user)
40
- { klass: [] }
41
35
  end
42
36
  end
43
37
 
@@ -73,9 +67,6 @@ module Labimotion
73
67
  post do
74
68
  authenticate_admin!('elements')
75
69
  update_element_klass(current_user, params)
76
- rescue StandardError => e
77
- Labimotion.log_exception(e, current_user)
78
- raise e
79
70
  end
80
71
  end
81
72
 
@@ -88,9 +79,6 @@ module Labimotion
88
79
  get do
89
80
  list = list_klass_revisions(params)
90
81
  present list, with: Labimotion::KlassRevisionEntity, root: 'revisions'
91
- rescue StandardError => e
92
- Labimotion.log_exception(e, current_user)
93
- []
94
82
  end
95
83
  end
96
84
 
@@ -102,9 +90,6 @@ module Labimotion
102
90
  get do
103
91
  list = element_revisions(params)
104
92
  present list, with: Labimotion::ElementRevisionEntity, root: 'revisions'
105
- rescue StandardError => e
106
- Labimotion.log_exception(e, current_user)
107
- []
108
93
  end
109
94
  end
110
95
 
@@ -119,9 +104,6 @@ module Labimotion
119
104
  authenticate_admin!(params[:klass].gsub(/(Klass)/, 's').downcase)
120
105
  delete_klass_revision(params)
121
106
  status 201
122
- rescue StandardError => e
123
- Labimotion.log_exception(e, current_user)
124
- raise e
125
107
  end
126
108
  end
127
109
 
@@ -135,9 +117,6 @@ module Labimotion
135
117
  post do
136
118
  delete_revision(params)
137
119
  status 201
138
- rescue StandardError => e
139
- Labimotion.log_exception(e, current_user)
140
- raise e
141
120
  end
142
121
  end
143
122
 
@@ -150,9 +129,6 @@ module Labimotion
150
129
  klass = Labimotion::Segment.find(params[:id])
151
130
  list = klass.segments_revisions unless klass.nil?
152
131
  present list&.sort_by(&:created_at).reverse, with: Labimotion::SegmentRevisionEntity, root: 'revisions'
153
- rescue StandardError => e
154
- Labimotion.log_exception(e, current_user)
155
- []
156
132
  end
157
133
  end
158
134
 
@@ -176,9 +152,6 @@ module Labimotion
176
152
  post do
177
153
  upload_generics_files(current_user, params)
178
154
  true
179
- rescue StandardError => e
180
- Labimotion.log_exception(e, current_user)
181
- raise e
182
155
  end
183
156
  end
184
157
 
@@ -187,19 +160,13 @@ module Labimotion
187
160
  get do
188
161
  list = Labimotion::ElementKlass.all.sort_by { |e| e.place }
189
162
  present list, with: Labimotion::ElementKlassEntity, root: 'klass'
190
- rescue StandardError => e
191
- Labimotion.log_exception(e, current_user)
192
- []
193
163
  end
194
164
  end
195
165
 
196
166
  namespace :fetch_repo do
197
167
  desc 'fetch Generic Element Klass from Chemotion Repository'
198
168
  get do
199
- fetch_repo('ElementKlass', current_user)
200
- rescue StandardError => e
201
- Labimotion.log_exception(e, current_user)
202
- []
169
+ fetch_repo('ElementKlass')
203
170
  end
204
171
  end
205
172
 
@@ -209,9 +176,8 @@ module Labimotion
209
176
  requires :identifier, type: String, desc: 'Identifier'
210
177
  end
211
178
  post do
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 }
179
+ create_repo_klass(params, current_user)
180
+ present ElementKlass.all, with: Labimotion::ElementKlassEntity, root: 'klass'
215
181
  rescue StandardError => e
216
182
  Labimotion.log_exception(e, current_user)
217
183
  { error: e.message }
@@ -231,9 +197,6 @@ module Labimotion
231
197
  end
232
198
  post do
233
199
  deactivate_klass(params)
234
- rescue StandardError => e
235
- Labimotion.log_exception(e, current_user)
236
- raise e
237
200
  end
238
201
  end
239
202
 
@@ -246,9 +209,6 @@ module Labimotion
246
209
  delete ':id' do
247
210
  delete_klass(params)
248
211
  status 201
249
- rescue StandardError => e
250
- Labimotion.log_exception(e, current_user)
251
- raise e
252
212
  end
253
213
  end
254
214
 
@@ -265,10 +225,7 @@ module Labimotion
265
225
  @klz = fetch_klass(params[:klass], params[:id])
266
226
  end
267
227
  post do
268
- update_template(params, current_user)
269
- rescue StandardError => e
270
- Labimotion.log_exception(e, current_user)
271
- raise e
228
+ update_template(params)
272
229
  end
273
230
  end
274
231
 
@@ -280,10 +237,10 @@ module Labimotion
280
237
  optional :from_date, type: Integer, desc: 'created_date from in ms'
281
238
  optional :to_date, type: Integer, desc: 'created_date to in ms'
282
239
  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'
284
240
  end
285
241
  paginate per_page: 7, offset: 0, max_per_page: 100
286
242
  get do
243
+
287
244
  scope = list_serialized_elements(params, current_user)
288
245
 
289
246
  reset_pagination_page(scope)
@@ -299,9 +256,6 @@ module Labimotion
299
256
  end
300
257
  end
301
258
  { generic_elements: generic_elements }
302
- rescue StandardError => e
303
- Labimotion.log_exception(e, current_user)
304
- { generic_elements: [] }
305
259
  end
306
260
 
307
261
  desc 'Return serialized element by id'
@@ -329,8 +283,6 @@ module Labimotion
329
283
  attachments: Entities::AttachmentEntity.represent(element.attachments),
330
284
  }
331
285
  end
332
- rescue StandardError => e
333
- Labimotion.log_exception(e, current_user)
334
286
  end
335
287
  end
336
288
 
@@ -1,7 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'open-uri'
4
- require 'labimotion/models/hub_log'
5
4
 
6
5
  # Belong to Chemotion module
7
6
  module Labimotion
@@ -20,25 +19,20 @@ module Labimotion
20
19
  list = "Labimotion::#{params[:klass]}".constantize.where(is_active: true).where.not(released_at: nil)
21
20
  list = list.where(is_generic: true) if params[:klass] == 'ElementKlass'
22
21
  entities = Labimotion::GenericPublicEntity.represent(list, displayed: params[:with_props])
23
- rescue StandardError => e
24
- Labimotion.log_exception(e, current_user)
25
- []
22
+ # entities.length > 1 ? de_encode_json(entities) : []
26
23
  end
27
24
  end
28
25
  namespace :fetch do
29
26
  desc "get active generic templates"
30
27
  params do
31
28
  requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
32
- requires :origin, type: String, desc: 'origin'
29
+ # requires :fqdn, type: Integer, desc: 'FQDN'
33
30
  requires :identifier, type: String, desc: 'Identifier'
34
31
  end
35
- post do
32
+ get do
36
33
  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)
38
34
  "Labimotion::#{params[:klass]}Entity".constantize.represent(entity)
39
- rescue StandardError => e
40
- Labimotion.log_exception(e, current_user)
41
- raise e
35
+ # entities.length > 1 ? de_encode_json(entities) : []
42
36
  end
43
37
  end
44
38
 
@@ -51,9 +45,6 @@ module Labimotion
51
45
  list = Labimotion::ElementKlass.where(is_active: true) if params[:generic_only].present? && params[:generic_only] == true
52
46
  list = Labimotion::ElementKlass.where(is_active: true) unless params[:generic_only].present? && params[:generic_only] == true
53
47
  list.pluck(:name)
54
- rescue StandardError => e
55
- Labimotion.log_exception(e, current_user)
56
- []
57
48
  end
58
49
  end
59
50
 
@@ -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', current_user)
121
+ fetch_repo('SegmentKlass')
122
122
  rescue StandardError => e
123
123
  Labimotion.log_exception(e, current_user)
124
124
  { error: e.message }
@@ -131,9 +131,8 @@ module Labimotion
131
131
  requires :identifier, type: String, desc: 'Identifier'
132
132
  end
133
133
  post do
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 }
134
+ create_repo_klass(params, current_user)
135
+ present SegmentKlass.all, with: Labimotion::SegmentKlassEntity, root: 'klass'
137
136
  rescue StandardError => e
138
137
  Labimotion.log_exception(e, current_user)
139
138
  ## { error: e.message }
@@ -5,7 +5,6 @@ require 'labimotion/entities/application_entity'
5
5
  # Entity module
6
6
  module Labimotion
7
7
  class GenericPublicEntity < Labimotion::ApplicationEntity
8
- expose! :uuid
9
8
  expose! :name
10
9
  expose! :desc
11
10
  expose! :icon_name
@@ -13,7 +12,6 @@ module Labimotion
13
12
  expose! :klass_name
14
13
  expose! :label
15
14
  expose! :identifier
16
- expose! :version
17
15
  expose! :released_at
18
16
  expose! :properties_release, if: :displayed
19
17
  expose :element_klass do |obj|
@@ -13,31 +13,21 @@ module Labimotion
13
13
  end
14
14
  end
15
15
 
16
- def create_repo_klass(params, current_user, origin)
17
- response = Labimotion::TemplateHub.fetch_identifier('DatasetKlass', params[:identifier], origin)
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']
16
+ def create_repo_klass(params, current_user)
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']
21
20
  attributes['place'] = ((Labimotion::DatasetKlass.all.length * 10) || 0) + 10
22
21
  attributes['is_active'] = false
23
22
  attributes['updated_by'] = current_user.id
24
23
  attributes['sync_by'] = current_user.id
25
24
  attributes['sync_time'] = DateTime.now
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
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)
36
28
  else
37
29
  attributes['created_by'] = current_user.id
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']}!" }
30
+ Labimotion::DatasetKlass.create!(attributes)
41
31
  end
42
32
  rescue StandardError => e
43
33
  Labimotion.log_exception(e, current_user)
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'grape'
4
- require 'labimotion/utils/utils'
4
+ require 'labimotion/version'
5
5
  # require 'labimotion/models/element_klass'
6
6
  module Labimotion
7
7
  ## ElementHelpers
@@ -20,10 +20,11 @@ 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] = 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'
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?
27
28
  attributes[:is_active] = false
28
29
  attributes[:uuid] = uuid
29
30
  attributes[:released_at] = DateTime.now
@@ -32,8 +33,8 @@ module Labimotion
32
33
 
33
34
  new_klass = Labimotion::ElementKlass.create!(attributes)
34
35
  new_klass.reload
35
- new_klass.create_klasses_revision(current_user)
36
- klass_names_file = Rails.root.join('app/packs/klasses.json')
36
+ new_klass.create_klasses_revision(current_user.id)
37
+ klass_names_file = Rails.root.join('config', 'klasses.json')
37
38
  klasses = Labimotion::ElementKlass.where(is_active: true)&.pluck(:name) || []
38
39
  File.write(klass_names_file, klasses)
39
40
  klasses
@@ -67,12 +68,11 @@ module Labimotion
67
68
  uuid = SecureRandom.uuid
68
69
  params[:properties]['uuid'] = uuid
69
70
  params[:properties]['klass_uuid'] = klass[:uuid]
70
- params[:properties]['pkg'] = Labimotion::Utils.pkg(params[:properties]['pkg'])
71
+ params[:properties]['eln'] = Chemotion::Application.config.version
72
+ params[:properties]['labimotion'] = Labimotion::VERSION
71
73
  params[:properties]['klass'] = 'Element'
72
- params[:properties]['identifier'] = klass[:identifier]
73
74
  properties = params[:properties]
74
75
  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['pkg'] = Labimotion::Utils.pkg(properties['pkg'])
112
+ properties['eln'] = Chemotion::Application.config.version
113
+ properties['labimotion'] = Labimotion::VERSION
113
114
  if element.klass_uuid != properties['klass_uuid'] || element.properties != properties || element.name != params[:name]
114
115
  properties['klass'] = 'Element'
115
116
  uuid = SecureRandom.uuid
116
117
  properties['uuid'] = uuid
117
118
 
118
119
  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
@@ -174,7 +174,8 @@ module Labimotion
174
174
  true
175
175
  rescue StandardError => e
176
176
  Labimotion.log_exception(e, current_user)
177
- false
177
+ ## false
178
+ raise e
178
179
  end
179
180
 
180
181
  def element_revisions(params)
@@ -245,7 +246,7 @@ module Labimotion
245
246
  .where(
246
247
  element_klasses: { name: params[:el_type] },
247
248
  collections_elements: { collection_id: collection_id },
248
- ).includes(:tag, collections: :sync_collections_users)
249
+ ).includes(:tag, collections: :sync_collections_users).order('created_at DESC')
249
250
  else
250
251
  Labimotion::Element.none
251
252
  end
@@ -254,46 +255,20 @@ module Labimotion
254
255
  from = params[:from_date]
255
256
  to = params[:to_date]
256
257
  by_created_at = params[:filter_created_at] || false
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
258
+ scope = scope.created_time_from(Time.at(from)) if from && by_created_at
259
+ scope = scope.created_time_to(Time.at(to) + 1.day) if to && by_created_at
260
+ scope = scope.updated_time_from(Time.at(from)) if from && !by_created_at
261
+ scope = scope.updated_time_to(Time.at(to) + 1.day) if to && !by_created_at
286
262
  scope
287
263
  rescue StandardError => e
288
264
  Labimotion.log_exception(e, current_user)
289
265
  raise e
290
266
  end
291
267
 
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']
268
+ def create_repo_klass(params, current_user)
269
+ response = Labimotion::TemplateHub.fetch_identifier('ElementKlass', params[:identifier])
270
+ attributes = response.slice('name', 'label', 'desc', 'icon_name', 'klass_prefix', 'is_generic', 'identifier') # .except(:id, :is_active, :place, :created_by, :created_at, :updated_at)
271
+ attributes['properties_template'] = response['properties_release']
297
272
  attributes['place'] = ((Labimotion::DatasetKlass.all.length * 10) || 0) + 10
298
273
  attributes['is_active'] = false
299
274
  attributes['updated_by'] = current_user.id
@@ -302,23 +277,10 @@ module Labimotion
302
277
 
303
278
  element_klass = Labimotion::ElementKlass.find_by(identifier: attributes['identifier'])
304
279
  if element_klass.present?
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
280
+ element_klass.update!(attributes)
312
281
  else
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
282
+ attributes['created_by'] = current_user.id
283
+ Labimotion::ElementKlass.create!(attributes)
322
284
  end
323
285
  rescue StandardError => e
324
286
  Labimotion.log_exception(e, current_user)
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
  require 'grape'
3
- require 'labimotion/utils/utils'
3
+ require 'labimotion/version'
4
4
  # Helper for associated sample
5
5
  module Labimotion
6
6
  ## Generic Helpers
@@ -41,22 +41,43 @@ module Labimotion
41
41
  raise e
42
42
  end
43
43
 
44
- def update_template(params, current_user)
44
+ def update_template(params)
45
45
  klz = fetch_klass(params[:klass], params[:id])
46
46
  uuid = SecureRandom.uuid
47
47
  properties = params[:properties_template]
48
- properties['uuid'] = uuid
49
- klz.version = Labimotion::Utils.next_version(params[:release], klz.version)
48
+ if Labimotion::IS_RAILS5 == false
49
+ properties['uuid'] = uuid unless params[:release] != 'draft' && @klz.identifier.present?
50
+ else
51
+ properties['uuid'] = uuid
52
+ end
53
+
54
+ klz.version =
55
+ case params[:release]
56
+ when 'draft'
57
+ klz.version
58
+ when 'major'
59
+ if klz.version.nil? || klz.version&.split('.').length < 2
60
+ '1.0'
61
+ else
62
+ "#{klz.version&.split('.').first.to_i + 1}.0"
63
+ end
64
+ when 'minor'
65
+ if klz.version.nil? || klz.version&.split('.').length < 2
66
+ '0.1'
67
+ else
68
+ "#{klz.version.split('.').first.to_i.to_s}.#{klz.version.split('.').last.to_i + 1}"
69
+ end
70
+ end
71
+
50
72
  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?
73
+ properties['eln'] = Chemotion::Application.config.version
74
+ properties['labimotion'] = Labimotion::VERSION
75
+ properties['klass'] = @klz.class.name.split('::').last
55
76
  klz.updated_by = current_user.id
56
77
  klz.properties_template = properties
57
78
  klz.save!
58
79
  klz.reload
59
- klz.create_klasses_revision(current_user) if params[:release] != 'draft'
80
+ klz.create_klasses_revision(current_user.id) if params[:release] != 'draft'
60
81
  klz
61
82
  rescue StandardError => e
62
83
  Labimotion.log_exception(e, current_user)
@@ -96,8 +117,12 @@ module Labimotion
96
117
 
97
118
 
98
119
  ###############
120
+
121
+
99
122
  def generate_klass_file
100
- klass_names_file = Rails.root.join('app/packs/klasses.json')
123
+ klass_dir = File.join(Rails.root, 'data')
124
+ !File.directory?(klass_dir) && FileUtils.mkdir_p(klass_dir)
125
+ klass_names_file = File.join(klass_dir, 'klasses.json')
101
126
  klasses = Labimotion::ElementKlass.where(is_active: true)&.pluck(:name) || []
102
127
  File.write(klass_names_file, klasses)
103
128
  rescue StandardError => e
@@ -188,37 +213,37 @@ module Labimotion
188
213
  raise e
189
214
  end
190
215
 
191
- def create_attachments(files, del_files, type, id, identifier, user_id)
216
+ def create_attachments(files, del_files, type, id, user_id)
192
217
  attach_ary = []
193
- (files || []).each_with_index do |file, index|
218
+ (files || []).each do |file|
194
219
  next unless (tempfile = file[:tempfile])
195
220
 
196
- att = Attachment.new(
221
+ a = Attachment.new(
197
222
  bucket: file[:container_id],
198
223
  filename: file[:filename],
199
224
  con_state: Labimotion::ConState::NONE,
200
225
  file_path: file[:tempfile],
201
226
  created_by: user_id,
202
227
  created_for: user_id,
203
- identifier: identifier[index],
204
228
  content_type: file[:type],
205
229
  attachable_type: type,
206
230
  attachable_id: id,
207
231
  )
208
232
  begin
209
- att.save!
210
- attach_ary.push(att.id)
233
+ a.save!
234
+ attach_ary.push(a.id)
211
235
  ensure
212
236
  tempfile.close
213
237
  tempfile.unlink
214
238
  end
215
239
  end
216
240
  unless (del_files || []).empty?
217
- Attachment.where('id IN (?) AND attachable_type = (?)', del_files.map!(&:to_i), type).update_all(attachable_id: nil)
241
+ Attachment.where('id IN (?) AND attachable_type = (?)', del_files.map!(&:to_i),
242
+ type).update_all(attachable_id: nil)
218
243
  end
219
244
  attach_ary
220
245
  rescue StandardError => e
221
- Labimotion.log_exception(e)
246
+ Labimotion.log_exception(e, current_user)
222
247
  raise e
223
248
  end
224
249
 
@@ -230,19 +255,18 @@ module Labimotion
230
255
  Chemotion::Generic::Fetch::Template.list(API::TARGET, name)
231
256
  end
232
257
 
233
- def fetch_repo(name, current_user)
234
- # current_klasses = "Labimotion::#{name}".constantize.where.not(identifier: nil)&.pluck(:identifier) || []
258
+ def fetch_repo(name)
259
+ current_klasses = "Labimotion::#{name}".constantize.where.not(identifier: nil)&.pluck(:identifier) || []
235
260
  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 || []
242
- (response && response['list']) || []
261
+ if response && response['list'].present? && response['list'].length.positive?
262
+ filter_list = response['list']&.reject do |ds|
263
+ current_klasses.include?(ds['identifier'])
264
+ end || []
265
+ end
266
+ filter_list || []
243
267
  rescue StandardError => e
244
268
  Labimotion.log_exception(e, current_user)
245
- { error: 'Cannot connect to Chemotion Repository' }
269
+ raise e
246
270
  end
247
271
  end
248
272
  end