labimotion 0.2.0 → 0.2.2

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: 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