firmenwissen 1.1.0 → 1.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 4b79d5acc8cdbc3936a046219302466d3fb782668787787dae2116f39c9bfa0c
4
- data.tar.gz: 01d7fcf4001c1a13308819d248ec8752a746f9451d0fbbdc025e742ee0233aa7
3
+ metadata.gz: 42e291ddf7bad7c2089c96877b831d5ab022482cd002018ded618e3a82be2f5a
4
+ data.tar.gz: 3448ce23abb5250d597f99c8fba7617ab98b7a2c51ca28df0b5f1778f239a4d7
5
5
  SHA512:
6
- metadata.gz: 9a9075c20026a58be30af77fd1df06596eff00a60970ea83d060ecfa73ef938c0a7d0e165785ab6ded7e99f894494936770a8bbfe833325469ce2a2e4c33697b
7
- data.tar.gz: af6eee45a08cd89d9f5cd3b085977bd6eeabb150e87d4e36a2a1ac01a98285530758cbbdfdb107855e9ed2b407a33d36802ced4701f82caa9c433d860c5efa90
6
+ metadata.gz: 9ba9040ccff5e27f74c7329e32e1e40e0fb4ef7a394ceb9afca0db95f91928928ef1d7839ebecbc51d7a40c4cec1187e97d1ad8a4a8bfd6a49134e07e1593067
7
+ data.tar.gz: 58478133681a39f6c479a981463351e88a019d197b5989ed89d55b9ad20364a7ed450cdda012d56a70ada0e845ce8ae7d4851f3cad96c0721ca9fe6c037c401c
data/README.md CHANGED
@@ -45,9 +45,10 @@ suggestion.address # => 'Louise-Dumon-Straße 5'
45
45
 
46
46
  suggestion.to_h # => { crefo_id: '1234567890', name: 'COMPEON GmbH', ... }
47
47
  ```
48
- ### Configuration
48
+ ### Basic Auth Configuration
49
49
  ```ruby
50
50
  Firmenwissen.configure do |config|
51
+ config.authentication_strategy = 'basic' # This is set to 'basic' by default, eliminating the need for explicit configuration.
51
52
  config.user = 'username' # Username for Firmenwissen basic auth (required)
52
53
  config.password = 'password' # Password for Firmenwissen basic auth (required)
53
54
  config.timeout = 5 # Request timeout in seconds
@@ -57,6 +58,19 @@ Firmenwissen.configure do |config|
57
58
  config.endpoint = 'https://example.com/search?query={query}'
58
59
  end
59
60
  ```
61
+ ### Api Key Configuration
62
+ ```ruby
63
+ Firmenwissen.configure do |config|
64
+ config.authentication_strategy = 'api_key' # Mandatory for all options except 'basic' (required)
65
+ config.api_key = 'your api key' # API Key for Firmenwissen API Key authentication (required)
66
+ config.timeout = 5 # Request timeout in seconds
67
+ config.persistent_session = false # Whether to store/use session information for subsequent requests
68
+
69
+ # Configure the endpoint yourself. %s will be replaced by the actual query
70
+ config.endpoint = 'https://example.com/search?query={query}'
71
+ end
72
+ ```
73
+
60
74
  ### Mocking results
61
75
  In a non production-like environment you will not want to perform real requests to the API. Thus you can configure the gem to respond with mocked data.
62
76
 
@@ -10,14 +10,15 @@ module Firmenwissen
10
10
  end
11
11
  end
12
12
 
13
- SETTINGS = %i[endpoint password mock_data mock_requests persistent_session timeout user]
13
+ SETTINGS = %i[endpoint password mock_data mock_requests persistent_session timeout user authentication_strategy api_key]
14
14
 
15
15
  DEFAULT_SETTINGS = {
16
16
  endpoint: 'https://www.firmenwissen.de/search/suggest/companywithaddress/{query}{?country}',
17
17
  mock_requests: false,
18
18
  mock_data: [],
19
19
  persistent_session: false,
20
- timeout: 5
20
+ timeout: 5,
21
+ authentication_strategy: "basic"
21
22
  }.freeze
22
23
 
23
24
  SETTINGS.each do |setting|
@@ -51,5 +52,9 @@ module Firmenwissen
51
52
  def persistent_session?
52
53
  persistent_session
53
54
  end
55
+
56
+ def api_key_present?
57
+ api_key.is_a?(String) && !api_key.empty?
58
+ end
54
59
  end
55
60
  end
@@ -0,0 +1,7 @@
1
+ module Firmenwissen
2
+ class ApiKeyError < StandardError
3
+ def initialize(message = 'Firmenwissen API Key is missing')
4
+ super
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ module Firmenwissen
2
+ class AuthenticationStrategyError < StandardError
3
+ def initialize(message = 'Invalid authentication strategy')
4
+ super
5
+ end
6
+ end
7
+ end
@@ -21,7 +21,8 @@ module Firmenwissen
21
21
  def request
22
22
  @request ||= begin
23
23
  Net::HTTP::Get.new(uri).tap do |req|
24
- req.basic_auth(config.user, config.password)
24
+ req.basic_auth(config.user, config.password) if config.authentication_strategy == "basic"
25
+ req.add_field('API-KEY', config.api_key) if config.authentication_strategy == "api_key"
25
26
  req.add_field('Cookie', session_cookie) if config.persistent_session? && !session_cookie.empty?
26
27
  end
27
28
  end
@@ -6,7 +6,14 @@ module Firmenwissen
6
6
  @options = options
7
7
  @params = options.fetch(:params, {})
8
8
 
9
- raise CredentialsError unless config.credentials_present?
9
+ case config.authentication_strategy
10
+ when "basic"
11
+ raise CredentialsError unless config.credentials_present?
12
+ when "api_key"
13
+ raise ApiKeyError unless config.api_key_present?
14
+ else
15
+ raise AuthenticationStrategyError
16
+ end
10
17
  end
11
18
 
12
19
  def execute
@@ -1,3 +1,5 @@
1
+ require 'delegate'
2
+
1
3
  class URIDecorator < SimpleDelegator
2
4
  def port
3
5
  inferred_port
@@ -1,3 +1,3 @@
1
1
  module Firmenwissen
2
- VERSION = '1.1.0'
2
+ VERSION = '1.2.1'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: firmenwissen
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.0
4
+ version: 1.2.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gerrit Seger
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-05-27 00:00:00.000000000 Z
11
+ date: 2024-01-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: addressable
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rexml
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rspec
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -94,7 +108,7 @@ dependencies:
94
108
  - - ">="
95
109
  - !ruby/object:Gem::Version
96
110
  version: '0'
97
- description:
111
+ description:
98
112
  email:
99
113
  - gerrit.seger@gmail.com
100
114
  executables: []
@@ -106,6 +120,8 @@ files:
106
120
  - Rakefile
107
121
  - lib/firmenwissen.rb
108
122
  - lib/firmenwissen/configuration.rb
123
+ - lib/firmenwissen/errors/api_key_error.rb
124
+ - lib/firmenwissen/errors/authentication_strategy_error.rb
109
125
  - lib/firmenwissen/errors/credentials_error.rb
110
126
  - lib/firmenwissen/errors/unprocessable_response_error.rb
111
127
  - lib/firmenwissen/http_request.rb
@@ -119,11 +135,11 @@ files:
119
135
  - lib/firmenwissen/suggestion.rb
120
136
  - lib/firmenwissen/uri_decorator.rb
121
137
  - lib/firmenwissen/version.rb
122
- homepage:
138
+ homepage:
123
139
  licenses:
124
140
  - MIT
125
141
  metadata: {}
126
- post_install_message:
142
+ post_install_message:
127
143
  rdoc_options: []
128
144
  require_paths:
129
145
  - lib
@@ -138,8 +154,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
138
154
  - !ruby/object:Gem::Version
139
155
  version: '0'
140
156
  requirements: []
141
- rubygems_version: 3.0.3
142
- signing_key:
157
+ rubygems_version: 3.1.4
158
+ signing_key:
143
159
  specification_version: 4
144
160
  summary: Ruby client for the FirmenWissen API
145
161
  test_files: []