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 +4 -4
- data/lib/labimotion/apis/generic_element_api.rb +2 -2
- data/lib/labimotion/helpers/dataset_helpers.rb +5 -3
- data/lib/labimotion/helpers/element_helpers.rb +49 -20
- data/lib/labimotion/helpers/generic_helpers.rb +11 -35
- data/lib/labimotion/helpers/segment_helpers.rb +9 -6
- data/lib/labimotion/libs/converter.rb +2 -3
- data/lib/labimotion/libs/nmr_mapper.rb +3 -2
- data/lib/labimotion/libs/nmr_mapper_repo.rb +2 -2
- data/lib/labimotion/libs/template_hub.rb +9 -3
- data/lib/labimotion/models/concerns/datasetable.rb +6 -10
- data/lib/labimotion/models/concerns/generic_klass_revisions.rb +17 -10
- data/lib/labimotion/models/concerns/segmentable.rb +6 -11
- data/lib/labimotion/models/element_klass.rb +0 -4
- data/lib/labimotion/utils/utils.rb +32 -0
- data/lib/labimotion/version.rb +1 -1
- data/lib/labimotion.rb +1 -1
- metadata +3 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 327103b60af0374bdfd4fa53653b2f314c3395f3a7e0277022caa9b8a5e865a3
|
4
|
+
data.tar.gz: 118586faba049e9b0db78533e912c1ea1143a27314e4d13395dca19469c9cecd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
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['
|
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/
|
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
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
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
|
37
|
-
klass_names_file = Rails.root.join('
|
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]['
|
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['
|
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)
|
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
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
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'
|
271
|
-
attributes['
|
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/
|
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
|
-
|
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['
|
74
|
-
properties['
|
75
|
-
properties['
|
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
|
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
|
-
|
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
|
-
|
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['
|
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
|
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'
|
68
|
-
attributes['
|
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/
|
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['
|
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['
|
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['
|
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 || { :
|
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}",
|
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}",
|
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['
|
25
|
-
props['
|
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
|
-
|
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(
|
11
|
+
def create_klasses_revision(current_user)
|
11
12
|
properties_release = properties_template
|
12
|
-
|
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['
|
17
|
-
elements = (properties_release['
|
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['
|
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!(
|
34
|
+
self.update!(klass_attributes)
|
28
35
|
reload
|
29
36
|
attributes = {
|
30
|
-
released_by:
|
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['
|
49
|
-
props['
|
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
|
data/lib/labimotion/version.rb
CHANGED
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.
|
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-
|
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.
|
117
|
+
rubygems_version: 3.4.18
|
118
118
|
signing_key:
|
119
119
|
specification_version: 4
|
120
120
|
summary: Chemotion LabIMotion
|