labimotion 0.2.0 → 0.2.2

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: d5939fc9b6467ddec95df7cffac59fa06737aabcf4109fbbae1a4bd1a7200e48
4
- data.tar.gz: dc5447449a8d3370da9d22363ab589ed1e4cef25f2c2826825982d8673ca0315
3
+ metadata.gz: 327103b60af0374bdfd4fa53653b2f314c3395f3a7e0277022caa9b8a5e865a3
4
+ data.tar.gz: 118586faba049e9b0db78533e912c1ea1143a27314e4d13395dca19469c9cecd
5
5
  SHA512:
6
- metadata.gz: 63d70a575a715b95296cd8fdd658dbce44b6000f8fa32de507a008a8ffecaa4a4616dc4991115e3645ba2463b6800d9622ac3ab7b201fbe2b7ff30ccd16fedb6
7
- data.tar.gz: 6151278c9d2afe3e970138d635cb16411733290f4f80c9353baec576c0717e1e73fe9fe53c25a135d201fe5f86b809918f0ae5f721233309f4ab9b02e7681e51
6
+ metadata.gz: f5efea48afcc6d27d8619039fde17de1d66db7d371f547f05a61ace9a763e7eee539dc79f4c3ff947df497233d4cca74a572d9277cc869bcaa5bae310f16ae1c
7
+ data.tar.gz: 3be73cae26b84356fdd1d316391552c6e82d4b63b467705d9faad843c2d706c464bf50b1ff3335255e43c76ecffb708e17748dfe659bb23a2c9c4f1ffd9e0668
@@ -225,7 +225,7 @@ module Labimotion
225
225
  @klz = fetch_klass(params[:klass], params[:id])
226
226
  end
227
227
  post do
228
- update_template(params)
228
+ update_template(params, current_user)
229
229
  end
230
230
  end
231
231
 
@@ -237,10 +237,10 @@ module Labimotion
237
237
  optional :from_date, type: Integer, desc: 'created_date from in ms'
238
238
  optional :to_date, type: Integer, desc: 'created_date to in ms'
239
239
  optional :filter_created_at, type: Boolean, desc: 'filter by created at or updated at'
240
+ optional :sort_column, type: String, desc: 'sort by updated_at or selected layers property'
240
241
  end
241
242
  paginate per_page: 7, offset: 0, max_per_page: 100
242
243
  get do
243
-
244
244
  scope = list_serialized_elements(params, current_user)
245
245
 
246
246
  reset_pagination_page(scope)
@@ -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,12 @@ 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
+ 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
28
29
  attributes[:is_active] = false
29
30
  attributes[:uuid] = uuid
30
31
  attributes[:released_at] = DateTime.now
@@ -33,8 +34,8 @@ module Labimotion
33
34
 
34
35
  new_klass = Labimotion::ElementKlass.create!(attributes)
35
36
  new_klass.reload
36
- new_klass.create_klasses_revision(current_user.id)
37
- klass_names_file = Rails.root.join('config', 'klasses.json')
37
+ new_klass.create_klasses_revision(current_user)
38
+ klass_names_file = Rails.root.join('app/packs/klasses.json')
38
39
  klasses = Labimotion::ElementKlass.where(is_active: true)&.pluck(:name) || []
39
40
  File.write(klass_names_file, klasses)
40
41
  klasses
@@ -68,11 +69,12 @@ module Labimotion
68
69
  uuid = SecureRandom.uuid
69
70
  params[:properties]['uuid'] = uuid
70
71
  params[:properties]['klass_uuid'] = klass[:uuid]
71
- params[:properties]['eln'] = Chemotion::Application.config.version
72
- params[:properties]['labimotion'] = Labimotion::VERSION
72
+ params[:properties]['pkg'] = Labimotion::Utils.pkg(params[:properties]['pkg'])
73
73
  params[:properties]['klass'] = 'Element'
74
+ params[:properties]['identifier'] = klass[:identifier]
74
75
  properties = params[:properties]
75
76
  properties.delete('flow') unless properties['flow'].nil?
77
+ properties.delete('flowObject') unless properties['flowObject'].nil?
76
78
  properties.delete('select_options') unless properties['select_options'].nil?
77
79
  attributes = {
78
80
  name: params[:name],
@@ -109,14 +111,14 @@ module Labimotion
109
111
  params.delete(:container)
110
112
  params.delete(:properties)
111
113
  attributes = declared(params.except(:segments), include_missing: false)
112
- properties['eln'] = Chemotion::Application.config.version
113
- properties['labimotion'] = Labimotion::VERSION
114
+ properties['pkg'] = Labimotion::Utils.pkg(properties['pkg'])
114
115
  if element.klass_uuid != properties['klass_uuid'] || element.properties != properties || element.name != params[:name]
115
116
  properties['klass'] = 'Element'
116
117
  uuid = SecureRandom.uuid
117
118
  properties['uuid'] = uuid
118
119
 
119
120
  properties.delete('flow') unless properties['flow'].nil?
121
+ properties.delete('flowObject') unless properties['flowObject'].nil?
120
122
  properties.delete('select_options') unless properties['select_options'].nil?
121
123
 
122
124
  attributes['properties'] = properties
@@ -246,7 +248,7 @@ module Labimotion
246
248
  .where(
247
249
  element_klasses: { name: params[:el_type] },
248
250
  collections_elements: { collection_id: collection_id },
249
- ).includes(:tag, collections: :sync_collections_users).order('created_at DESC')
251
+ ).includes(:tag, collections: :sync_collections_users)
250
252
  else
251
253
  Labimotion::Element.none
252
254
  end
@@ -255,10 +257,35 @@ module Labimotion
255
257
  from = params[:from_date]
256
258
  to = params[:to_date]
257
259
  by_created_at = params[:filter_created_at] || false
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
260
+ if params[:sort_column]&.include?('.')
261
+ layer, field = params[:sort_column].split('.')
262
+
263
+ element_klass = Labimotion::ElementKlass.find_by(name: params[:el_type])
264
+ allowed_fields = element_klass.properties_release.dig('layers', layer, 'fields')&.pluck('field') || []
265
+
266
+ if field.in?(allowed_fields)
267
+ query = ActiveRecord::Base.sanitize_sql(
268
+ [
269
+ "LEFT JOIN LATERAL(
270
+ SELECT field->'value' AS value
271
+ FROM jsonb_array_elements(properties->'layers'->:layer->'fields') a(field)
272
+ WHERE field->>'field' = :field
273
+ ) a ON true",
274
+ { layer: layer, field: field },
275
+ ],
276
+ )
277
+ scope = scope.joins(query).order('value ASC NULLS FIRST')
278
+ else
279
+ scope = scope.order(updated_at: :desc)
280
+ end
281
+ else
282
+ scope = scope.order(updated_at: :desc)
283
+ end
284
+
285
+ scope = scope.elements_created_time_from(Time.at(from)) if from && by_created_at
286
+ scope = scope.elements_created_time_to(Time.at(to) + 1.day) if to && by_created_at
287
+ scope = scope.elements_updated_time_from(Time.at(from)) if from && !by_created_at
288
+ scope = scope.elements_updated_time_to(Time.at(to) + 1.day) if to && !by_created_at
262
289
  scope
263
290
  rescue StandardError => e
264
291
  Labimotion.log_exception(e, current_user)
@@ -267,8 +294,9 @@ module Labimotion
267
294
 
268
295
  def create_repo_klass(params, current_user)
269
296
  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
+ attributes = response.slice('name', 'label', 'desc', 'icon_name', 'klass_prefix', 'is_generic', 'identifier', 'properties_release', 'version')
298
+ attributes['properties_release']['identifier'] = attributes['identifier']
299
+ attributes['properties_template'] = attributes['properties_release']
272
300
  attributes['place'] = ((Labimotion::DatasetKlass.all.length * 10) || 0) + 10
273
301
  attributes['is_active'] = false
274
302
  attributes['updated_by'] = current_user.id
@@ -280,8 +308,9 @@ module Labimotion
280
308
  element_klass.update!(attributes)
281
309
  else
282
310
  attributes['created_by'] = current_user.id
283
- Labimotion::ElementKlass.create!(attributes)
311
+ element_klass = Labimotion::ElementKlass.create!(attributes)
284
312
  end
313
+ element_klass.create_klasses_revision(current_user)
285
314
  rescue StandardError => e
286
315
  Labimotion.log_exception(e, current_user)
287
316
  # { error: e.message }
@@ -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,43 +41,23 @@ 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[: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
48
+ properties['uuid'] = uuid
71
49
 
50
+ klz.version = Labimotion::Utils.next_version(params[:release], klz.version)
72
51
  properties['version'] = klz.version
73
- properties['eln'] = Chemotion::Application.config.version
74
- properties['labimotion'] = Labimotion::VERSION
75
- properties['klass'] = @klz.class.name.split('::').last
52
+ properties['pkg'] = Labimotion::Utils.pkg(params['pkg'] || klz.properties_template['pkg'])
53
+ properties['klass'] = klz.class.name.split('::').last
54
+ properties['identifier'] = klz.identifier
55
+ properties.delete('eln') if properties['eln'].present?
76
56
  klz.updated_by = current_user.id
77
57
  klz.properties_template = properties
78
58
  klz.save!
79
59
  klz.reload
80
- klz.create_klasses_revision(current_user.id) if params[:release] != 'draft'
60
+ klz.create_klasses_revision(current_user) if params[:release] != 'draft'
81
61
  klz
82
62
  rescue StandardError => e
83
63
  Labimotion.log_exception(e, current_user)
@@ -117,12 +97,8 @@ module Labimotion
117
97
 
118
98
 
119
99
  ###############
120
-
121
-
122
100
  def generate_klass_file
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
+ klass_names_file = Rails.root.join('app/packs/klasses.json')
126
102
  klasses = Labimotion::ElementKlass.where(is_active: true)&.pluck(:name) || []
127
103
  File.write(klass_names_file, klasses)
128
104
  rescue StandardError => e
@@ -266,7 +242,7 @@ module Labimotion
266
242
  filter_list || []
267
243
  rescue StandardError => e
268
244
  Labimotion.log_exception(e, current_user)
269
- raise e
245
+ { error: 'Cannot connect to Chemotion Repository' }
270
246
  end
271
247
  end
272
248
  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
@@ -86,8 +88,9 @@ module Labimotion
86
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
@@ -4,7 +4,7 @@ require 'net/http'
4
4
  require 'uri'
5
5
  require 'json'
6
6
  require 'date'
7
- require 'labimotion/version'
7
+ require 'labimotion/utils/utils'
8
8
 
9
9
  # rubocop: disable Metrics/AbcSize
10
10
  # rubocop: disable Metrics/MethodLength
@@ -209,8 +209,7 @@ module Labimotion
209
209
  uuid = SecureRandom.uuid
210
210
  props = klass.properties_release
211
211
  props['uuid'] = uuid
212
- props['eln'] = Chemotion::Application.config.version
213
- props['labimotion'] = Labimotion::VERSION
212
+ props['pkg'] = Labimotion::Utils.pkg(props['pkg'])
214
213
  props['klass'] = 'Dataset'
215
214
  Labimotion::Dataset.create!(
216
215
  uuid: uuid,
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'labimotion/utils/utils'
4
+
3
5
  module Labimotion
4
6
  ## NmrMapper
5
7
  class NmrMapper
@@ -247,8 +249,7 @@ module Labimotion
247
249
  uuid = SecureRandom.uuid
248
250
  props = klass.properties_release
249
251
  props['uuid'] = uuid
250
- props['eln'] = Chemotion::Application.config.version
251
- props['labimotion'] = Labimotion::VERSION
252
+ props['pkg'] = Labimotion::Utils.pkg(props['pkg'])
252
253
  props['klass'] = 'Dataset'
253
254
  dataset = Labimotion::Dataset.create!(
254
255
  uuid: uuid,
@@ -1,4 +1,5 @@
1
1
  # frozen_string_literal: true
2
+ require 'labimotion/utils/utils'
2
3
 
3
4
  module Labimotion
4
5
  class NmrMapperRepo
@@ -245,8 +246,7 @@ module Labimotion
245
246
  uuid = SecureRandom.uuid
246
247
  props = klass.properties_release
247
248
  props['uuid'] = uuid
248
- props['eln'] = Chemotion::Application.config.version
249
- props['labimotion'] = Labimotion::VERSION
249
+ props['pkg'] = Labimotion::Utils.pkg(props['pkg'])
250
250
  props['klass'] = 'Dataset'
251
251
  dataset = Labimotion::Dataset.create!(
252
252
  uuid: uuid,
@@ -20,7 +20,7 @@ module Labimotion
20
20
 
21
21
 
22
22
  def self.header(opt = {})
23
- opt || { :timeout => 10, :headers => {'Content-Type' => 'text/json'} }
23
+ opt || { timeout: 10, headers: { 'Content-Type' => 'text/json' } }
24
24
  end
25
25
 
26
26
  def self.handle_response(oat, response) # rubocop: disable Metrics/PerceivedComplexity
@@ -35,16 +35,22 @@ module Labimotion
35
35
 
36
36
  def self.list(klass)
37
37
  body = { klass: klass }
38
- response = HTTParty.get("#{uri('list')}?klass=#{klass}", header)
38
+ response = HTTParty.get("#{uri('list')}?klass=#{klass}", timeout: 10)
39
39
  # response.parsed_response if response.code == 200
40
40
  JSON.parse(response.body) if response.code == 200
41
+ rescue StandardError => e
42
+ Labimotion.log_exception(e)
43
+ error!('Cannot connect to Chemotion Repository', 401)
41
44
  end
42
45
 
43
46
  def self.fetch_identifier(klass, identifier)
44
47
  # body = { klass: klass, identifier: identifier }
45
- response = HTTParty.get("#{uri('fetch')}?klass=#{klass}&identifier=#{identifier}", header)
48
+ response = HTTParty.get("#{uri('fetch')}?klass=#{klass}&identifier=#{identifier}", timeout: 10)
46
49
  # response.parsed_response if response.code == 200
47
50
  JSON.parse(response.body) if response.code == 200
51
+ rescue StandardError => e
52
+ Labimotion.log_exception(e)
53
+ error!('Cannot connect to Chemotion Repository', 401)
48
54
  end
49
55
  end
50
56
  end
@@ -1,6 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  # Datasetable concern
4
+ require 'labimotion/utils/utils'
4
5
 
5
6
  module Labimotion
6
7
  ## Datasetable concern
@@ -21,23 +22,18 @@ module Labimotion
21
22
  klass = Labimotion::DatasetKlass.find_by(id: args[:dataset_klass_id])
22
23
  uuid = SecureRandom.uuid
23
24
  props = args[:properties]
24
- props['eln'] = Chemotion::Application.config.version
25
- props['labimotion'] = Labimotion::VERSION
25
+ props['pkg'] = Labimotion::Utils.pkg(props['pkg'])
26
+ props['identifier'] = klass.identifier
27
+ props['uuid'] = uuid
28
+ props['klass'] = 'Dataset'
29
+
26
30
  ds = Labimotion::Dataset.find_by(element_type: self.class.name, element_id: id)
27
31
  if ds.present? && (ds.klass_uuid != props['klass_uuid'] || ds.properties != props)
28
- props['uuid'] = uuid
29
- props['eln'] = Chemotion::Application.config.version
30
- props['labimotion'] = Labimotion::VERSION
31
- props['klass'] = 'Dataset'
32
32
  ds.update!(properties_release: klass.properties_release, uuid: uuid, dataset_klass_id: args[:dataset_klass_id], properties: props, klass_uuid: props['klass_uuid'])
33
33
  end
34
34
  return if ds.present?
35
35
 
36
- props['uuid'] = uuid
37
36
  props['klass_uuid'] = klass.uuid
38
- props['eln'] = Chemotion::Application.config.version
39
- props['labimotion'] = Labimotion::VERSION
40
- props['klass'] = 'Dataset'
41
37
  Labimotion::Dataset.create!(properties_release: klass.properties_release, uuid: uuid, dataset_klass_id: args[:dataset_klass_id], element_type: self.class.name, element_id: id, properties: props, klass_uuid: klass.uuid)
42
38
  end
43
39
 
@@ -1,33 +1,40 @@
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
- # (properties_release['layers'] || {}).keys.each do |key|
13
- # properties_release['layers'][key]['layer'] = properties_release['layers'][key]['key']
14
- # end
13
+ migrate_workflow if properties_release['flow'].present?
15
14
 
16
- if properties_release['flow'].present?
17
- elements = (properties_release['flow']['elements'] || []).map do |el|
15
+ if properties_release['flowObject'].present?
16
+ elements = (properties_release['flowObject']['nodes'] || []).map do |el|
18
17
  if el['data'].present? && el['data']['lKey'].present?
19
18
  layer = properties_release['layers'][el['data']['lKey']]
20
19
  el['data']['layer'] = layer if layer.present?
21
20
  end
22
21
  el
23
22
  end
24
- properties_release['flow']['elements'] = elements
23
+ properties_release['flowObject']['nodes'] = elements
25
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
+ }
26
33
 
27
- self.update!({ uuid: properties_template['uuid'], properties_release: properties_release, released_at: DateTime.now })
34
+ self.update!(klass_attributes)
28
35
  reload
29
36
  attributes = {
30
- released_by: user_id,
37
+ released_by: released_by,
31
38
  uuid: uuid,
32
39
  version: version,
33
40
  properties_release: properties_release,
@@ -1,5 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'labimotion/utils/utils'
4
+
3
5
  module Labimotion
4
6
  # Segmentable concern
5
7
  module Segmentable
@@ -45,25 +47,18 @@ module Labimotion
45
47
  klass = Labimotion::SegmentKlass.find_by(id: seg['segment_klass_id'])
46
48
  uuid = SecureRandom.uuid
47
49
  props = seg['properties']
48
- props['eln'] = Chemotion::Application.config.version
49
- props['labimotion'] = Labimotion::VERSION
50
+ props['pkg'] = Labimotion::Utils.pkg(props['pkg'])
51
+ props['identifier'] = identifier
52
+ props['uuid'] = uuid
53
+ props['klass'] = 'Segment'
50
54
  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'])
51
55
  if segment.present? && (segment.klass_uuid != props['klass_uuid'] || segment.properties != props)
52
- props['uuid'] = uuid
53
- props['eln'] = Chemotion::Application.config.version
54
- props['labimotion'] = Labimotion::VERSION
55
- props['klass'] = 'Segment'
56
-
57
56
  segment.update!(properties_release: klass.properties_release, properties: props, uuid: uuid, klass_uuid: props['klass_uuid'])
58
57
  segments.push(segment)
59
58
  end
60
59
  next if segment.present?
61
60
 
62
- props['uuid'] = uuid
63
61
  props['klass_uuid'] = klass.uuid
64
- props['eln'] = Chemotion::Application.config.version
65
- props['labimotion'] = Labimotion::VERSION
66
- props['klass'] = 'Segment'
67
62
  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)
68
63
  segments.push(segment)
69
64
  end
@@ -23,7 +23,6 @@ module Labimotion
23
23
  )
24
24
  end
25
25
 
26
-
27
26
  def migrate_workflow
28
27
  return if properties_template.nil? || properties_release.nil?
29
28
 
@@ -32,8 +31,5 @@ module Labimotion
32
31
  update_column(:properties_template, split_workflow(properties_template)) if properties_template['flow']
33
32
  update_column(:properties_release, split_workflow(properties_release)) if properties_release['flow']
34
33
  end
35
-
36
- private
37
-
38
34
  end
39
35
  end
@@ -1,5 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require 'labimotion/version'
3
4
  module Labimotion
4
5
  ## Generic Utils
5
6
  class Utils
@@ -54,5 +55,36 @@ module Labimotion
54
55
  def self.element_name_dc(name)
55
56
  Labimotion::Utils.element_name(name)&.downcase
56
57
  end
58
+
59
+ def self.next_version(release, current_version)
60
+ case release
61
+ when 'draft'
62
+ current_version
63
+ when 'major'
64
+ if current_version.nil? || current_version.split('.').length < 2
65
+ '1.0'
66
+ else
67
+ "#{current_version&.split('.').first.to_i + 1}.0"
68
+ end
69
+ when 'minor'
70
+ if current_version.nil? || current_version&.split('.').length < 2
71
+ '0.1'
72
+ else
73
+ "#{current_version&.split('.').first.to_i.to_s}.#{current_version&.split('.').last.to_i + 1}"
74
+ end
75
+ else
76
+ current_version
77
+ end
78
+ rescue StandardError => e
79
+ Labimotion.log_exception(e)
80
+ current_version
81
+ end
82
+
83
+ def self.pkg(pkg)
84
+ pkg = {} if pkg.nil?
85
+ pkg['eln'] = Chemotion::Application.config.version
86
+ pkg['labimotion'] = Labimotion::VERSION
87
+ pkg
88
+ end
57
89
  end
58
90
  end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Labimotion
4
4
  # VERSION = '0.1.4'
5
- VERSION = '0.2.0'
5
+ VERSION = '0.2.2'
6
6
  IS_RAILS5 = false
7
7
  end
data/lib/labimotion.rb CHANGED
@@ -7,7 +7,7 @@ module Labimotion
7
7
  @@labimotion_logger ||= Logger.new(Rails.root.join('log/labimotion.log')) # rubocop:disable Style/ClassVars
8
8
  end
9
9
 
10
- def self.log_exception(exception, current_user = {})
10
+ def self.log_exception(exception, current_user = nil)
11
11
  Labimotion.logger.error("version: #{Labimotion::VERSION}; #{Labimotion::IS_RAILS5}, (#{current_user&.id}) \n Exception: #{exception.message}")
12
12
  Labimotion.logger.error(exception.backtrace.join("\n"))
13
13
  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.0
4
+ version: 0.2.2
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-22 00:00:00.000000000 Z
12
+ date: 2023-08-23 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -114,7 +114,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
114
114
  - !ruby/object:Gem::Version
115
115
  version: '0'
116
116
  requirements: []
117
- rubygems_version: 3.1.6
117
+ rubygems_version: 3.4.18
118
118
  signing_key:
119
119
  specification_version: 4
120
120
  summary: Chemotion LabIMotion