omni_parse_client_ruby 1.3.1

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: d4e6021e30306fb1f32578de382bac72ed381c4469e4607262dc9771fce78ff5
4
+ data.tar.gz: 48ec8a6616d12dfcebb97f640aee54243c484c51ab7217c1ed0e191e2bc6c836
5
+ SHA512:
6
+ metadata.gz: 4da5ce3973fdbdc97da0d0179ea2047ea424e802cc2df3ea3337f85d11c586edab768ae3a14de3dac5d34f4495a9749c6c54827fb3499826ee241cee34671dcd
7
+ data.tar.gz: 2822ad0d8bc94b621d2b92d56d4c1d3888233cf9eec40ba2cd38b5390b69bacf7f978a1b4289cac96f9ff91c01d0d32475c01557a8bb8801794e965bc459b3e9
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OmniparseClient
4
+ # Main Class for the library
5
+ # here all modules are beeing included into class
6
+ class Base
7
+ attr_reader :html, :vcf, :fixture
8
+
9
+ include Connection
10
+
11
+ def initialize(p = {})
12
+ setup_connection(p)
13
+ @html = Parsers::HtmlParser.new(p)
14
+ @vcf = Parsers::VcfParser.new(p)
15
+ @fixture = Parsers::OmniFixture.new(p)
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,140 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'net/http'
4
+
5
+ module OmniparseClient
6
+ # Connection module
7
+ module Connection
8
+ class RetriesLimitReached < StandardError; end
9
+
10
+ attr_reader :api_key, :port, :version, :host
11
+
12
+ DEFAULT_URL = 'www.omniparse.com'
13
+ DEFAULT_PORT = 443
14
+ DEFAULT_VERSION = '/api/v1'
15
+ # Retries count if network error occurs
16
+ MAX_RETRIES_COUNT = ENV['OMNI_MAX_RETRIES_COUNT']&.to_i || 5
17
+ # Time in seconds for consequent delays for reconnection
18
+ RETRIES_DELAYS_ARRAY =
19
+ ENV['OMNI_RETRIES_DELAYS_ARRAY']&.split(',')&.map(&:to_i) ||
20
+ [5, 30, 2 * 60, 10 * 60, 30 * 60].freeze
21
+ EXCEPTIONS_INCLUDING_MESSAGES = [
22
+ SocketError,
23
+ Net::OpenTimeout
24
+ ].freeze
25
+ EXCEPTIONS_EXCLUDING_MESSAGES = [
26
+ Net::HTTPFatalError
27
+ ].freeze
28
+ CLIENT_ERRORS = [
29
+ Net::HTTPInternalServerError,
30
+ Net::HTTPNotImplemented,
31
+ Net::HTTPBadGateway,
32
+ Net::HTTPServiceUnavailable,
33
+ Net::HTTPGatewayTimeout,
34
+ Net::HTTPInsufficientStorage,
35
+ Net::HTTPLoopDetected,
36
+ Net::HTTPRequestTimeout,
37
+ Net::HTTPBadRequest,
38
+ Net::HTTPNotFound
39
+ ].freeze
40
+
41
+ # constructor
42
+ def setup_connection(p = {})
43
+ @host = p[:host] || DEFAULT_URL
44
+ @port = p[:port] || DEFAULT_PORT
45
+ @version = p[:version] || DEFAULT_VERSION
46
+ @api_key = p[:api_key]
47
+ end
48
+
49
+ def omni_get(request_url, params = {}, headers = {})
50
+ uri = URI(request_url)
51
+ uri.port = port
52
+ uri.query = URI.encode_www_form(params)
53
+ req = Net::HTTP::Get.new(uri)
54
+ headers.each do |header, val|
55
+ req[header] = val
56
+ end
57
+
58
+ make_request(req)
59
+ end
60
+
61
+ def omni_post(request_url, params = {}, headers = {})
62
+ uri = URI(request_url)
63
+ uri.port = port
64
+ req = Net::HTTP::Post.new(uri)
65
+ req.set_form_data(params)
66
+ headers.each do |header, val|
67
+ req[header] = val
68
+ end
69
+
70
+ make_request(req)
71
+ end
72
+
73
+ # headers
74
+ def headers
75
+ {
76
+ 'Authorization' => "Bearer #{@api_key}"
77
+ }
78
+ end
79
+
80
+ def base_url
81
+ # request = "localhost:3001//api/v1/html_parser/parse"
82
+ components = { host: host, port: port }
83
+ URI::HTTPS.build(components).to_s
84
+ end
85
+
86
+ # TEST connection
87
+ def test_connection
88
+ request_url = base_url + test_connection_path
89
+ response = omni_get(request_url, {}, headers)
90
+ response
91
+ end
92
+
93
+ # Paths
94
+ def test_connection_path
95
+ "/#{version}/test_connection"
96
+ end
97
+
98
+ private
99
+
100
+ def retry_on_server_error(&block)
101
+ @retry_index = 0
102
+ begin
103
+ yield block
104
+ rescue *EXCEPTIONS_INCLUDING_MESSAGES => e
105
+ raise RetriesLimitReached, e.message if retries_limit_reached?
106
+
107
+ sleep(RETRIES_DELAYS_ARRAY[@retry_index])
108
+ @retry_index += 1
109
+ retry
110
+ rescue *EXCEPTIONS_EXCLUDING_MESSAGES => e
111
+ if retries_limit_reached?
112
+ message = "#{e&.data&.code} #{e&.data&.code_type}"
113
+ raise RetriesLimitReached, message
114
+ end
115
+
116
+ sleep(RETRIES_DELAYS_ARRAY[@retry_index])
117
+ @retry_index += 1
118
+ retry
119
+ rescue Net::HTTPClientException => e
120
+ raise Net::HTTPClientException.new(e.message.tr('"', ''), e.response)
121
+ end
122
+ end
123
+
124
+ def make_request(request)
125
+ retry_on_server_error do
126
+ uri = request.uri
127
+ res = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
128
+ http.request(request)
129
+ end
130
+ res.error! if !res.is_a?(Net::HTTPSuccess) && CLIENT_ERRORS.include?(res.code_type)
131
+
132
+ res
133
+ end
134
+ end
135
+
136
+ def retries_limit_reached?
137
+ @retry_index >= MAX_RETRIES_COUNT
138
+ end
139
+ end
140
+ end
@@ -0,0 +1,8 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OmniparseClient
4
+ # Log responses and requests methods
5
+ module Loggable
6
+ attr_accessor :last_request, :last_response
7
+ end
8
+ end
@@ -0,0 +1,90 @@
1
+ # frozen_string_literal: true
2
+
3
+ module OmniparseClient
4
+ module Parsers
5
+ # PARSER
6
+ # @omni = Omni::Client.new(url: 'www.example.com',
7
+ # version: 'v1',
8
+ # api_key: 'token')
9
+ # @omni_html = @omni.html
10
+ class HtmlParser
11
+ attr_reader :html, :omni_parser_id
12
+
13
+ include Connection
14
+ include Loggable
15
+
16
+ def initialize(p = {})
17
+ setup_connection(p)
18
+ end
19
+
20
+ # fetching all parsers
21
+ # @omni_html.all(parser_id)
22
+ def all
23
+ self.last_request = base_url + index_path
24
+ response = omni_get(last_request, {}, headers)
25
+ self.last_response = Response.new(response)
26
+ last_response
27
+ end
28
+
29
+ # preparing / building html params
30
+ # @omni_html.prepare(parser_id, html)
31
+ def prepare(p = {})
32
+ @html = p[:html]
33
+ @omni_parser_id = p[:omni_parser_id]
34
+ true
35
+ end
36
+
37
+ # Post parse run
38
+ # @omni_html.parse(parser_id, html)
39
+ def parse(p = {})
40
+ return false unless p[:html]
41
+ return false unless p[:omni_parser_id]
42
+
43
+ prepare(p)
44
+
45
+ self.last_request = base_url + parse_path
46
+ response = omni_post(last_request,
47
+ params,
48
+ headers)
49
+ self.last_response = Response.new(response)
50
+ last_response
51
+ end
52
+
53
+ # Post trial run
54
+ # @omni_html.parse(parser_id, html)
55
+ def trial_run(p = {})
56
+ return false unless p[:omni_parser_id]
57
+
58
+ prepare(p)
59
+
60
+ self.last_request = base_url + trial_run_path
61
+ response = omni_post(last_request,
62
+ params,
63
+ headers)
64
+ self.last_response = Response.new(response)
65
+ last_response
66
+ end
67
+
68
+ # parsing params
69
+ def params
70
+ {
71
+ omni_parser_id: @omni_parser_id,
72
+ html: @html
73
+ }
74
+ end
75
+
76
+ # Paths
77
+ def parse_path
78
+ "/#{version}/html_parser/parse"
79
+ end
80
+
81
+ def trial_run_path
82
+ "/#{version}/html_parser/trial_run"
83
+ end
84
+
85
+ def index_path
86
+ "/#{version}/html_parsers"
87
+ end
88
+ end
89
+ end
90
+ end
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rubygems'
4
+ require_relative 'omni_parse_client_ruby/loggable'
5
+ require_relative 'omni_parse_client_ruby/connection'
6
+ require_relative 'omni_parse_client_ruby/base'
7
+ require_relative 'omni_parse_client_ruby/response'
8
+ require_relative 'omni_parse_client_ruby/parsers/html_parser'
9
+ require_relative 'omni_parse_client_ruby/parsers/vcf_parser'
10
+ require_relative 'omni_parse_client_ruby/parsers/omni_fixture'
11
+
12
+ # Wrapper class
13
+ # Example:
14
+ # @omi = Omni::Client.new(url: 'www.example.com',
15
+ # version: 'v1',
16
+ # api_key: 'token')
17
+ module Omni
18
+ class Client < OmniparseClient::Base; end
19
+ end
metadata ADDED
@@ -0,0 +1,91 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: omni_parse_client_ruby
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.3.1
5
+ platform: ruby
6
+ authors:
7
+ - Brian Long
8
+ - Michał Marzec
9
+ - Paweł Jermalonek
10
+ autorequire:
11
+ bindir: bin
12
+ cert_chain: []
13
+ date: 2023-09-28 00:00:00.000000000 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: net-http
17
+ requirement: !ruby/object:Gem::Requirement
18
+ requirements:
19
+ - - "~>"
20
+ - !ruby/object:Gem::Version
21
+ version: 0.4.1
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ requirements:
26
+ - - "~>"
27
+ - !ruby/object:Gem::Version
28
+ version: 0.4.1
29
+ - !ruby/object:Gem::Dependency
30
+ name: minitest-stub-const
31
+ requirement: !ruby/object:Gem::Requirement
32
+ requirements:
33
+ - - "~>"
34
+ - !ruby/object:Gem::Version
35
+ version: '0.6'
36
+ type: :development
37
+ prerelease: false
38
+ version_requirements: !ruby/object:Gem::Requirement
39
+ requirements:
40
+ - - "~>"
41
+ - !ruby/object:Gem::Version
42
+ version: '0.6'
43
+ - !ruby/object:Gem::Dependency
44
+ name: webmock
45
+ requirement: !ruby/object:Gem::Requirement
46
+ requirements:
47
+ - - "~>"
48
+ - !ruby/object:Gem::Version
49
+ version: '3.24'
50
+ type: :development
51
+ prerelease: false
52
+ version_requirements: !ruby/object:Gem::Requirement
53
+ requirements:
54
+ - - "~>"
55
+ - !ruby/object:Gem::Version
56
+ version: '3.24'
57
+ description: Client for omniparse API
58
+ email: brian.long@firstmoversadvantage.com
59
+ executables: []
60
+ extensions: []
61
+ extra_rdoc_files: []
62
+ files:
63
+ - lib/omni_parse_client_ruby.rb
64
+ - lib/omni_parse_client_ruby/base.rb
65
+ - lib/omni_parse_client_ruby/connection.rb
66
+ - lib/omni_parse_client_ruby/loggable.rb
67
+ - lib/omni_parse_client_ruby/parsers/html_parser.rb
68
+ homepage: https://www.fmadata.com/
69
+ licenses:
70
+ - MIT
71
+ metadata: {}
72
+ post_install_message:
73
+ rdoc_options: []
74
+ require_paths:
75
+ - lib
76
+ required_ruby_version: !ruby/object:Gem::Requirement
77
+ requirements:
78
+ - - ">="
79
+ - !ruby/object:Gem::Version
80
+ version: '0'
81
+ required_rubygems_version: !ruby/object:Gem::Requirement
82
+ requirements:
83
+ - - ">="
84
+ - !ruby/object:Gem::Version
85
+ version: '0'
86
+ requirements: []
87
+ rubygems_version: 3.1.6
88
+ signing_key:
89
+ specification_version: 4
90
+ summary: Client for omniparse API
91
+ test_files: []