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 +7 -0
- data/CHANGELOG.md +5 -0
- data/Gemfile +8 -0
- data/README.md +29 -0
- data/Rakefile +4 -0
- data/[UOB]202103_UOB_2222.pdf +0 -0
- data/idp_sdk_ruby.rb +218 -0
- data/lib/idp_sdk_ruby/version.rb +5 -0
- data/lib/idp_sdk_ruby.rb +219 -0
- data/sig/idp_sdk_ruby.rbs +4 -0
- metadata +80 -0
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
data/Gemfile
ADDED
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
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)
|
data/lib/idp_sdk_ruby.rb
ADDED
@@ -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)
|
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: []
|