labimotion 1.3.0.rc3 → 1.3.0.rc5

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: ef750ee91a207edde617086a1dadc141b83613584810eba9435836fe59b2f745
4
- data.tar.gz: b68dfa74b8701fbd73598d8a2b67109680a70c31b92e780acef89aa968923108
3
+ metadata.gz: 1544df427f4bbeeac189991d5dba50f8759e4ccc869b864edcee7479ba455bac
4
+ data.tar.gz: 5113e6ceffe6908efb4767cdffc3721131903d07668722e22e6503197bafc181
5
5
  SHA512:
6
- metadata.gz: 8fe68edfe62dc71133d5340b6242d43a3d4a6dab50ccb77531bb32898f84635d8794b16ac1185672b453dc9a8965782f7c1545ab4f556ab0d744087d7559ff24
7
- data.tar.gz: 0ed4f34cf80aef0200681e45103ae22bf4b9fe6e02ca6772ee146aee989a40939143b3370b16b787c678c4329990491dabe331394bca851f473a573405c42a11
6
+ metadata.gz: c1111378004a5bea4f3ac3a1e2056eb3003db3f21dc8887813d97d4a73ffa8df0473b72bd2c3c6450c50ce9b1a30d736303b34c156bb50124ca58ee09e43b151
7
+ data.tar.gz: 8ced73f30bea84693d46de94398e621badda9419d77432da3f81eb6d0aef0fc64c06e41cb80d18859936eeb773fdb77a5a6bc623aff0d6a0effd6132fa603042
@@ -13,6 +13,7 @@ module Labimotion
13
13
  helpers Labimotion::SampleAssociationHelpers
14
14
  helpers Labimotion::GenericHelpers
15
15
  helpers Labimotion::ElementHelpers
16
+ helpers Labimotion::ParamHelpers
16
17
 
17
18
  resource :generic_elements do
18
19
  namespace :klass do
@@ -46,12 +47,19 @@ module Labimotion
46
47
  namespace :export do
47
48
  desc 'export element'
48
49
  params do
49
- optional :id, type: Integer, desc: 'element id'
50
+ requires :id, type: Integer, desc: 'element id'
51
+ requires :klass, type: String, desc: 'Klass', values: %w[Element Segment Dataset]
50
52
  optional :export_format, type: String, desc: 'export format'
51
53
  end
52
54
  get do
53
- element = Labimotion::Element.find(params[:id])
54
- ## byebug
55
+ case params[:klass]
56
+ when 'Element'
57
+ element = Labimotion::Element.find(params[:id])
58
+ when 'Segment'
59
+ element = Labimotion::Segment.find(params[:id])
60
+ when 'Dataset'
61
+ element = Labimotion::Dataset.find(params[:id])
62
+ end
55
63
  export = Labimotion::ExportElement.new current_user, element, params[:export_format]
56
64
  env['api.format'] = :binary
57
65
  content_type 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
@@ -70,12 +78,7 @@ module Labimotion
70
78
  namespace :create_element_klass do
71
79
  desc 'create Generic Element Klass'
72
80
  params do
73
- requires :name, type: String, desc: 'Element Klass Name'
74
- requires :label, type: String, desc: 'Element Klass Label'
75
- requires :klass_prefix, type: String, desc: 'Element Klass Short Label Prefix'
76
- optional :icon_name, type: String, desc: 'Element Klass Icon Name'
77
- optional :desc, type: String, desc: 'Element Klass Desc'
78
- optional :properties_template, type: Hash, desc: 'Element Klass properties template'
81
+ use :create_element_klass_params
79
82
  end
80
83
  post do
81
84
  authenticate_admin!('elements')
@@ -89,12 +92,7 @@ module Labimotion
89
92
  namespace :update_element_klass do
90
93
  desc 'update Generic Element Klass'
91
94
  params do
92
- requires :id, type: Integer, desc: 'Element Klass ID'
93
- optional :label, type: String, desc: 'Element Klass Label'
94
- optional :klass_prefix, type: String, desc: 'Element Klass Short Label Prefix'
95
- optional :icon_name, type: String, desc: 'Element Klass Icon Name'
96
- optional :desc, type: String, desc: 'Element Klass Desc'
97
- optional :place, type: String, desc: 'Element Klass Place'
95
+ use :update_element_klass_params
98
96
  end
99
97
  post do
100
98
  authenticate_admin!('elements')
@@ -298,6 +296,39 @@ module Labimotion
298
296
  end
299
297
  end
300
298
 
299
+ namespace :upload_klass do
300
+ desc 'upload Generic Klass'
301
+ params do
302
+ use :upload_element_klass_params
303
+ end
304
+ post do
305
+ declared_params = declared(params, include_missing: false)
306
+ attributes = declared_params.merge(
307
+ created_by: current_user.id,
308
+ released_by: current_user.id,
309
+ updated_by: current_user.id,
310
+ is_active: false
311
+ )
312
+ validate_klass(attributes)
313
+ rescue StandardError => e
314
+ Labimotion.log_exception(e, current_user)
315
+ raise e
316
+ end
317
+ end
318
+
319
+ namespace :split do
320
+ desc 'split elements'
321
+ params do
322
+ requires :ui_state, type: Hash, desc: 'Selected elements from the UI'
323
+ end
324
+ post do
325
+ split_elements(params[:ui_state], current_user)
326
+ rescue StandardError => e
327
+ Labimotion.log_exception(e, current_user)
328
+ { error: e.message }
329
+ end
330
+ end
331
+
301
332
  desc 'Return serialized elements of current user'
302
333
  params do
303
334
  optional :collection_id, type: Integer, desc: 'Collection id'
@@ -311,7 +342,6 @@ module Labimotion
311
342
  paginate per_page: 7, offset: 0, max_per_page: 100
312
343
  get do
313
344
  scope = list_serialized_elements(params, current_user)
314
-
315
345
  reset_pagination_page(scope)
316
346
  generic_elements = paginate(scope).map do |element|
317
347
  Labimotion::ElementEntity.represent(
@@ -340,21 +370,14 @@ module Labimotion
340
370
 
341
371
  get do
342
372
  element = Labimotion::Element.find(params[:id])
343
- if Labimotion::IS_RAILS5 == true
344
- {
345
- element: ElementPermissionProxy.new(current_user, element, user_ids).serialized,
346
- attachments: attach_thumbnail(element&.attachments)
347
- }
348
- else
349
- {
350
- element: Labimotion::ElementEntity.represent(
351
- element,
352
- detail_levels: ElementDetailLevelCalculator.new(user: current_user, element: element).detail_levels,
353
- policy: @element_policy
354
- ),
355
- attachments: attach_thumbnail(element&.attachments)
356
- }
357
- end
373
+ {
374
+ element: Labimotion::ElementEntity.represent(
375
+ element,
376
+ detail_levels: ElementDetailLevelCalculator.new(user: current_user, element: element).detail_levels,
377
+ policy: @element_policy
378
+ ),
379
+ attachments: attach_thumbnail(element&.attachments)
380
+ }
358
381
  rescue StandardError => e
359
382
  Labimotion.log_exception(e, current_user)
360
383
  end
@@ -362,13 +385,7 @@ module Labimotion
362
385
 
363
386
  desc 'Create a element'
364
387
  params do
365
- requires :element_klass, type: Hash
366
- requires :name, type: String
367
- optional :properties, type: Hash
368
- optional :properties_release, type: Hash
369
- optional :collection_id, type: Integer
370
- requires :container, type: Hash
371
- optional :segments, type: Array, desc: 'Segments'
388
+ use :create_element_params
372
389
  end
373
390
  post do
374
391
  begin
@@ -387,12 +404,7 @@ module Labimotion
387
404
 
388
405
  desc 'Update element by id'
389
406
  params do
390
- requires :id, type: Integer, desc: 'element id'
391
- optional :name, type: String
392
- requires :properties, type: Hash
393
- optional :properties_release, type: Hash
394
- requires :container, type: Hash
395
- optional :segments, type: Array, desc: 'Segments'
407
+ use :update_element_params
396
408
  end
397
409
  route_param :id do
398
410
  before do
@@ -414,20 +426,7 @@ module Labimotion
414
426
  raise e
415
427
  end
416
428
  end
417
- end
418
-
419
- namespace :split do
420
- desc 'split elements'
421
- params do
422
- requires :ui_state, type: Hash, desc: 'Selected elements from the UI'
423
- end
424
- post do
425
- split_elements(params[:ui_state], current_user)
426
- rescue StandardError => e
427
- Labimotion.log_exception(e, current_user)
428
- { error: e.message }
429
- end
430
- end
429
+ end
431
430
  end
432
431
  end
433
432
  end
@@ -0,0 +1,34 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'labimotion/version'
4
+ require 'labimotion/libs/export_element'
5
+
6
+ module Labimotion
7
+ # Generic Element API
8
+ class GenericKlassAPI < Grape::API
9
+
10
+ resource :generic_klass do
11
+ namespace :download_klass do
12
+ desc 'export klass'
13
+ params do
14
+ requires :id, type: Integer, desc: 'element id'
15
+ requires :klass, type: String, desc: 'Klass', values: %w[ElementKlass SegmentKlass DatasetKlass]
16
+ end
17
+ get do
18
+ entity = "Labimotion::#{params[:klass]}".constantize.find_by(id: params[:id])
19
+ entity.update_columns(identifier: SecureRandom.uuid) if entity&.identifier.nil?
20
+ env['api.format'] = :binary
21
+ content_type('application/json')
22
+ filename = URI.escape("LabIMotion_#{params[:klass]}_#{entity.label}-#{Time.new.strftime("%Y%m%d%H%M%S")}.json")
23
+ # header['Content-Disposition'] = "attachment; filename=abc.docx"
24
+ header('Content-Disposition', "attachment; filename=\"#{filename}\"")
25
+ "Labimotion::#{params[:klass]}Entity".constantize.represent(entity)
26
+ # klass.as_json
27
+ rescue StandardError => e
28
+ Labimotion.log_exception(e, current_user)
29
+ {}
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -3,6 +3,7 @@ module Labimotion
3
3
  include Grape::Kaminari
4
4
  helpers Labimotion::GenericHelpers
5
5
  helpers Labimotion::SegmentHelpers
6
+ helpers Labimotion::ParamHelpers
6
7
 
7
8
  resource :segments do
8
9
  namespace :klasses do
@@ -30,11 +31,7 @@ module Labimotion
30
31
  namespace :create_segment_klass do
31
32
  desc 'create Generic Segment Klass'
32
33
  params do
33
- requires :label, type: String, desc: 'Segment Klass Label'
34
- requires :element_klass, type: Integer, desc: 'Element Klass Id'
35
- optional :desc, type: String, desc: 'Segment Klass Desc'
36
- optional :place, type: String, desc: 'Segment Klass Place', default: '100'
37
- optional :properties_template, type: Hash, desc: 'Element Klass properties template'
34
+ use :create_segment_klass_params
38
35
  end
39
36
  after_validation do
40
37
  authenticate_admin!('segments')
@@ -50,11 +47,7 @@ module Labimotion
50
47
  namespace :update_segment_klass do
51
48
  desc 'update Generic Segment Klass'
52
49
  params do
53
- requires :id, type: Integer, desc: 'Segment Klass ID'
54
- optional :label, type: String, desc: 'Segment Klass Label'
55
- optional :desc, type: String, desc: 'Segment Klass Desc'
56
- optional :place, type: String, desc: 'Segment Klass Place', default: '100'
57
- optional :identifier, type: String, desc: 'Segment Identifier'
50
+ use :update_segment_klass_params
58
51
  end
59
52
  after_validation do
60
53
  authenticate_admin!('segments')
@@ -140,6 +133,28 @@ module Labimotion
140
133
  raise e
141
134
  end
142
135
  end
136
+
137
+ namespace :upload_klass do
138
+ desc 'upload Generic Klass'
139
+ params do
140
+ use :upload_segment_klass_params
141
+ end
142
+ post do
143
+ declared_params = declared(params, include_missing: false)
144
+ attributes = declared_params.merge(
145
+ created_by: current_user.id,
146
+ released_by: current_user.id,
147
+ updated_by: current_user.id,
148
+ is_active: false
149
+ )
150
+ attr_klass = params['element_klass'] || {}
151
+ attributes.delete(:element_klass)
152
+ validate_klass(attributes, attr_klass)
153
+ rescue StandardError => e
154
+ Labimotion.log_exception(e, current_user)
155
+ raise e
156
+ end
157
+ end
143
158
  end
144
159
  end
145
160
  end
@@ -176,11 +176,6 @@ module Labimotion
176
176
  )
177
177
  end
178
178
  (attach_ary << att_ary).flatten! unless att_ary&.empty?
179
-
180
- if Labimotion::IS_RAILS5 == true
181
- TransferThumbnailToPublicJob.set(queue: "transfer_thumbnail_to_public_#{current_user.id}").perform_now(attach_ary) unless attach_ary.empty?
182
- TransferFileFromTmpJob.set(queue: "transfer_file_from_tmp_#{current_user.id}").perform_now(attach_ary) unless attach_ary.empty?
183
- end
184
179
  true
185
180
  rescue StandardError => e
186
181
  Labimotion.log_exception(e, current_user)
@@ -299,37 +294,44 @@ module Labimotion
299
294
  raise e
300
295
  end
301
296
 
302
- def create_repo_klass(params, current_user, origin)
303
- response = Labimotion::TemplateHub.fetch_identifier('ElementKlass', params[:identifier], origin)
304
- attributes = response.slice('name', 'label', 'desc', 'icon_name', 'uuid', 'klass_prefix', 'is_generic', 'identifier', 'properties_release', 'version')
305
- attributes['properties_release']['identifier'] = attributes['identifier']
306
- attributes['properties_template'] = attributes['properties_release']
307
- attributes['place'] = ((Labimotion::DatasetKlass.all.length * 10) || 0) + 10
308
- attributes['is_active'] = false
309
- attributes['updated_by'] = current_user.id
310
- attributes['sync_by'] = current_user.id
311
- attributes['sync_time'] = DateTime.now
312
-
297
+ def validate_klass(attributes)
313
298
  element_klass = Labimotion::ElementKlass.find_by(identifier: attributes['identifier'])
314
299
  if element_klass.present?
315
300
  if element_klass['uuid'] == attributes['uuid'] && element_klass['version'] == attributes['version']
316
- { status: 'success', message: "This element: #{attributes['name']} has the latest version!" }
301
+ return { status: 'success', message: "This element: #{attributes['name']} has the latest version!" }
317
302
  else
318
303
  element_klass.update!(attributes)
319
304
  element_klass.create_klasses_revision(current_user)
320
- { status: 'success', message: "This element: [#{attributes['name']}] has been upgraded to the version: #{attributes['version']}!" }
305
+ return { status: 'success', message: "This element: [#{attributes['name']}] has been upgraded to the version: #{attributes['version']}!" }
321
306
  end
322
307
  else
323
308
  exist_klass = Labimotion::ElementKlass.find_by(name: attributes['name'])
324
309
  if exist_klass.present?
325
- { status: 'error', message: "The name [#{attributes['name']}] is already in use." }
310
+ return { status: 'error', message: "The name [#{attributes['name']}] is already in use." }
326
311
  else
327
312
  attributes['created_by'] = current_user.id
328
313
  element_klass = Labimotion::ElementKlass.create!(attributes)
329
314
  element_klass.create_klasses_revision(current_user)
330
- { status: 'success', message: "The element: #{attributes['name']} has been created using version: #{attributes['version']}!" }
315
+ return { status: 'success', message: "The element: #{attributes['name']} has been created using version: #{attributes['version']}!" }
331
316
  end
332
317
  end
318
+
319
+ rescue StandardError => e
320
+ Labimotion.log_exception(e, current_user)
321
+ return { status: 'error', message: e.message }
322
+ end
323
+
324
+ def create_repo_klass(params, current_user, origin)
325
+ response = Labimotion::TemplateHub.fetch_identifier('ElementKlass', params[:identifier], origin)
326
+ attributes = response.slice('name', 'label', 'desc', 'icon_name', 'uuid', 'klass_prefix', 'is_generic', 'identifier', 'properties_release', 'version')
327
+ attributes['properties_release']['identifier'] = attributes['identifier']
328
+ attributes['properties_template'] = attributes['properties_release']
329
+ attributes['place'] = ((Labimotion::ElementKlass.all.length * 10) || 0) + 10
330
+ attributes['is_active'] = false
331
+ attributes['updated_by'] = current_user.id
332
+ attributes['sync_by'] = current_user.id
333
+ attributes['sync_time'] = DateTime.now
334
+ validate_klass(attributes)
333
335
  rescue StandardError => e
334
336
  Labimotion.log_exception(e, current_user)
335
337
  # { error: e.message }
@@ -0,0 +1,97 @@
1
+ # frozen_string_literal: true
2
+ require 'grape'
3
+ require 'labimotion/utils/utils'
4
+ # Helper for associated sample
5
+ module Labimotion
6
+ ## Generic Helpers
7
+ module ParamHelpers
8
+ extend Grape::API::Helpers
9
+ ## Element Klass Params
10
+ params :upload_element_klass_params do
11
+ requires :name, type: String, desc: 'Klass Name'
12
+ optional :label, type: String, desc: 'Klass label'
13
+ optional :desc, type: String, desc: 'Klass desc'
14
+ optional :klass_prefix, type: String, desc: 'Klass klass_prefix'
15
+ optional :icon_name, type: String, desc: 'Klass icon_name'
16
+ requires :properties_template, type: Hash, desc: 'Klass template'
17
+ optional :properties_release, type: Hash, desc: 'Klass release'
18
+ optional :released_at, type: DateTime, desc: 'Klass released_at'
19
+ requires :uuid, type: String, desc: 'Klass uuid'
20
+ requires :place, type: Integer, desc: 'Klass place'
21
+ requires :identifier, type: String, desc: 'Klass identifier'
22
+ optional :sync_time, type: DateTime, desc: 'Klass sync_time'
23
+ optional :version, type: String, desc: 'Klass version'
24
+ end
25
+
26
+ params :create_element_klass_params do
27
+ requires :name, type: String, desc: 'Element Klass Name'
28
+ requires :label, type: String, desc: 'Element Klass Label'
29
+ requires :klass_prefix, type: String, desc: 'Element Klass Short Label Prefix'
30
+ optional :icon_name, type: String, desc: 'Element Klass Icon Name'
31
+ optional :desc, type: String, desc: 'Element Klass Desc'
32
+ optional :properties_template, type: Hash, desc: 'Element Klass properties template'
33
+ end
34
+
35
+ params :update_element_klass_params do
36
+ requires :id, type: Integer, desc: 'Element Klass ID'
37
+ optional :label, type: String, desc: 'Element Klass Label'
38
+ optional :klass_prefix, type: String, desc: 'Element Klass Short Label Prefix'
39
+ optional :icon_name, type: String, desc: 'Element Klass Icon Name'
40
+ optional :desc, type: String, desc: 'Element Klass Desc'
41
+ optional :place, type: String, desc: 'Element Klass Place'
42
+ end
43
+
44
+ ## Element Params
45
+ params :create_element_params do
46
+ requires :element_klass, type: Hash
47
+ requires :name, type: String
48
+ optional :properties, type: Hash
49
+ optional :properties_release, type: Hash
50
+ optional :collection_id, type: Integer
51
+ requires :container, type: Hash
52
+ optional :segments, type: Array, desc: 'Segments'
53
+ end
54
+
55
+ params :update_element_params do
56
+ requires :id, type: Integer, desc: 'element id'
57
+ optional :name, type: String
58
+ requires :properties, type: Hash
59
+ optional :properties_release, type: Hash
60
+ requires :container, type: Hash
61
+ optional :segments, type: Array, desc: 'Segments'
62
+ end
63
+
64
+ ## Segment Klass Params
65
+ params :upload_segment_klass_params do
66
+ requires :label, type: String, desc: 'Klass label'
67
+ optional :desc, type: String, desc: 'Klass desc'
68
+ requires :properties_template, type: Hash, desc: 'Klass template'
69
+ optional :properties_release, type: Hash, desc: 'Klass release'
70
+ optional :released_at, type: DateTime, desc: 'Klass released_at'
71
+ requires :uuid, type: String, desc: 'Klass uuid'
72
+ requires :place, type: Integer, desc: 'Klass place'
73
+ requires :identifier, type: String, desc: 'Klass identifier'
74
+ optional :sync_time, type: DateTime, desc: 'Klass sync_time'
75
+ optional :version, type: String, desc: 'Klass version'
76
+ requires :element_klass, type: Hash do
77
+ use :upload_element_klass_params
78
+ end
79
+ end
80
+
81
+ params :update_segment_klass_params do
82
+ requires :id, type: Integer, desc: 'Segment Klass ID'
83
+ optional :label, type: String, desc: 'Segment Klass Label'
84
+ optional :desc, type: String, desc: 'Segment Klass Desc'
85
+ optional :place, type: String, desc: 'Segment Klass Place', default: '100'
86
+ optional :identifier, type: String, desc: 'Segment Identifier'
87
+ end
88
+
89
+ params :create_segment_klass_params do
90
+ requires :label, type: String, desc: 'Segment Klass Label'
91
+ requires :element_klass, type: Integer, desc: 'Element Klass Id'
92
+ optional :desc, type: String, desc: 'Segment Klass Desc'
93
+ optional :place, type: String, desc: 'Segment Klass Place', default: '100'
94
+ optional :properties_template, type: Hash, desc: 'Element Klass properties template'
95
+ end
96
+ end
97
+ end
@@ -63,45 +63,53 @@ module Labimotion
63
63
  raise e
64
64
  end
65
65
 
66
- def create_repo_klass(params, current_user, origin)
67
- response = Labimotion::TemplateHub.fetch_identifier('SegmentKlass', params[:identifier], origin)
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']
71
- attributes['place'] = ((Labimotion::SegmentKlass.all.length * 10) || 0) + 10
72
- attributes['is_active'] = false
73
- attributes['updated_by'] = current_user.id
74
- attributes['sync_by'] = current_user.id
75
- attributes['sync_time'] = DateTime.now
76
- element_klass = Labimotion::ElementKlass.find_by(identifier: response['element_klass']['identifier']) if response.dig('element_klass','identifier').present?
77
- element_klass = Labimotion::ElementKlass.find_by(name: response['element_klass']['name'], is_generic: false) if element_klass.nil?
78
- return { status: 'error', message: "The element [#{response['element_klass']['name']}] does not exist in this instance" } if element_klass.nil?
66
+ def validate_klass(attributes, attr_klass)
67
+ element_klass = Labimotion::ElementKlass.find_by(identifier: attr_klass['identifier']) if attr_klass.dig('identifier').present?
68
+ element_klass = Labimotion::ElementKlass.find_by(name: attr_klass['name'], is_generic: false) if element_klass.nil?
69
+ return { status: 'error', message: "The element [#{attr_klass['name']}] does not exist in this instance" } if element_klass.nil?
79
70
 
80
71
  # el_attributes = response['element_klass'].slice('name', 'label', 'desc', 'uuid', 'identifier', 'icon_name', 'klass_prefix', 'is_generic', 'released_at')
81
72
  # el_attributes['properties_template'] = response['element_klass']['properties_release']
82
73
  # Labimotion::ElementKlass.create!(el_attributes)
83
-
84
74
  attributes['element_klass_id'] = element_klass.id
85
75
  segment_klass = Labimotion::SegmentKlass.find_by(identifier: attributes['identifier'])
86
76
  if segment_klass.present?
87
77
  if segment_klass['uuid'] == attributes['uuid'] && segment_klass['version'] == attributes['version']
88
- { status: 'success', message: "This segment: #{attributes['label']} has the latest version!" }
78
+ return { status: 'success', message: "This segment: #{attributes['label']} has the latest version!" }
89
79
  else
90
80
  segment_klass.update!(attributes)
91
81
  segment_klass.create_klasses_revision(current_user)
92
- { status: 'success', message: "This segment: [#{attributes['label']}] has been upgraded to the version: #{attributes['version']}!" }
82
+ return { status: 'success', message: "This segment: [#{attributes['label']}] has been upgraded to the version: #{attributes['version']}!" }
93
83
  end
94
84
  else
95
85
  exist_klass = Labimotion::SegmentKlass.find_by(label: attributes['label'], element_klass_id: element_klass.id)
96
86
  if exist_klass.present?
97
- { status: 'error', message: "The segment [#{attributes['label']}] is already in use." }
87
+ return { status: 'error', message: "The segment [#{attributes['label']}] is already in use." }
98
88
  else
99
89
  attributes['created_by'] = current_user.id
100
90
  segment_klass = Labimotion::SegmentKlass.create!(attributes)
101
91
  segment_klass.create_klasses_revision(current_user)
102
- { status: 'success', message: "The segment: #{attributes['label']} has been created using version: #{attributes['version']}!" }
92
+ return { status: 'success', message: "The segment: #{attributes['label']} has been created using version: #{attributes['version']}!" }
103
93
  end
104
94
  end
95
+ rescue StandardError => e
96
+ Labimotion.log_exception(e, current_user)
97
+ return { status: 'error', message: e.message }
98
+ end
99
+
100
+ def create_repo_klass(params, current_user, origin)
101
+ response = Labimotion::TemplateHub.fetch_identifier('SegmentKlass', params[:identifier], origin)
102
+ attributes = response.slice('label', 'desc', 'uuid', 'identifier', 'released_at', 'properties_release', 'version')
103
+ attributes['properties_release']['identifier'] = attributes['identifier']
104
+ attributes['properties_template'] = attributes['properties_release']
105
+ attributes['place'] = ((Labimotion::SegmentKlass.all.length * 10) || 0) + 10
106
+ attributes['is_active'] = false
107
+ attributes['updated_by'] = current_user.id
108
+ attributes['sync_by'] = current_user.id
109
+ attributes['sync_time'] = DateTime.now
110
+ attr_klass = response.dig('element_klass', {}) # response['element_klass']
111
+ validate_klass(attributes, attr_klass)
112
+
105
113
  rescue StandardError => e
106
114
  Labimotion.log_exception(e, current_user)
107
115
  raise e
@@ -27,18 +27,10 @@ module Labimotion
27
27
 
28
28
  dsr = []
29
29
  ols = nil
30
- if Labimotion::IS_RAILS5 == true
31
- Zip::File.open(att.store.path) do |zip_file|
32
- res = Labimotion::Converter.collect_metadata(zip_file) if att.filename.split('.')&.last == 'zip'
33
- ols = res[:o] unless res&.dig(:o).nil?
34
- dsr.push(res[:d]) unless res&.dig(:d).nil?
35
- end
36
- else
37
- Zip::File.open(att.attachment_attacher.file.url) do |zip_file|
38
- res = Labimotion::Converter.collect_metadata(zip_file) if att.filename.split('.')&.last == 'zip'
39
- ols = res[:o] unless res&.dig(:o).nil?
40
- dsr.push(res[:d]) unless res&.dig(:d).nil?
41
- end
30
+ Zip::File.open(att.attachment_attacher.file.url) do |zip_file|
31
+ res = Labimotion::Converter.collect_metadata(zip_file) if att.filename.split('.')&.last == 'zip'
32
+ ols = res[:o] unless res&.dig(:o).nil?
33
+ dsr.push(res[:d]) unless res&.dig(:d).nil?
42
34
  end
43
35
  dsr.flatten!
44
36
  dataset = build_ds(att.attachable_id, ols)
@@ -145,16 +137,9 @@ module Labimotion
145
137
  created_by: oat.created_by,
146
138
  created_for: oat.created_for,
147
139
  )
148
- # att.attachment_attacher.attach(tmp_file)
149
- if att.valid? && Labimotion::IS_RAILS5 == false
150
- ## att.attachment_attacher.create_derivatives
151
- att.save!
152
- end
153
- if att.valid? && Labimotion::IS_RAILS5 == true
154
- att.save!
155
- primary_store = Rails.configuration.storage.primary_store
156
- att.update!(storage: primary_store)
157
- end
140
+
141
+ att.save! if att.valid?
142
+
158
143
  process_ds(att.id)
159
144
  rescue StandardError => e
160
145
  raise e
@@ -168,11 +153,7 @@ module Labimotion
168
153
  response = nil
169
154
  begin
170
155
  ofile = Rails.root.join(data[:f], data[:a].filename)
171
- if Labimotion::IS_RAILS5 == true
172
- FileUtils.cp(data[:a].store.path, ofile)
173
- else
174
- FileUtils.cp(data[:a].attachment_url, ofile)
175
- end
156
+ FileUtils.cp(data[:a].attachment_url, ofile)
176
157
 
177
158
  File.open(ofile, 'r') do |f|
178
159
  body = { file: f }
@@ -145,18 +145,9 @@ module Labimotion
145
145
  sheet_name = "Sheet#{idx+1}"
146
146
  sheet = @xfile.workbook.add_worksheet(name: sheet_name)
147
147
  name_mapping.push([sheet_name, att.filename])
148
-
149
- if Labimotion::IS_RAILS5 == true
150
- File.open(att.store.path) do |fi|
151
- fi.each_line do |line|
152
- sheet.add_row(line.split(','))
153
- end
154
- end
155
- else
156
- File.open(att.attachment_url) do |fi|
157
- fi.each_line do |line|
158
- sheet.add_row(line.split(','))
159
- end
148
+ File.open(att.attachment_url) do |fi|
149
+ fi.each_line do |line|
150
+ sheet.add_row(line.split(','))
160
151
  end
161
152
  end
162
153
  end