labimotion 1.3.2 → 1.4.0.rc2
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 +4 -4
- data/lib/labimotion/apis/generic_element_api.rb +4 -2
- data/lib/labimotion/entities/properties_entity.rb +20 -0
- data/lib/labimotion/helpers/element_helpers.rb +6 -1
- data/lib/labimotion/helpers/param_helpers.rb +6 -4
- data/lib/labimotion/libs/export_element.rb +14 -0
- data/lib/labimotion/utils/export_utils.rb +4 -0
- data/lib/labimotion/utils/field_type.rb +2 -1
- data/lib/labimotion/utils/import_utils.rb +38 -6
- data/lib/labimotion/version.rb +1 -1
- metadata +4 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 6f07e0d77afbb79bc2652b5f7edbc105133f727593a9a9cc236e17762d1b7e15
|
4
|
+
data.tar.gz: a6d9a86cd6363b5d81f1c141f56ac85974d6622c3cfd06dc21a3184610d5c76b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 68ab2a10825518b8c7b22e0ae47aeb48c867404f857e98957082f952f7d42983bc07c50f62ff0dd71be1e6c9bb4f0843fabecdcf7f9ef40f5ce0d253b12dc4f6
|
7
|
+
data.tar.gz: c45113c276c4954803005084733c1e4e13315e9888bb0da50663b3d68577badae0cf5278e2bf1ed4d9cc80002366b981dc80563aa40657cbebf892f34b97f8f7
|
@@ -10,6 +10,7 @@ module Labimotion
|
|
10
10
|
helpers ContainerHelpers
|
11
11
|
helpers ParamsHelpers
|
12
12
|
helpers CollectionHelpers
|
13
|
+
helpers UserLabelHelpers
|
13
14
|
helpers Labimotion::SampleAssociationHelpers
|
14
15
|
helpers Labimotion::GenericHelpers
|
15
16
|
helpers Labimotion::ElementHelpers
|
@@ -327,7 +328,7 @@ module Labimotion
|
|
327
328
|
Labimotion.log_exception(e, current_user)
|
328
329
|
{ error: e.message }
|
329
330
|
end
|
330
|
-
end
|
331
|
+
end
|
331
332
|
|
332
333
|
desc 'Return serialized elements of current user'
|
333
334
|
params do
|
@@ -336,6 +337,7 @@ module Labimotion
|
|
336
337
|
optional :el_type, type: String, desc: 'element klass name'
|
337
338
|
optional :from_date, type: Integer, desc: 'created_date from in ms'
|
338
339
|
optional :to_date, type: Integer, desc: 'created_date to in ms'
|
340
|
+
optional :user_label, type: Integer, desc: 'user label'
|
339
341
|
optional :filter_created_at, type: Boolean, desc: 'filter by created at or updated at'
|
340
342
|
optional :sort_column, type: String, desc: 'sort by updated_at or selected layers property'
|
341
343
|
end
|
@@ -426,7 +428,7 @@ module Labimotion
|
|
426
428
|
raise e
|
427
429
|
end
|
428
430
|
end
|
429
|
-
end
|
431
|
+
end
|
430
432
|
end
|
431
433
|
end
|
432
434
|
end
|
@@ -23,6 +23,26 @@ module Labimotion
|
|
23
23
|
object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_svg'] = field['type'] == Labimotion::FieldType::DRAG_SAMPLE ? el.get_svg_path : File.join('/images', 'molecules', el.molecule_svg_file)
|
24
24
|
end
|
25
25
|
|
26
|
+
field_sys_reactions = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].select { |ss| ss['type'] == Labimotion::FieldType::SYS_REACTION }
|
27
|
+
field_sys_reactions.each do |field|
|
28
|
+
idx = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].index(field)
|
29
|
+
sid = field.dig('value', 'el_id')
|
30
|
+
next unless sid.present?
|
31
|
+
|
32
|
+
el = Reaction.find_by(id: sid)
|
33
|
+
if el.blank?
|
34
|
+
object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_tip'] = 'ERROR'
|
35
|
+
object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_svg'] = ''
|
36
|
+
end
|
37
|
+
|
38
|
+
next unless el.present?
|
39
|
+
next unless object.properties.dig(Labimotion::Prop::LAYERS, key, Labimotion::Prop::FIELDS, idx, 'value').present?
|
40
|
+
|
41
|
+
object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_label'] = el.short_label
|
42
|
+
object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_tip'] = el.short_label
|
43
|
+
object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']['el_svg'] = el.reaction_svg_file
|
44
|
+
end
|
45
|
+
|
26
46
|
field_tables = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].select { |ss| ss['type'] == Labimotion::FieldType::TABLE }
|
27
47
|
field_tables.each do |field|
|
28
48
|
idx = object.properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].index(field)
|
@@ -95,6 +95,7 @@ module Labimotion
|
|
95
95
|
element.properties = update_sample_association(params[:properties], current_user, element)
|
96
96
|
element.container = update_datamodel(params[:container], current_user)
|
97
97
|
element.save!
|
98
|
+
update_element_labels(element, params[:user_labels], current_user.id)
|
98
99
|
element.save_segments(segments: params[:segments], current_user_id: current_user.id)
|
99
100
|
element
|
100
101
|
rescue StandardError => e
|
@@ -108,6 +109,9 @@ module Labimotion
|
|
108
109
|
properties = update_sample_association(params[:properties], current_user, element)
|
109
110
|
params.delete(:container)
|
110
111
|
params.delete(:properties)
|
112
|
+
update_element_labels(element, params[:user_labels], current_user.id)
|
113
|
+
params.delete(:user_labels)
|
114
|
+
|
111
115
|
attributes = declared(params.except(:segments), include_missing: false)
|
112
116
|
properties['pkg'] = Labimotion::Utils.pkg(properties['pkg'])
|
113
117
|
if element.klass_uuid != properties['klass_uuid'] || element.properties != properties || element.name != params[:name]
|
@@ -288,6 +292,7 @@ module Labimotion
|
|
288
292
|
scope = scope.elements_created_time_to(Time.at(to) + 1.day) if to && by_created_at
|
289
293
|
scope = scope.elements_updated_time_from(Time.at(from)) if from && !by_created_at
|
290
294
|
scope = scope.elements_updated_time_to(Time.at(to) + 1.day) if to && !by_created_at
|
295
|
+
scope = scope.by_user_label(params[:user_label]) if params[:user_label]
|
291
296
|
scope
|
292
297
|
rescue StandardError => e
|
293
298
|
Labimotion.log_exception(e, current_user)
|
@@ -315,7 +320,7 @@ module Labimotion
|
|
315
320
|
return { status: 'success', message: "The element: #{attributes['name']} has been created using version: #{attributes['version']}!" }
|
316
321
|
end
|
317
322
|
end
|
318
|
-
|
323
|
+
|
319
324
|
rescue StandardError => e
|
320
325
|
Labimotion.log_exception(e, current_user)
|
321
326
|
return { status: 'error', message: e.message }
|
@@ -22,7 +22,7 @@ module Labimotion
|
|
22
22
|
optional :sync_time, type: DateTime, desc: 'Klass sync_time'
|
23
23
|
optional :version, type: String, desc: 'Klass version'
|
24
24
|
end
|
25
|
-
|
25
|
+
|
26
26
|
params :create_element_klass_params do
|
27
27
|
requires :name, type: String, desc: 'Element Klass Name'
|
28
28
|
requires :label, type: String, desc: 'Element Klass Label'
|
@@ -40,7 +40,7 @@ module Labimotion
|
|
40
40
|
optional :desc, type: String, desc: 'Element Klass Desc'
|
41
41
|
optional :place, type: String, desc: 'Element Klass Place'
|
42
42
|
end
|
43
|
-
|
43
|
+
|
44
44
|
## Element Params
|
45
45
|
params :create_element_params do
|
46
46
|
requires :element_klass, type: Hash
|
@@ -49,18 +49,20 @@ module Labimotion
|
|
49
49
|
optional :properties_release, type: Hash
|
50
50
|
optional :collection_id, type: Integer
|
51
51
|
requires :container, type: Hash
|
52
|
+
optional :user_labels, type: Array
|
52
53
|
optional :segments, type: Array, desc: 'Segments'
|
53
54
|
end
|
54
|
-
|
55
|
+
|
55
56
|
params :update_element_params do
|
56
57
|
requires :id, type: Integer, desc: 'element id'
|
57
58
|
optional :name, type: String
|
58
59
|
requires :properties, type: Hash
|
59
60
|
optional :properties_release, type: Hash
|
60
61
|
requires :container, type: Hash
|
62
|
+
optional :user_labels, type: Array
|
61
63
|
optional :segments, type: Array, desc: 'Segments'
|
62
64
|
end
|
63
|
-
|
65
|
+
|
64
66
|
## Segment Klass Params
|
65
67
|
params :upload_segment_klass_params do
|
66
68
|
requires :label, type: String, desc: 'Klass label'
|
@@ -91,6 +91,20 @@ module Labimotion
|
|
91
91
|
obj_final = OpenStruct.new(obj_os)
|
92
92
|
field_obj[:structure] = Reporter::Docx::DiagramSample.new(obj: obj_final, format: 'png').generate
|
93
93
|
end
|
94
|
+
when Labimotion::FieldType::SYS_REACTION
|
95
|
+
val = field.fetch('value', nil)
|
96
|
+
if val.present?
|
97
|
+
instance = Reaction.find_by(id: val['el_id'])
|
98
|
+
field_obj[:value] = val['el_label']
|
99
|
+
field_obj[:has_structure] = true
|
100
|
+
obj_os = Entities::ReactionReportEntity.new(
|
101
|
+
instance,
|
102
|
+
current_user: @current_user,
|
103
|
+
detail_levels: ElementDetailLevelCalculator.new(user: @current_user, element: instance).detail_levels,
|
104
|
+
).serializable_hash
|
105
|
+
obj_final = OpenStruct.new(obj_os)
|
106
|
+
field_obj[:structure] = Reporter::Docx::DiagramReaction.new(obj: obj_final, format: 'png').generate
|
107
|
+
end
|
94
108
|
when Labimotion::FieldType::DRAG_MOLECULE
|
95
109
|
val = field.fetch('value', nil)
|
96
110
|
if val.present?
|
@@ -20,6 +20,8 @@ module Labimotion
|
|
20
20
|
case name
|
21
21
|
when Labimotion::FieldType::DRAG_ELEMENT
|
22
22
|
Labimotion::Prop::L_ELEMENT
|
23
|
+
when Labimotion::FieldType::SYS_REACTION
|
24
|
+
Labimotion::Prop::REACTION
|
23
25
|
when Labimotion::FieldType::DRAG_SAMPLE
|
24
26
|
Labimotion::Prop::SAMPLE
|
25
27
|
when Labimotion::FieldType::DRAG_MOLECULE
|
@@ -167,6 +169,7 @@ module Labimotion
|
|
167
169
|
properties[Labimotion::Prop::LAYERS].keys.each do |key|
|
168
170
|
properties = set_seg_prop(properties, uuids, key, Labimotion::FieldType::DRAG_ELEMENT)
|
169
171
|
properties = set_seg_prop(properties, uuids, key, Labimotion::FieldType::DRAG_SAMPLE)
|
172
|
+
properties = set_seg_prop(properties, uuids, key, Labimotion::FieldType::SYS_REACTION)
|
170
173
|
end
|
171
174
|
segment['properties'] = properties
|
172
175
|
segment
|
@@ -183,6 +186,7 @@ module Labimotion
|
|
183
186
|
properties = set_prop(properties, uuids, key, Labimotion::FieldType::DRAG_ELEMENT, &fetch_one)
|
184
187
|
properties = set_prop(properties, uuids, key, Labimotion::FieldType::DRAG_MOLECULE, &fetch_one)
|
185
188
|
properties = set_prop(properties, uuids, key, Labimotion::FieldType::DRAG_SAMPLE, &fetch_one)
|
189
|
+
properties = set_prop(properties, uuids, key, Labimotion::FieldType::SYS_REACTION, &fetch_one)
|
186
190
|
properties, attachments = set_upload(instance, properties, attachments, uuids, key, Labimotion::FieldType::UPLOAD, &fetch_one)
|
187
191
|
properties = set_table(properties, uuids, key, Labimotion::FieldType::TABLE, &fetch_one)
|
188
192
|
end
|
@@ -11,13 +11,14 @@ module Labimotion
|
|
11
11
|
WF_NEXT = 'wf-next'.freeze
|
12
12
|
TEXT_FORMULA = 'text-formula'.freeze
|
13
13
|
SYSTEM_DEFINED = 'system-defined'.freeze
|
14
|
+
SYS_REACTION = 'sys-reaction'.freeze
|
14
15
|
DRAG = 'drag'.freeze
|
15
16
|
DRAG_ELEMENT = 'drag_element'.freeze
|
16
17
|
DRAG_MOLECULE = 'drag_molecule'.freeze
|
17
18
|
DRAG_SAMPLE = 'drag_sample'.freeze
|
18
19
|
DRAG_REACTION = 'drag_reaction'.freeze
|
19
20
|
DRAG_MS = [DRAG_MOLECULE, DRAG_SAMPLE].freeze
|
20
|
-
DRAG_ALL = [DRAG_ELEMENT, DRAG_MOLECULE, DRAG_SAMPLE, DRAG_REACTION].freeze
|
21
|
+
DRAG_ALL = [DRAG_ELEMENT, DRAG_MOLECULE, DRAG_SAMPLE, DRAG_REACTION, SYS_REACTION].freeze
|
21
22
|
TABLE = 'table'.freeze
|
22
23
|
UPLOAD = 'upload'.freeze
|
23
24
|
TEXT = 'text'.freeze
|
@@ -51,6 +51,21 @@ module Labimotion
|
|
51
51
|
value
|
52
52
|
end
|
53
53
|
|
54
|
+
def proc_assign_reaction(value, reaction)
|
55
|
+
return {} if reaction.nil?
|
56
|
+
|
57
|
+
value = {} if value.nil? || value.is_a?(String)
|
58
|
+
value['el_id'] = reaction.id
|
59
|
+
value['el_type'] = 'reaction' if value['el_type'].nil?
|
60
|
+
value['el_tip'] = reaction.short_label
|
61
|
+
value['el_label'] = reaction.short_label
|
62
|
+
value['el_svg'] = reaction.reaction_svg_file
|
63
|
+
value
|
64
|
+
rescue StandardError => e
|
65
|
+
Labimotion.log_exception(e)
|
66
|
+
value
|
67
|
+
end
|
68
|
+
|
54
69
|
def proc_assign_element(value, element)
|
55
70
|
return {} if element.nil?
|
56
71
|
|
@@ -136,6 +151,22 @@ module Labimotion
|
|
136
151
|
end
|
137
152
|
end
|
138
153
|
|
154
|
+
def self.proc_reaction(layer, key, data, instances, properties)
|
155
|
+
fields = layer[Labimotion::Prop::FIELDS].select { |ss| ss['type'] == Labimotion::FieldType::SYS_REACTION }
|
156
|
+
fields.each do |field|
|
157
|
+
idx = properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS].index(field)
|
158
|
+
id = field["value"] && field["value"]["el_id"] unless idx.nil?
|
159
|
+
reaction = instances.fetch(Labimotion::Prop::REACTION, nil)&.fetch(id, nil)
|
160
|
+
val = properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value']
|
161
|
+
val = proc_assign_reaction(val, reaction)
|
162
|
+
properties[Labimotion::Prop::LAYERS][key][Labimotion::Prop::FIELDS][idx]['value'] = val
|
163
|
+
end
|
164
|
+
properties
|
165
|
+
rescue StandardError => e
|
166
|
+
Labimotion.log_exception(e)
|
167
|
+
properties
|
168
|
+
end
|
169
|
+
|
139
170
|
def self.proc_sample(layer, key, data, instances, properties)
|
140
171
|
fields = layer[Labimotion::Prop::FIELDS].select { |ss| ss['type'] == Labimotion::FieldType::DRAG_SAMPLE }
|
141
172
|
fields.each do |field|
|
@@ -149,7 +180,7 @@ module Labimotion
|
|
149
180
|
properties
|
150
181
|
rescue StandardError => e
|
151
182
|
Labimotion.log_exception(e)
|
152
|
-
|
183
|
+
properties
|
153
184
|
end
|
154
185
|
|
155
186
|
def self.proc_element(layer, key, data, instances, properties, elements)
|
@@ -169,7 +200,7 @@ module Labimotion
|
|
169
200
|
properties
|
170
201
|
rescue StandardError => e
|
171
202
|
Labimotion.log_exception(e)
|
172
|
-
|
203
|
+
properties
|
173
204
|
end
|
174
205
|
|
175
206
|
def self.proc_upload(layer, key, data, instances, attachments, element)
|
@@ -221,7 +252,7 @@ module Labimotion
|
|
221
252
|
properties
|
222
253
|
rescue StandardError => e
|
223
254
|
Labimotion.log_exception(e)
|
224
|
-
|
255
|
+
properties
|
225
256
|
end
|
226
257
|
|
227
258
|
|
@@ -237,7 +268,7 @@ module Labimotion
|
|
237
268
|
properties
|
238
269
|
rescue StandardError => e
|
239
270
|
Labimotion.log_exception(e)
|
240
|
-
|
271
|
+
properties
|
241
272
|
end
|
242
273
|
|
243
274
|
def self.properties_handler(data, instances, attachments, elmenet, elements)
|
@@ -246,6 +277,7 @@ module Labimotion
|
|
246
277
|
layer = properties[Labimotion::Prop::LAYERS][key]
|
247
278
|
properties = proc_molecule(layer, key, data, properties)
|
248
279
|
properties = proc_upload(layer, key, data, instances, attachments, elmenet)
|
280
|
+
properties = proc_reaction(layer, key, data, instances, properties)
|
249
281
|
properties = proc_sample(layer, key, data, instances, properties)
|
250
282
|
properties = proc_element(layer, key, data, instances, properties, elements) # unless elements.nil?
|
251
283
|
properties = proc_table(layer, key, data, instances, properties)
|
@@ -253,7 +285,7 @@ module Labimotion
|
|
253
285
|
properties
|
254
286
|
rescue StandardError => e
|
255
287
|
Labimotion.log_exception(e)
|
256
|
-
|
288
|
+
properties
|
257
289
|
end
|
258
290
|
|
259
291
|
def self.process_ai(data, instances)
|
@@ -272,7 +304,7 @@ module Labimotion
|
|
272
304
|
end
|
273
305
|
rescue StandardError => e
|
274
306
|
Labimotion.log_exception(e)
|
275
|
-
|
307
|
+
properties
|
276
308
|
end
|
277
309
|
|
278
310
|
def self.create_segment_klass(sk_obj, segment_klass, element_klass, current_user_id)
|
data/lib/labimotion/version.rb
CHANGED
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: 1.
|
4
|
+
version: 1.4.0.rc2
|
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: 2024-05-
|
12
|
+
date: 2024-05-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rails
|
@@ -122,9 +122,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
122
122
|
version: '0'
|
123
123
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
|
-
- - "
|
125
|
+
- - ">"
|
126
126
|
- !ruby/object:Gem::Version
|
127
|
-
version:
|
127
|
+
version: 1.3.1
|
128
128
|
requirements: []
|
129
129
|
rubygems_version: 3.1.6
|
130
130
|
signing_key:
|