dcidev_utility 0.0.1 → 0.0.4
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/README.md +55 -1
- data/lib/dcidev_utility.rb +200 -173
- metadata +7 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5749eeed8cb00fe54778881fd37e3a9b86bd17c308e8de9ddd5727ab2914d54a
|
4
|
+
data.tar.gz: 2f99aa40b4863ad78e0abc3483378785b56a59325f0c615cb35bba828e063ed1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 87f626df65618735269595981bdaa9cd5add71320ef320d9a73a593b6746a1418c6f0c5c31290ac350e9ebc9a6598bfddefc012a5d522c060cd9ac8a40d4f5ae
|
7
|
+
data.tar.gz: e55789c2d6dc38bd3262559d04d65feb56e22587b677924e19a979beb02eefd52abdc5d667a85fd719decdeb5bd3ff5129c711c7da775e22c0ec00fba3bebca4
|
data/README.md
CHANGED
@@ -1 +1,55 @@
|
|
1
|
-
|
1
|
+
# Features
|
2
|
+
|
3
|
+
```ruby
|
4
|
+
# check if numeric value
|
5
|
+
DcidevUtility.is_numeric?(number)
|
6
|
+
|
7
|
+
# convert phone number prefixed with '+62' or '0' to '62' format
|
8
|
+
# +628xxxxx --> 628xxxxx
|
9
|
+
DcidevUtility.phone_converter(phone)
|
10
|
+
|
11
|
+
# download file from url and save it as Tempfile
|
12
|
+
DcidevUtility.download_to_file(url)
|
13
|
+
|
14
|
+
# check if value is a phone number
|
15
|
+
DcidevUtility.is_phone_number?(phone)
|
16
|
+
|
17
|
+
# revert 62xx phone number format to 08xxx format
|
18
|
+
DcidevUtility.original_phone(phone)
|
19
|
+
|
20
|
+
# download file from url and return it as base64
|
21
|
+
# the returned value will be an array containing [extension, encoded_string, full_base64_string]
|
22
|
+
DcidevUtility.file_url_to_base64(url)
|
23
|
+
|
24
|
+
# check if base64
|
25
|
+
DcidevUtility.is_base64?(string)
|
26
|
+
|
27
|
+
# encode base64 to Tempfile
|
28
|
+
DcidevUtility.base64_to_file(string)
|
29
|
+
|
30
|
+
# check if url valid
|
31
|
+
DcidevUtility.url_exists?(url)
|
32
|
+
|
33
|
+
# extract dob from nik
|
34
|
+
DcidevUtility.dob_from_nik(nik)
|
35
|
+
|
36
|
+
# extract gender from nik
|
37
|
+
DcidevUtility.gender_from_nik(nik)
|
38
|
+
|
39
|
+
# convert integer value to formatted string currency
|
40
|
+
DcidevUtility.currency_formatter(amount, unit: "Rp. ", separator: ".", delimiter: ".", precision: 0)
|
41
|
+
|
42
|
+
# extract encoded string from base64
|
43
|
+
DcidevUtility.base64_encoded_string(base64)
|
44
|
+
|
45
|
+
# extract extension from base64
|
46
|
+
DcidevUtility.base64_extension(base64)
|
47
|
+
|
48
|
+
# mask a string
|
49
|
+
DcidevUtility.string_masking(string, length = 9)
|
50
|
+
|
51
|
+
DcidevUtility.response_simplifier(response)
|
52
|
+
|
53
|
+
# takeout base64 string from json hash
|
54
|
+
DcidevUtility.json_simplifier(json)
|
55
|
+
```
|
data/lib/dcidev_utility.rb
CHANGED
@@ -1,202 +1,229 @@
|
|
1
1
|
module DcidevUtility
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
class << self
|
3
|
+
def is_numeric?(number)
|
4
|
+
number = number.to_s
|
5
|
+
data = number.delete("+")
|
6
|
+
result = data =~ /^-?[0-9]+$/
|
7
|
+
result == 0
|
8
|
+
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
def phone_converter(number)
|
11
|
+
return if number.nil?
|
12
|
+
phone = number.to_s.scan(/\d+/).join
|
13
|
+
return phone.sub('0', '62') if number[0] == '0'
|
14
|
+
return phone.sub('+', '') if number[0] == '+'
|
15
15
|
|
16
|
-
|
17
|
-
|
16
|
+
phone
|
17
|
+
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
19
|
+
def download_to_file(url)
|
20
|
+
begin
|
21
|
+
uri = URI::parse(url)
|
22
|
+
extension = File.extname(uri.path)
|
23
|
+
stream = URI::open(url, "rb")
|
24
|
+
Tempfile.new([File.basename(uri.path), extension]).tap do |file|
|
25
|
+
file.binmode
|
26
|
+
IO.copy_stream(stream, file)
|
27
|
+
stream.close
|
28
|
+
file.rewind
|
29
|
+
end
|
30
|
+
rescue => e
|
31
|
+
return nil
|
32
|
+
end
|
33
|
+
end
|
34
34
|
|
35
|
+
def is_phone_number?(phone)
|
36
|
+
chars = ('a'..'z').to_a + ('A'..'Z').to_a
|
37
|
+
phone.chars.detect { |ch| !chars.include?(ch) }.nil?
|
38
|
+
end
|
35
39
|
|
40
|
+
def original_phone(phone)
|
41
|
+
unless phone.nil?
|
42
|
+
phone = phone.to_s.scan(/\d+/).join
|
43
|
+
return phone.sub('62', '0') if phone[0] == '6' && phone[1] == '2'
|
44
|
+
if phone[0] == '+' && phone[1] == '6' && phone[2] == '2'
|
45
|
+
return phone.sub('+62', '0')
|
46
|
+
end
|
36
47
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
end
|
48
|
+
phone
|
49
|
+
end
|
50
|
+
end
|
41
51
|
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
if phone[0] == '+' && phone[1] == '6' && phone[2] == '2'
|
47
|
-
return phone.sub('+62', '0')
|
52
|
+
def file_url_to_base64(url)
|
53
|
+
return [nil, nil, nil] if url.nil?
|
54
|
+
file = self.download_to_file(url)
|
55
|
+
return self.file_to_base64(file)
|
48
56
|
end
|
49
57
|
|
50
|
-
|
51
|
-
|
52
|
-
|
58
|
+
def file_to_base64(file)
|
59
|
+
encoded = Base64.strict_encode64(file.read)
|
60
|
+
extension = MimeMagic.by_magic(file).type.to_s
|
61
|
+
[extension, encoded, "data:#{extension};base64,#{encoded}"]
|
62
|
+
end
|
53
63
|
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
return self.file_to_base64(file)
|
58
|
-
end
|
64
|
+
def is_base64?(value)
|
65
|
+
value.is_a?(String) && Base64.strict_encode64(Base64.decode64(value)) == value
|
66
|
+
end
|
59
67
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
[extension, encoded, "data:#{extension};base64,#{encoded}"]
|
64
|
-
end
|
68
|
+
def base64_to_file(string)
|
69
|
+
Base64.strict_decode64(string)
|
70
|
+
end
|
65
71
|
|
66
|
-
|
67
|
-
|
68
|
-
|
72
|
+
def valid_json?(json)
|
73
|
+
JSON.parse(json)
|
74
|
+
true
|
75
|
+
rescue JSON::ParserError => e
|
76
|
+
return false
|
77
|
+
end
|
69
78
|
|
70
|
-
|
71
|
-
|
72
|
-
|
79
|
+
def body_simplifier(body)
|
80
|
+
if body.class == String && (valid_json? body)
|
81
|
+
JSON.parse(body)
|
82
|
+
else
|
83
|
+
body
|
84
|
+
end
|
85
|
+
end
|
73
86
|
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
87
|
+
def check_integer(integer)
|
88
|
+
if integer.is_a? String
|
89
|
+
chars = ('a'..'z').to_a + ('A'..'Z').to_a
|
90
|
+
integer.chars.detect { |ch| chars.include?(ch) }.nil?
|
91
|
+
else
|
92
|
+
return true
|
93
|
+
end
|
94
|
+
end
|
80
95
|
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
end
|
87
|
-
end
|
96
|
+
def check_string(string)
|
97
|
+
string = string.delete(" ")
|
98
|
+
chars = ('a'..'z').to_a + ('A'..'Z').to_a
|
99
|
+
string.chars.detect { |ch| !chars.include?(ch) }.nil?
|
100
|
+
end
|
88
101
|
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
|
96
|
-
|
102
|
+
def url_exist?(url)
|
103
|
+
success = true
|
104
|
+
begin
|
105
|
+
success = false unless Net::HTTP.get_response(URI.parse(url)).is_a?(Net::HTTPSuccess)
|
106
|
+
rescue
|
107
|
+
success = false
|
108
|
+
end
|
109
|
+
success
|
110
|
+
end
|
97
111
|
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
102
|
-
|
112
|
+
def dob_from_nik(nik)
|
113
|
+
now = Time.now.utc.to_date
|
114
|
+
tanggal_lahir = nik[6..7].to_i
|
115
|
+
if tanggal_lahir > 40
|
116
|
+
tanggal_lahir = tanggal_lahir - 40
|
117
|
+
end
|
118
|
+
bulan_lahir = nik[8..9].to_i
|
119
|
+
if bulan_lahir < 10
|
120
|
+
bulan_lahir = "0" + bulan_lahir.to_s
|
121
|
+
end
|
122
|
+
tahun_lahir = nik[10..11].to_i
|
123
|
+
if (tahun_lahir + 2000) > now.year
|
124
|
+
tahun_lahir = "19" + nik[10..11].to_s
|
125
|
+
else
|
126
|
+
tahun_lahir = "20" + nik[10..11].to_s
|
127
|
+
end
|
128
|
+
|
129
|
+
if tanggal_lahir.to_s.length == 1
|
130
|
+
tanggal_lahir = '0' + tanggal_lahir.to_s
|
131
|
+
end
|
132
|
+
|
133
|
+
dob = tahun_lahir.to_s + "-" + bulan_lahir.to_s + "-" + tanggal_lahir.to_s
|
134
|
+
if tahun_lahir.to_i > now.year or bulan_lahir.to_i > 12 or tanggal_lahir.to_i > 31 or tahun_lahir.to_i == 0 or bulan_lahir.to_i == 0 or tanggal_lahir.to_i == 0
|
135
|
+
dob = '1945-08-17'
|
136
|
+
else
|
137
|
+
dob = dob
|
138
|
+
end
|
139
|
+
dob
|
140
|
+
end
|
103
141
|
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
success = false unless Net::HTTP.get_response(URI.parse(url)).is_a?(Net::HTTPSuccess)
|
108
|
-
rescue
|
109
|
-
success = false
|
110
|
-
end
|
111
|
-
success
|
112
|
-
end
|
142
|
+
def gender_from_nik(nik)
|
143
|
+
nik[6..7].to_i < 40 ? "L" : "P"
|
144
|
+
end
|
113
145
|
|
114
|
-
|
115
|
-
|
116
|
-
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
bulan_lahir = "0" + bulan_lahir.to_s
|
123
|
-
end
|
124
|
-
tahun_lahir = nik[10..11].to_i
|
125
|
-
if (tahun_lahir + 2000) > now.year
|
126
|
-
tahun_lahir = "19" + nik[10..11].to_s
|
127
|
-
else
|
128
|
-
tahun_lahir = "20" + nik[10..11].to_s
|
129
|
-
end
|
130
|
-
|
131
|
-
if tanggal_lahir.to_s.length == 1
|
132
|
-
tanggal_lahir = '0' + tanggal_lahir.to_s
|
133
|
-
end
|
134
|
-
|
135
|
-
dob = tahun_lahir.to_s + "-" + bulan_lahir.to_s + "-" + tanggal_lahir.to_s
|
136
|
-
if tahun_lahir.to_i > now.year or bulan_lahir.to_i > 12 or tanggal_lahir.to_i > 31 or tahun_lahir.to_i == 0 or bulan_lahir.to_i == 0 or tanggal_lahir.to_i == 0
|
137
|
-
dob = '1945-08-17'
|
138
|
-
else
|
139
|
-
dob = dob
|
140
|
-
end
|
141
|
-
dob
|
142
|
-
end
|
146
|
+
def currency_formatter(amount, unit: "Rp. ", separator: ".", delimiter: ".", precision: 0)
|
147
|
+
begin
|
148
|
+
amount = amount.to_i
|
149
|
+
rescue
|
150
|
+
amount = 0
|
151
|
+
end
|
152
|
+
ActionController::Base.helpers.number_to_currency(amount, unit: unit, separator: separator, delimiter: delimiter, precision: precision)
|
153
|
+
end
|
143
154
|
|
144
|
-
|
145
|
-
|
146
|
-
|
155
|
+
def name_validator(string)
|
156
|
+
string = string.to_s.delete(" ")
|
157
|
+
chars = ('a'..'z').to_a + ('A'..'Z').to_a
|
158
|
+
string.chars.detect { |ch| !chars.include?(ch) }.nil?
|
159
|
+
end
|
147
160
|
|
148
|
-
|
149
|
-
|
150
|
-
|
151
|
-
rescue
|
152
|
-
amount = 0
|
153
|
-
end
|
154
|
-
ActionController::Base.helpers.number_to_currency(amount, unit: unit, separator: separator, delimiter: delimiter, precision: precision)
|
155
|
-
end
|
161
|
+
def base64_encoded_string(base64)
|
162
|
+
base64.split(",").last.strip
|
163
|
+
end
|
156
164
|
|
157
|
-
|
158
|
-
|
159
|
-
|
160
|
-
string.chars.detect {|ch| !chars.include?(ch)}.nil?
|
161
|
-
end
|
165
|
+
def base64_extension(base64)
|
166
|
+
base64.split(";").first.split(":").last
|
167
|
+
end
|
162
168
|
|
163
|
-
|
164
|
-
|
165
|
-
|
169
|
+
def string_masking(string, length = 9)
|
170
|
+
return "" if string.nil?
|
171
|
+
return string.sub(string[0...length], 'x' * length)
|
172
|
+
end
|
166
173
|
|
167
|
-
|
168
|
-
|
169
|
-
|
174
|
+
def response_simplifier(response)
|
175
|
+
if response.class == String
|
176
|
+
return response_simplifier(JSON.parse(response))
|
177
|
+
end
|
178
|
+
return response if response.class == Hash
|
179
|
+
return response if response.nil?
|
180
|
+
|
181
|
+
if response.class == Net::HTTPInternalServerError || response.class == Net::HTTPCreated || response.class == Net::HTTPBadGateway || response.class == Net::HTTPUnprocessableEntity
|
182
|
+
return response.to_json
|
183
|
+
end
|
184
|
+
|
185
|
+
if valid_json? response
|
186
|
+
simple_response = JSON.parse(response)
|
187
|
+
else
|
188
|
+
simple_response = response
|
189
|
+
end
|
190
|
+
|
191
|
+
if simple_response.class == RestClient::Response
|
192
|
+
simple_response = {
|
193
|
+
:error => response.bytes.pack("c*").force_encoding("UTF-8")
|
194
|
+
}.to_json
|
195
|
+
end
|
196
|
+
|
197
|
+
json_simplifier(simple_response)
|
198
|
+
end
|
170
199
|
|
171
|
-
|
172
|
-
|
173
|
-
|
174
|
-
end
|
200
|
+
def email_valid?(email)
|
201
|
+
email.to_s.match(/^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-]+@[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/).present?
|
202
|
+
end
|
175
203
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
204
|
+
def json_simplifier(json)
|
205
|
+
simplified = {}
|
206
|
+
json.each do |k, value|
|
207
|
+
if value.is_a?(Array)
|
208
|
+
simplified[k] = []
|
209
|
+
value.each_with_index do |array_value, index_array|
|
210
|
+
simplified[k][index_array] = json_simplifier(array_value)
|
211
|
+
end
|
212
|
+
end
|
213
|
+
if value.is_a?(String) && value.include?(';base64,')
|
214
|
+
begin
|
215
|
+
Base64.strict_decode64(value)
|
216
|
+
value = "base64_#{k.to_s}"
|
217
|
+
rescue => _
|
218
|
+
value = 'invalid base64'
|
219
|
+
ensure
|
220
|
+
simplified[k] = value
|
221
|
+
end
|
222
|
+
else
|
223
|
+
simplified[k] = value
|
224
|
+
end
|
225
|
+
end
|
226
|
+
return simplified
|
227
|
+
end
|
200
228
|
end
|
201
|
-
end
|
202
229
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: dcidev_utility
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Punto Damar P
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2022-
|
11
|
+
date: 2022-06-14 00:00:00.000000000 Z
|
12
12
|
dependencies: []
|
13
13
|
description: Testing phase
|
14
14
|
email:
|
@@ -19,10 +19,10 @@ extra_rdoc_files: []
|
|
19
19
|
files:
|
20
20
|
- README.md
|
21
21
|
- lib/dcidev_utility.rb
|
22
|
-
homepage:
|
22
|
+
homepage:
|
23
23
|
licenses: []
|
24
24
|
metadata: {}
|
25
|
-
post_install_message:
|
25
|
+
post_install_message:
|
26
26
|
rdoc_options: []
|
27
27
|
require_paths:
|
28
28
|
- lib
|
@@ -37,8 +37,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
37
37
|
- !ruby/object:Gem::Version
|
38
38
|
version: '0'
|
39
39
|
requirements: []
|
40
|
-
rubygems_version: 3.0.
|
41
|
-
signing_key:
|
40
|
+
rubygems_version: 3.0.3.1
|
41
|
+
signing_key:
|
42
42
|
specification_version: 4
|
43
43
|
summary: Commonly used methods used in DCI
|
44
44
|
test_files: []
|