idp_sdk_ruby 0.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: e53cbb38374b13e3b090c62a5895b739143803bf11105f67bd2b00d27c98dc17
4
+ data.tar.gz: aec175d0454da0f0fe3e4d1c6b01f5aa7b41ab016939e62ba84b6cb687b05aae
5
+ SHA512:
6
+ metadata.gz: dce26e3479f2735fe622008efaf3a3b8ebc0ebc4ddee3667f6868315bb5695066c6687903dffe1bc8e328a98fbc2e6731da739cb13daea805f724f5147fbbcc6
7
+ data.tar.gz: aa7d20e2aff792703d78582f6a44dffc5ff398e5f496b11d0c35c3034f6f44f4c895c2938e82c4669439d8e536f6a4dbe1ae073ad1d13f2dc249ec4710d01c8f
data/CHANGELOG.md ADDED
@@ -0,0 +1,5 @@
1
+ ## [Unreleased]
2
+
3
+ ## [0.1.0] - 2022-06-23
4
+
5
+ - Initial release
data/Gemfile ADDED
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ source "https://rubygems.org"
4
+
5
+ # Specify your gem's dependencies in idp_sdk_ruby.gemspec
6
+ gemspec
7
+
8
+ gem "rake", "~> 13.0"
data/README.md ADDED
@@ -0,0 +1,29 @@
1
+ # IdpSdkRuby
2
+
3
+ Welcome to your new gem! In this directory, you'll find the files you need to be able to package up your Ruby library into a gem. Put your Ruby code in the file `lib/idp_sdk_ruby`. To experiment with that code, run `bin/console` for an interactive prompt.
4
+
5
+ TODO: Delete this and the text above, and describe your gem
6
+
7
+ ## Installation
8
+
9
+ Install the gem and add to the application's Gemfile by executing:
10
+
11
+ $ bundle add idp_sdk_ruby
12
+
13
+ If bundler is not being used to manage dependencies, install the gem by executing:
14
+
15
+ $ gem install idp_sdk_ruby
16
+
17
+ ## Usage
18
+
19
+ TODO: Write usage instructions here
20
+
21
+ ## Development
22
+
23
+ After checking out the repo, run `bin/setup` to install dependencies. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
24
+
25
+ To install this gem onto your local machine, run `bundle exec rake install`. To release a new version, update the version number in `version.rb`, and then run `bundle exec rake release`, which will create a git tag for the version, push git commits and the created tag, and push the `.gem` file to [rubygems.org](https://rubygems.org).
26
+
27
+ ## Contributing
28
+
29
+ Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/idp_sdk_ruby.
data/Rakefile ADDED
@@ -0,0 +1,4 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "bundler/gem_tasks"
4
+ task default: %i[]
Binary file
data/idp_sdk_ruby.rb ADDED
@@ -0,0 +1,218 @@
1
+ #idp-sdk-ruby.rb
2
+ # -*- coding: UTF-8 -*-
3
+
4
+ require 'rest_client'
5
+ require 'json'
6
+
7
+ module idp_sdk_ruby
8
+ class FileType
9
+ def bank_statement
10
+ return 'CBKS'
11
+ end
12
+ def invoice
13
+ return 'CINV'
14
+ end
15
+ def cheque
16
+ return 'CHQ'
17
+ end
18
+ def credit_bureau_singapore
19
+ return 'CBS'
20
+ end
21
+ def receipt
22
+ return 'RCPT'
23
+ end
24
+ def payslip
25
+ return 'PS'
26
+ end
27
+ def packing_list
28
+ return 'PL'
29
+ end
30
+ def bill_of_lading
31
+ return 'BL'
32
+ end
33
+ def air_waybill
34
+ return 'AWBL'
35
+ end
36
+ def kartu_tanda_penduduk
37
+ return 'KTP'
38
+ end
39
+ def hong_kong_annual_return
40
+ return 'HKAR'
41
+ end
42
+ def purchase_order
43
+ return 'PO'
44
+ end
45
+ def delivery_order
46
+ return 'DO'
47
+ end
48
+ def FileType
49
+ return ['CBKS','CINV','CHQ','CBS','RCPT','PS','PL','BL','AWBL','KTP','HKAR','PO','DO']
50
+ end
51
+ end
52
+
53
+ class IDPException < StandardError
54
+ end
55
+
56
+ class IDPConfigurationException < StandardError
57
+ end
58
+
59
+ class Task
60
+ def initialize(json=nil)
61
+ @raw=json
62
+ end
63
+
64
+ def task_id
65
+ return @raw['data']
66
+ end
67
+
68
+ end
69
+
70
+ class TaskResultField
71
+ def initialize(json=nil)
72
+ @raw=json
73
+ end
74
+
75
+ def field_code
76
+ return @raw['field_code']
77
+ end
78
+
79
+ def field_name
80
+ return @raw['field_name']
81
+ end
82
+
83
+ def value
84
+ return @raw['value']
85
+ end
86
+
87
+ def type
88
+ return @raw['type']
89
+ end
90
+ end
91
+
92
+ class TaskResult
93
+ def initialize(json=nil)
94
+ # puts json
95
+ @raw=json
96
+ end
97
+ def status
98
+ # puts @raw['data']['taskStatus']
99
+ return @raw['data']['taskStatus']
100
+ end
101
+ def fields
102
+ fields=Array.new(0)
103
+ for x in @raw['data']['fields']
104
+ fields[fields.length]=TaskResultField.new(x)
105
+ end
106
+ return fields
107
+ end
108
+ end
109
+
110
+ class ExtractionTaskClient
111
+ def initialize(token:nil,region:nil)
112
+ @token=token
113
+ @region=region
114
+ if region === 'test'
115
+ region = ''
116
+ else
117
+ region = '-'+region
118
+ end
119
+ @url_post = "https://idp"+region + \
120
+ ".6estates.com/customer/extraction/fields/async"
121
+ @url_get = "https://idp"+region + \
122
+ ".6estates.com/customer/extraction/field/async/result/"
123
+ end
124
+
125
+ def create(file:nil, file_type:nil, lang:nil,
126
+ customer:nil, customer_param:nil, callback:nil,
127
+ auto_callback:nil, callback_mode:nil, hitl:nil)
128
+ if FileType.new().FileType.count {|x|x==file_type} == 0
129
+ raise IDPException.new("Invalid file type")
130
+ end
131
+ if file.nil?
132
+ raise IDPException.new("File is required")
133
+ end
134
+
135
+ headers = {"X-ACCESS-TOKEN"=> @token}
136
+ # files = {"file": file}
137
+ data = {'fileType'=> file_type, 'lang'=> lang, 'customer'=> customer,
138
+ 'customerParam'=> customer_param, 'callback'=> callback,
139
+ 'autoCallback'=>auto_callback, 'callbackMode'=> callback_mode,
140
+ 'hitl'=> hitl, "file"=>file}
141
+ data=data.delete_if{|key,value|value.nil?}
142
+ # print data
143
+ # puts ""
144
+
145
+ r = JSON.parse(RestClient.post(@url_post, data, headers))
146
+ # puts r
147
+ if r['status']==200
148
+ return Task.new(r)
149
+ end
150
+ raise IDPException.new(r['message'])
151
+ end
152
+
153
+ def result(task_id=nil)
154
+ if task_id.nil?
155
+ raise IDPConfigurationException.new('Task ID is required')
156
+ end
157
+ headers = {"X-ACCESS-TOKEN" => @token}
158
+ r = JSON.parse(RestClient.get(@url_get+task_id.to_s, headers))
159
+ # puts r
160
+ if r['status']==200
161
+ return TaskResult.new(r)
162
+ end
163
+ raise IDPException.new(r['message'])
164
+ end
165
+
166
+ def run_simple_task(file:nil, file_type:nil, poll_interval:3, timeout:600)
167
+ """
168
+ Run simple extraction task
169
+ :param file: Pdf/image file. Only one file is allowed to be uploaded each time
170
+ :type file: file
171
+ :param file_type: The code of the file type (e.g., CBKS). Please see details of File Type Code.
172
+ :type file_type: FileType
173
+ :param poll_interval: Interval to poll the result from api, in seconds
174
+ :type poll_interval: float
175
+ :param timeout: Timeout in seconds
176
+ :type timeout: float
177
+ """
178
+ ct=timeout/poll_interval
179
+ task = create(file:file, file_type:file_type)
180
+ task_result = result(task.task_id)
181
+ while(task_result.status=='Doing' or task_result.status=='Init')
182
+ if (ct-=1) == 0
183
+ raise IDPException.new('Task timeout exceeded: {timeout}')
184
+ end
185
+ sleep(poll_interval)
186
+ task_result = result(task.task_id)
187
+
188
+ if task_result.status == 'Done'
189
+ return task_result
190
+ end
191
+ end
192
+ return task_result
193
+ end
194
+ end
195
+
196
+ class Client
197
+ def initialize(token:nil,region:nil)
198
+ if token.nil?
199
+ raise IDPConfigurationException.new('Token is required')
200
+ end
201
+ if ["test", "sea"].count {|x|x==region} == 0
202
+ raise IDPConfigurationException.new(
203
+ "Region is required and limited in ['test','sea']")
204
+ end
205
+
206
+ @token=token
207
+ @region=region
208
+ @extraction_task=ExtractionTaskClient.new(token:token,region:region)
209
+ end
210
+ def extraction_task
211
+ return @extraction_task
212
+ end
213
+ end
214
+ end
215
+
216
+ # task = c.extraction_task.create(file:File.new("/home/guo/src/idp-python-sdk/[UOB]202103_UOB_2222.pdf","rb"), file_type:FileType.new().bank_statement)
217
+ # puts task.task_id
218
+ # task_result=c.extraction_task.result(task.task_id)
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module IdpSdkRuby
4
+ VERSION = "0.1.0"
5
+ end
@@ -0,0 +1,219 @@
1
+ #idp-sdk-ruby.rb
2
+ # -*- coding: UTF-8 -*-
3
+
4
+ require 'rest_client'
5
+ require 'json'
6
+ require_relative 'idp_sdk_ruby/version'
7
+
8
+ module IdpSdkRuby
9
+ class FileType
10
+ def bank_statement
11
+ return 'CBKS'
12
+ end
13
+ def invoice
14
+ return 'CINV'
15
+ end
16
+ def cheque
17
+ return 'CHQ'
18
+ end
19
+ def credit_bureau_singapore
20
+ return 'CBS'
21
+ end
22
+ def receipt
23
+ return 'RCPT'
24
+ end
25
+ def payslip
26
+ return 'PS'
27
+ end
28
+ def packing_list
29
+ return 'PL'
30
+ end
31
+ def bill_of_lading
32
+ return 'BL'
33
+ end
34
+ def air_waybill
35
+ return 'AWBL'
36
+ end
37
+ def kartu_tanda_penduduk
38
+ return 'KTP'
39
+ end
40
+ def hong_kong_annual_return
41
+ return 'HKAR'
42
+ end
43
+ def purchase_order
44
+ return 'PO'
45
+ end
46
+ def delivery_order
47
+ return 'DO'
48
+ end
49
+ def FileType
50
+ return ['CBKS','CINV','CHQ','CBS','RCPT','PS','PL','BL','AWBL','KTP','HKAR','PO','DO']
51
+ end
52
+ end
53
+
54
+ class IDPException < StandardError
55
+ end
56
+
57
+ class IDPConfigurationException < StandardError
58
+ end
59
+
60
+ class Task
61
+ def initialize(json=nil)
62
+ @raw=json
63
+ end
64
+
65
+ def task_id
66
+ return @raw['data']
67
+ end
68
+
69
+ end
70
+
71
+ class TaskResultField
72
+ def initialize(json=nil)
73
+ @raw=json
74
+ end
75
+
76
+ def field_code
77
+ return @raw['field_code']
78
+ end
79
+
80
+ def field_name
81
+ return @raw['field_name']
82
+ end
83
+
84
+ def value
85
+ return @raw['value']
86
+ end
87
+
88
+ def type
89
+ return @raw['type']
90
+ end
91
+ end
92
+
93
+ class TaskResult
94
+ def initialize(json=nil)
95
+ # puts json
96
+ @raw=json
97
+ end
98
+ def status
99
+ # puts @raw['data']['taskStatus']
100
+ return @raw['data']['taskStatus']
101
+ end
102
+ def fields
103
+ fields=Array.new(0)
104
+ for x in @raw['data']['fields']
105
+ fields[fields.length]=TaskResultField.new(x)
106
+ end
107
+ return fields
108
+ end
109
+ end
110
+
111
+ class ExtractionTaskClient
112
+ def initialize(token:nil,region:nil)
113
+ @token=token
114
+ @region=region
115
+ if region === 'test'
116
+ region = ''
117
+ else
118
+ region = '-'+region
119
+ end
120
+ @url_post = "https://idp"+region + \
121
+ ".6estates.com/customer/extraction/fields/async"
122
+ @url_get = "https://idp"+region + \
123
+ ".6estates.com/customer/extraction/field/async/result/"
124
+ end
125
+
126
+ def create(file:nil, file_type:nil, lang:nil,
127
+ customer:nil, customer_param:nil, callback:nil,
128
+ auto_callback:nil, callback_mode:nil, hitl:nil)
129
+ if FileType.new().FileType.count {|x|x==file_type} == 0
130
+ raise IDPException.new("Invalid file type")
131
+ end
132
+ if file.nil?
133
+ raise IDPException.new("File is required")
134
+ end
135
+
136
+ headers = {"X-ACCESS-TOKEN"=> @token}
137
+ # files = {"file": file}
138
+ data = {'fileType'=> file_type, 'lang'=> lang, 'customer'=> customer,
139
+ 'customerParam'=> customer_param, 'callback'=> callback,
140
+ 'autoCallback'=>auto_callback, 'callbackMode'=> callback_mode,
141
+ 'hitl'=> hitl, "file"=>file}
142
+ data=data.delete_if{|key,value|value.nil?}
143
+ # print data
144
+ # puts ""
145
+
146
+ r = JSON.parse(RestClient.post(@url_post, data, headers))
147
+ # puts r
148
+ if r['status']==200
149
+ return Task.new(r)
150
+ end
151
+ raise IDPException.new(r['message'])
152
+ end
153
+
154
+ def result(task_id=nil)
155
+ if task_id.nil?
156
+ raise IDPConfigurationException.new('Task ID is required')
157
+ end
158
+ headers = {"X-ACCESS-TOKEN" => @token}
159
+ r = JSON.parse(RestClient.get(@url_get+task_id.to_s, headers))
160
+ # puts r
161
+ if r['status']==200
162
+ return TaskResult.new(r)
163
+ end
164
+ raise IDPException.new(r['message'])
165
+ end
166
+
167
+ def run_simple_task(file:nil, file_type:nil, poll_interval:3, timeout:600)
168
+ """
169
+ Run simple extraction task
170
+ :param file: Pdf/image file. Only one file is allowed to be uploaded each time
171
+ :type file: file
172
+ :param file_type: The code of the file type (e.g., CBKS). Please see details of File Type Code.
173
+ :type file_type: FileType
174
+ :param poll_interval: Interval to poll the result from api, in seconds
175
+ :type poll_interval: float
176
+ :param timeout: Timeout in seconds
177
+ :type timeout: float
178
+ """
179
+ ct=timeout/poll_interval
180
+ task = create(file:file, file_type:file_type)
181
+ task_result = result(task.task_id)
182
+ while(task_result.status=='Doing' or task_result.status=='Init')
183
+ if (ct-=1) == 0
184
+ raise IDPException.new('Task timeout exceeded: {timeout}')
185
+ end
186
+ sleep(poll_interval)
187
+ task_result = result(task.task_id)
188
+
189
+ if task_result.status == 'Done'
190
+ return task_result
191
+ end
192
+ end
193
+ return task_result
194
+ end
195
+ end
196
+
197
+ class Client
198
+ def initialize(token:nil,region:nil)
199
+ if token.nil?
200
+ raise IDPConfigurationException.new('Token is required')
201
+ end
202
+ if ["test", "sea"].count {|x|x==region} == 0
203
+ raise IDPConfigurationException.new(
204
+ "Region is required and limited in ['test','sea']")
205
+ end
206
+
207
+ @token=token
208
+ @region=region
209
+ @extraction_task=ExtractionTaskClient.new(token:token,region:region)
210
+ end
211
+ def extraction_task
212
+ return @extraction_task
213
+ end
214
+ end
215
+ end
216
+
217
+ # task = c.extraction_task.create(file:File.new("/home/guo/src/idp-python-sdk/[UOB]202103_UOB_2222.pdf","rb"), file_type:FileType.new().bank_statement)
218
+ # puts task.task_id
219
+ # task_result=c.extraction_task.result(task.task_id)
@@ -0,0 +1,4 @@
1
+ module IdpSdkRuby
2
+ VERSION: String
3
+ # See the writing guide of rbs: https://github.com/ruby/rbs#guides
4
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: idp_sdk_ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - sihan
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2022-06-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: rest-client
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '2.1'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '2.1'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '2.6'
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '2.6'
41
+ description: idp_sdk_ruby
42
+ email:
43
+ - sihan.6estates@gmail.com
44
+ executables: []
45
+ extensions: []
46
+ extra_rdoc_files: []
47
+ files:
48
+ - CHANGELOG.md
49
+ - Gemfile
50
+ - README.md
51
+ - Rakefile
52
+ - "[UOB]202103_UOB_2222.pdf"
53
+ - idp_sdk_ruby.rb
54
+ - lib/idp_sdk_ruby.rb
55
+ - lib/idp_sdk_ruby/version.rb
56
+ - sig/idp_sdk_ruby.rbs
57
+ homepage: https://rubygems.org/gems/idp_sdk_ruby
58
+ licenses: []
59
+ metadata:
60
+ homepage_uri: https://rubygems.org/gems/idp_sdk_ruby
61
+ post_install_message:
62
+ rdoc_options: []
63
+ require_paths:
64
+ - lib
65
+ required_ruby_version: !ruby/object:Gem::Requirement
66
+ requirements:
67
+ - - ">="
68
+ - !ruby/object:Gem::Version
69
+ version: 2.6.0
70
+ required_rubygems_version: !ruby/object:Gem::Requirement
71
+ requirements:
72
+ - - ">="
73
+ - !ruby/object:Gem::Version
74
+ version: '0'
75
+ requirements: []
76
+ rubygems_version: 3.3.5
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: idp_sdk_ruby
80
+ test_files: []