extraction_token_util 0.0.2 → 0.0.3a11
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/extraction_token_util.rb +52 -31
- metadata +33 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 807964dad3726d71b70ad733c4d1d2362ad0d7ece464e277d5c86868d616db12
|
4
|
+
data.tar.gz: 947c1a665fdf8e23bf01789b17ce487aa8e62d8f6bbbc3214e7728c4531e06a4
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: aa5a205ebdf99bd9b2b314fe02a9e58f8303955a075b1a79ca105c3cb678cc90af08eb1eeeea938938fc8af4b14a97e9176dc268a68ced77cec5eb3eb8205422
|
7
|
+
data.tar.gz: 77973aab9f3e5bc6256a5d2f746df0889dfda93ff162aa2ddc24034d9869634ac3dcb1e2798612a6fedaf9fc6bbf0520d75599a31645b8da03b7838c780195c9
|
@@ -1,85 +1,106 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
#
|
4
|
+
# This Gem provides support for common string operations with tokens in
|
5
|
+
# Extraction lims like:
|
6
|
+
# - quoting / unquoting strings
|
7
|
+
# - padding / unpadding a string of digits until reaching a fixed size by
|
8
|
+
# using zeroes support to perform recognizion of the following tokens:
|
9
|
+
# - generate the address positions of the wells of a rack (A01, B01... F12)
|
10
|
+
#
|
11
|
+
# Also provides pattern recognision for UUID, Wildcard variables (Eg: ?a,
|
12
|
+
# ?rack, etc.), Fluidx barcodes: (Eg: FR1234678), Well Location: (Eg: A02, F11)
|
13
|
+
#
|
1
14
|
module ExtractionTokenUtil
|
2
|
-
|
3
|
-
|
4
|
-
|
15
|
+
UUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/.freeze
|
16
|
+
WILDCARD = /\?\w*/.freeze
|
17
|
+
LOCATION = /^([A-H])(\d{1,2})$/.freeze
|
5
18
|
|
6
19
|
def self.fluidx_barcode_prefix
|
7
20
|
'F'
|
8
21
|
end
|
9
22
|
|
10
|
-
def self.
|
11
|
-
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.LOCATION_REGEXP
|
15
|
-
/^([A-H])(\d{1,2})$/
|
16
|
-
end
|
17
|
-
|
18
|
-
def self.is_uuid?(str)
|
19
|
-
str.kind_of?(String) && !str.match(ExtractionTokenUtil.UUID_REGEXP).nil?
|
23
|
+
def self.uuid?(str)
|
24
|
+
str.is_a?(String) && !str.match(ExtractionTokenUtil::UUID).nil?
|
20
25
|
end
|
21
26
|
|
22
27
|
def self.quote_if_uuid(str)
|
23
|
-
return quote(str) if
|
24
|
-
|
28
|
+
return quote(str) if uuid?(str)
|
29
|
+
|
30
|
+
str
|
25
31
|
end
|
26
32
|
|
27
|
-
def self.
|
33
|
+
def self.valid_fluidx_barcode?(barcode)
|
28
34
|
barcode.to_s.start_with?(fluidx_barcode_prefix)
|
29
35
|
end
|
30
36
|
|
31
37
|
def self.uuid(str)
|
32
|
-
str.match(ExtractionTokenUtil
|
38
|
+
str.match(ExtractionTokenUtil::UUID)[0]
|
33
39
|
end
|
34
40
|
|
35
|
-
def self.
|
36
|
-
str.
|
41
|
+
def self.wildcard?(str)
|
42
|
+
str.is_a?(String) && !str.match(ExtractionTokenUtil::WILDCARD).nil?
|
37
43
|
end
|
38
44
|
|
39
45
|
def self.kind_of_asset_id?(str)
|
40
|
-
|
46
|
+
(str.is_a?(String) && (wildcard?(str) || uuid?(str)))
|
41
47
|
end
|
42
48
|
|
43
49
|
def self.to_asset_group_name(wildcard)
|
44
50
|
return wildcard if wildcard.nil?
|
51
|
+
|
45
52
|
wildcard.gsub('?', '')
|
46
53
|
end
|
47
54
|
|
48
55
|
def self.generate_positions(letters, columns)
|
49
|
-
size=letters.size * columns.size
|
50
|
-
|
51
|
-
|
56
|
+
size = letters.size * columns.size
|
57
|
+
size.times.map do |idx|
|
58
|
+
letter = position_letter_for_index(idx, letters)
|
59
|
+
number = position_number_for_index(idx, letters, columns)
|
60
|
+
"#{letter}#{number}"
|
52
61
|
end
|
53
62
|
end
|
54
63
|
|
55
|
-
def self.
|
56
|
-
|
64
|
+
def self.position_letter_for_index(idx, letters)
|
65
|
+
letters[(idx % letters.length).floor]
|
66
|
+
end
|
67
|
+
|
68
|
+
def self.position_number_for_index(idx, letters, columns)
|
69
|
+
pad((columns[(idx / letters.length).floor]).to_s, '0', 2)
|
70
|
+
end
|
71
|
+
|
72
|
+
def self.pad(str, chr, size)
|
73
|
+
"#{(size - str.size).times.map { chr }.join('')}#{str}"
|
57
74
|
end
|
58
75
|
|
59
76
|
def self.unpad_location(location)
|
60
77
|
return location unless location
|
78
|
+
|
61
79
|
loc = location.match(/(\w)(0*)(\d*)/)
|
62
|
-
loc[1]+loc[3]
|
80
|
+
loc[1] + loc[3]
|
63
81
|
end
|
64
82
|
|
65
83
|
def self.pad_location(location)
|
66
84
|
return location unless location
|
67
|
-
|
68
|
-
|
85
|
+
|
86
|
+
parts = location.match(ExtractionTokenUtil::LOCATION)
|
87
|
+
return nil if parts.to_a.empty?
|
88
|
+
|
69
89
|
letter = parts[1]
|
70
90
|
number = parts[2]
|
71
|
-
number = ExtractionTokenUtil.pad(number,
|
91
|
+
number = ExtractionTokenUtil.pad(number, '0', 2) unless number.length == 2
|
72
92
|
"#{letter}#{number}"
|
73
93
|
end
|
74
94
|
|
75
95
|
def self.quote(str)
|
76
96
|
return str unless str
|
97
|
+
|
77
98
|
"\"#{str}\""
|
78
99
|
end
|
79
100
|
|
80
101
|
def self.unquote(str)
|
81
102
|
return str unless str
|
82
|
-
str.gsub(/\"/,"")
|
83
|
-
end
|
84
103
|
|
104
|
+
str.gsub(/\"/, '')
|
105
|
+
end
|
85
106
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: extraction_token_util
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.3a11
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Eduardo Martin Rojo
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '3'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: rubocop
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0.80'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0.80'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rubocop-rspec
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description:
|
28
56
|
email:
|
29
57
|
executables: []
|
@@ -48,11 +76,12 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
48
76
|
version: '0'
|
49
77
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
50
78
|
requirements:
|
51
|
-
- - "
|
79
|
+
- - ">"
|
52
80
|
- !ruby/object:Gem::Version
|
53
|
-
version:
|
81
|
+
version: 1.3.1
|
54
82
|
requirements: []
|
55
|
-
|
83
|
+
rubyforge_project:
|
84
|
+
rubygems_version: 2.7.7
|
56
85
|
signing_key:
|
57
86
|
specification_version: 4
|
58
87
|
summary: Set of Ruby methods to provide lexical support to common formats in use in
|