labimotion 1.3.0.rc4 → 1.3.0

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: 99c322d38e4cd89d9983147d40d2ceb98aee8342fe9d036f6757034a52fc8b81
4
- data.tar.gz: ccf53a3066ff47347a29f45594fbac4436fb6161078c56ef5461a672fa99e0db
3
+ metadata.gz: 94c2f0242360d6b6fd17c82850b0650fe18f86ccd484b47ce98ae7dfdccd50d1
4
+ data.tar.gz: 925eb30692c128d1339f97f96fdfe3b283f251822293fab6f25b9e2cffaedc25
5
5
  SHA512:
6
- metadata.gz: ce7a434025855de8eafc83450b4bb8808d77e237f306bc5c0f986bdbfb7cc72f46199d615eca43085353af365ea4315ca89f44bedc2ff487dc24d1c69e9a781d
7
- data.tar.gz: fff821b8cf75223a50feb3d630eb229bb709de42c8644e1175cbe5c0cfad7a560e6ac9ca2548bfdecb1f2b6372c1e6ba9739ffbd712f82d017793b61e8b0e85b
6
+ metadata.gz: b611c37931e15ee233ff01708d2fafa421746b68aa5e63af907a0b811ccc2958b04491c80da4219516bc62db7cad682138af2c999d85a9708eca6a688489e63c
7
+ data.tar.gz: 55680523c5140f1bfaffc632147ca1bce2a01969cb3866f1f1caa97681cfac9b497520b9002c9b2302e998792d6c6fd5c9ee50a5746493924982d745e031f8bc
@@ -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
@@ -59,7 +60,6 @@ module Labimotion
59
60
  when 'Dataset'
60
61
  element = Labimotion::Dataset.find(params[:id])
61
62
  end
62
- ## byebug
63
63
  export = Labimotion::ExportElement.new current_user, element, params[:export_format]
64
64
  env['api.format'] = :binary
65
65
  content_type 'application/vnd.openxmlformats-officedocument.wordprocessingml.document'
@@ -78,12 +78,7 @@ module Labimotion
78
78
  namespace :create_element_klass do
79
79
  desc 'create Generic Element Klass'
80
80
  params do
81
- requires :name, type: String, desc: 'Element Klass Name'
82
- requires :label, type: String, desc: 'Element Klass Label'
83
- requires :klass_prefix, type: String, desc: 'Element Klass Short Label Prefix'
84
- optional :icon_name, type: String, desc: 'Element Klass Icon Name'
85
- optional :desc, type: String, desc: 'Element Klass Desc'
86
- optional :properties_template, type: Hash, desc: 'Element Klass properties template'
81
+ use :create_element_klass_params
87
82
  end
88
83
  post do
89
84
  authenticate_admin!('elements')
@@ -97,12 +92,7 @@ module Labimotion
97
92
  namespace :update_element_klass do
98
93
  desc 'update Generic Element Klass'
99
94
  params do
100
- requires :id, type: Integer, desc: 'Element Klass ID'
101
- optional :label, type: String, desc: 'Element Klass Label'
102
- optional :klass_prefix, type: String, desc: 'Element Klass Short Label Prefix'
103
- optional :icon_name, type: String, desc: 'Element Klass Icon Name'
104
- optional :desc, type: String, desc: 'Element Klass Desc'
105
- optional :place, type: String, desc: 'Element Klass Place'
95
+ use :update_element_klass_params
106
96
  end
107
97
  post do
108
98
  authenticate_admin!('elements')
@@ -306,6 +296,39 @@ module Labimotion
306
296
  end
307
297
  end
308
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
+
309
332
  desc 'Return serialized elements of current user'
310
333
  params do
311
334
  optional :collection_id, type: Integer, desc: 'Collection id'
@@ -319,7 +342,6 @@ module Labimotion
319
342
  paginate per_page: 7, offset: 0, max_per_page: 100
320
343
  get do
321
344
  scope = list_serialized_elements(params, current_user)
322
-
323
345
  reset_pagination_page(scope)
324
346
  generic_elements = paginate(scope).map do |element|
325
347
  Labimotion::ElementEntity.represent(
@@ -363,13 +385,7 @@ module Labimotion
363
385
 
364
386
  desc 'Create a element'
365
387
  params do
366
- requires :element_klass, type: Hash
367
- requires :name, type: String
368
- optional :properties, type: Hash
369
- optional :properties_release, type: Hash
370
- optional :collection_id, type: Integer
371
- requires :container, type: Hash
372
- optional :segments, type: Array, desc: 'Segments'
388
+ use :create_element_params
373
389
  end
374
390
  post do
375
391
  begin
@@ -388,12 +404,7 @@ module Labimotion
388
404
 
389
405
  desc 'Update element by id'
390
406
  params do
391
- requires :id, type: Integer, desc: 'element id'
392
- optional :name, type: String
393
- requires :properties, type: Hash
394
- optional :properties_release, type: Hash
395
- requires :container, type: Hash
396
- optional :segments, type: Array, desc: 'Segments'
407
+ use :update_element_params
397
408
  end
398
409
  route_param :id do
399
410
  before do
@@ -415,20 +426,7 @@ module Labimotion
415
426
  raise e
416
427
  end
417
428
  end
418
- end
419
-
420
- namespace :split do
421
- desc 'split elements'
422
- params do
423
- requires :ui_state, type: Hash, desc: 'Selected elements from the UI'
424
- end
425
- post do
426
- split_elements(params[:ui_state], current_user)
427
- rescue StandardError => e
428
- Labimotion.log_exception(e, current_user)
429
- { error: e.message }
430
- end
431
- end
429
+ end
432
430
  end
433
431
  end
434
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
@@ -294,37 +294,44 @@ module Labimotion
294
294
  raise e
295
295
  end
296
296
 
297
- def create_repo_klass(params, current_user, origin)
298
- response = Labimotion::TemplateHub.fetch_identifier('ElementKlass', params[:identifier], origin)
299
- attributes = response.slice('name', 'label', 'desc', 'icon_name', 'uuid', 'klass_prefix', 'is_generic', 'identifier', 'properties_release', 'version')
300
- attributes['properties_release']['identifier'] = attributes['identifier']
301
- attributes['properties_template'] = attributes['properties_release']
302
- attributes['place'] = ((Labimotion::DatasetKlass.all.length * 10) || 0) + 10
303
- attributes['is_active'] = false
304
- attributes['updated_by'] = current_user.id
305
- attributes['sync_by'] = current_user.id
306
- attributes['sync_time'] = DateTime.now
307
-
297
+ def validate_klass(attributes)
308
298
  element_klass = Labimotion::ElementKlass.find_by(identifier: attributes['identifier'])
309
299
  if element_klass.present?
310
300
  if element_klass['uuid'] == attributes['uuid'] && element_klass['version'] == attributes['version']
311
- { status: 'success', message: "This element: #{attributes['name']} has the latest version!" }
301
+ return { status: 'success', message: "This element: #{attributes['name']} has the latest version!" }
312
302
  else
313
303
  element_klass.update!(attributes)
314
304
  element_klass.create_klasses_revision(current_user)
315
- { 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']}!" }
316
306
  end
317
307
  else
318
308
  exist_klass = Labimotion::ElementKlass.find_by(name: attributes['name'])
319
309
  if exist_klass.present?
320
- { status: 'error', message: "The name [#{attributes['name']}] is already in use." }
310
+ return { status: 'error', message: "The name [#{attributes['name']}] is already in use." }
321
311
  else
322
312
  attributes['created_by'] = current_user.id
323
313
  element_klass = Labimotion::ElementKlass.create!(attributes)
324
314
  element_klass.create_klasses_revision(current_user)
325
- { 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']}!" }
326
316
  end
327
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)
328
335
  rescue StandardError => e
329
336
  Labimotion.log_exception(e, current_user)
330
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
@@ -6,6 +6,12 @@ module Labimotion
6
6
  extend ActiveSupport::Concern
7
7
  included do
8
8
  # has_many :element_klasses_revisions, dependent: :destroy
9
+ before_save :check_identifier
10
+ end
11
+
12
+
13
+ def check_identifier
14
+ self.identifier = identifier || SecureRandom.uuid
9
15
  end
10
16
 
11
17
  def create_klasses_revision(current_user)
@@ -44,11 +44,11 @@ module Labimotion
44
44
  "position": 35,
45
45
  "placeholder": "amount of substance",
46
46
  "units": [
47
- { "key": "mol", "label": "mol (M)", "nm": 1 },
48
- { "key": "mmol", "label": "mmol (mM)", "nm": 1000 },
49
- { "key": "umol", "label": "µmol (µM)", "nm": 1000000 },
50
- { "key": "nmol", "label": "nmol (nM)", "nm": 1.0e9 },
51
- { "key": "pmol", "label": "pmol (pM)", "nm": 1.0e12 }
47
+ { "key": "mol", "label": "mol", "nm": 1 },
48
+ { "key": "mmol", "label": "mmol", "nm": 1000 },
49
+ { "key": "umol", "label": "µmol", "nm": 1000000 },
50
+ { "key": "nmol", "label": "nmol", "nm": 1.0e9 },
51
+ { "key": "pmol", "label": "pmol", "nm": 1.0e12 }
52
52
  ]
53
53
  },
54
54
  {
@@ -59,11 +59,11 @@ module Labimotion
59
59
  "position": 40,
60
60
  "placeholder": "molarity",
61
61
  "units": [
62
- { "key": "mol_l", "label": "mol/L (M/L)", "nm": 1 },
63
- { "key": "mmol_l", "label": "mmol/L (mM/L)", "nm": 1000 },
64
- { "key": "umol_l", "label": "µmol/L (µM/L)", "nm": 1000000 },
65
- { "key": "nmol_l", "label": "nmol/L (nM/L)", "nm": 1000000000 },
66
- { "key": "pmol_l", "label": "pmol/L (pM/L)", "nm": 1000000000000 }
62
+ { "key": "mol_l", "label": "mol/L", "nm": 1 },
63
+ { "key": "mmol_l", "label": "mmol/L", "nm": 1000 },
64
+ { "key": "umol_l", "label": "µmol/L", "nm": 1000000 },
65
+ { "key": "nmol_l", "label": "nmol/L", "nm": 1000000000 },
66
+ { "key": "pmol_l", "label": "pmol/L", "nm": 1000000000000 }
67
67
  ]
68
68
  },
69
69
  {
@@ -168,6 +168,15 @@ module Labimotion
168
168
  "placeholder": "Electric Charge in C",
169
169
  "units": [{ "key": "ec_c", "label": "C", "nm": 1 }]
170
170
  },
171
+ {
172
+ "type": "numeric",
173
+ "field": "electric_charge_mol",
174
+ "label": "Electric Charge per mol",
175
+ "default": "",
176
+ "position": 85,
177
+ "placeholder": "Electric Charge per mol",
178
+ "units": [{ "key": "ec_mol", "label": "C/mol", "nm": 1 }]
179
+ },
171
180
  {
172
181
  "type": "numeric",
173
182
  "field": "electric_field",
@@ -206,12 +215,12 @@ module Labimotion
206
215
  {
207
216
  "type": "numeric",
208
217
  "field": "faraday",
209
- "label": "Faraday",
218
+ "label": "Faraday (Fd)",
210
219
  "default": "",
211
220
  "position": 95,
212
- "placeholder": "Faraday",
221
+ "placeholder": "Faraday (Fd)",
213
222
  "units": [
214
- { "key": "faraday", "label": "C/m", "nm": 1 }
223
+ { "key": "faraday", "label": "Fd", "nm": 1 }
215
224
  ]
216
225
  },
217
226
  {
@@ -2,5 +2,5 @@
2
2
 
3
3
  ## Labimotion Version
4
4
  module Labimotion
5
- VERSION = '1.3.0.rc4'
5
+ VERSION = '1.3.0'
6
6
  end
data/lib/labimotion.rb CHANGED
@@ -15,6 +15,7 @@ module Labimotion
15
15
  autoload :Utils, 'labimotion/utils/utils'
16
16
 
17
17
  ######## APIs
18
+ autoload :GenericKlassAPI, 'labimotion/apis/generic_klass_api'
18
19
  autoload :GenericElementAPI, 'labimotion/apis/generic_element_api'
19
20
  autoload :GenericDatasetAPI, 'labimotion/apis/generic_dataset_api'
20
21
  autoload :SegmentAPI, 'labimotion/apis/segment_api'
@@ -48,6 +49,7 @@ module Labimotion
48
49
  autoload :SegmentHelpers, 'labimotion/helpers/segment_helpers'
49
50
  autoload :DatasetHelpers, 'labimotion/helpers/dataset_helpers'
50
51
  autoload :SearchHelpers, 'labimotion/helpers/search_helpers'
52
+ autoload :ParamHelpers, 'labimotion/helpers/param_helpers'
51
53
  autoload :ConverterHelpers, 'labimotion/helpers/converter_helpers'
52
54
  autoload :SampleAssociationHelpers, 'labimotion/helpers/sample_association_helpers'
53
55
  autoload :RepositoryHelpers, 'labimotion/helpers/repository_helpers'
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.3.0.rc4
4
+ version: 1.3.0
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-04-04 00:00:00.000000000 Z
12
+ date: 2024-04-24 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: rails
@@ -37,6 +37,7 @@ files:
37
37
  - lib/labimotion/apis/converter_api.rb
38
38
  - lib/labimotion/apis/generic_dataset_api.rb
39
39
  - lib/labimotion/apis/generic_element_api.rb
40
+ - lib/labimotion/apis/generic_klass_api.rb
40
41
  - lib/labimotion/apis/labimotion_hub_api.rb
41
42
  - lib/labimotion/apis/segment_api.rb
42
43
  - lib/labimotion/collection/export.rb
@@ -60,6 +61,7 @@ files:
60
61
  - lib/labimotion/helpers/dataset_helpers.rb
61
62
  - lib/labimotion/helpers/element_helpers.rb
62
63
  - lib/labimotion/helpers/generic_helpers.rb
64
+ - lib/labimotion/helpers/param_helpers.rb
63
65
  - lib/labimotion/helpers/repository_helpers.rb
64
66
  - lib/labimotion/helpers/sample_association_helpers.rb
65
67
  - lib/labimotion/helpers/search_helpers.rb
@@ -119,9 +121,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
119
121
  version: '0'
120
122
  required_rubygems_version: !ruby/object:Gem::Requirement
121
123
  requirements:
122
- - - ">"
124
+ - - ">="
123
125
  - !ruby/object:Gem::Version
124
- version: 1.3.1
126
+ version: '0'
125
127
  requirements: []
126
128
  rubygems_version: 3.1.6
127
129
  signing_key: