Skip to content

Commit 4ac4428

Browse files
authored
Merge pull request #1 from microsoft/feature/user-agent
- adds a user agent handler
2 parents 7508876 + 97598af commit 4ac4428

File tree

7 files changed

+100
-2
lines changed

7 files changed

+100
-2
lines changed

Diff for: CHANGELOG.md

+6
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,12 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
1111

1212
### Changed
1313

14+
## [0.10.0] - 2023-01-06
15+
16+
### Added
17+
18+
- Added a user agent handler to add the product to the request header.
19+
1420
## [0.9.0] - 2022-12-30
1521

1622
### Added

Diff for: lib/microsoft_kiota_faraday.rb

+2
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,8 @@
44
require_relative 'microsoft_kiota_faraday/middleware/response_handler_option'
55
require_relative 'microsoft_kiota_faraday/middleware/parameters_name_decoding_option'
66
require_relative 'microsoft_kiota_faraday/middleware/parameters_name_decoding_handler'
7+
require_relative 'microsoft_kiota_faraday/middleware/user_agent_option'
8+
require_relative 'microsoft_kiota_faraday/middleware/user_agent_handler'
79
require_relative 'microsoft_kiota_faraday/kiota_client_factory'
810
require_relative 'microsoft_kiota_faraday/faraday_request_adapter'
911

Diff for: lib/microsoft_kiota_faraday/kiota_client_factory.rb

+3-1
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,13 @@
11
require 'net/https'
22
require 'faraday'
33
require_relative 'middleware/parameters_name_decoding_handler'
4+
require_relative 'middleware/user_agent_handler'
45
module MicrosoftKiotaFaraday
56
class KiotaClientFactory
67
def self.get_default_middleware()
78
return [
8-
MicrosoftKiotaFaraday::Middleware::ParametersNameDecodingHandler
9+
MicrosoftKiotaFaraday::Middleware::ParametersNameDecodingHandler,
10+
MicrosoftKiotaFaraday::Middleware::UserAgentHandler
911
]
1012
end
1113

Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
require 'faraday'
2+
require_relative 'user_agent_option'
3+
module MicrosoftKiotaFaraday
4+
module Middleware
5+
class UserAgentHandler < Faraday::Middleware
6+
@@default_option = UserAgentOption.new
7+
@@user_agent_key = "User-Agent"
8+
def call(request_env)
9+
request_option = request_env[:request][:context][@@default_option.get_key] unless request_env[:request].nil? || request_env[:request][:context].nil?
10+
request_option = @@default_option if request_option.nil?
11+
unless request_env[:request_headers].nil? || !request_option.enabled || request_option.product_name.nil? || request_option.product_name.empty? || request_option.product_version.nil? || request_option.product_version.empty? then
12+
existing_value = request_env[:request_headers][@@user_agent_key]
13+
additional_value = "#{request_option.product_name}/#{request_option.product_version}"
14+
if !existing_value || existing_value.empty? then
15+
request_env[:request_headers][@@user_agent_key] = additional_value
16+
elsif !existing_value.include? additional_value then
17+
request_env[:request_headers][@@user_agent_key] = "#{existing_value} #{additional_value}"
18+
end
19+
end
20+
@app.call(request_env) unless @app.nil?
21+
end
22+
end
23+
end
24+
end
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,20 @@
1+
# frozen_string_literal: true
2+
require 'microsoft_kiota_abstractions'
3+
require_relative '../version.rb'
4+
module MicrosoftKiotaFaraday
5+
module Middleware
6+
class UserAgentOption
7+
include MicrosoftKiotaAbstractions::RequestOption
8+
attr_accessor :enabled, :product_name, :product_version
9+
def initialize()
10+
@enabled = true
11+
@product_name = "kiota-ruby"
12+
@product_version = MicrosoftKiotaFaraday::VERSION
13+
end
14+
15+
def get_key()
16+
"userAgent"
17+
end
18+
end
19+
end
20+
end

Diff for: lib/microsoft_kiota_faraday/version.rb

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
# frozen_string_literal: true
22

33
module MicrosoftKiotaFaraday
4-
VERSION = '0.9.0'
4+
VERSION = '0.10.0'
55
end

Diff for: spec/user_agent_handler_spec.rb

+44
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,44 @@
1+
require 'faraday'
2+
3+
# frozen_string_literal: true
4+
RSpec.describe MicrosoftKiotaFaraday do
5+
user_agent_key = "User-Agent"
6+
url = "https://graph.microsoft.com/v1.0/users"
7+
it "adds the user agent product" do
8+
handler = MicrosoftKiotaFaraday::Middleware::UserAgentHandler.new()
9+
env = {
10+
url: URI.parse(url),
11+
request_headers: {}
12+
}
13+
handler.call(env)
14+
expect(env[:request_headers][user_agent_key].split("/")[0]).to eq("kiota-ruby")
15+
end
16+
17+
it "adds the user agent product once" do
18+
handler = MicrosoftKiotaFaraday::Middleware::UserAgentHandler.new()
19+
env = {
20+
url: URI.parse(url),
21+
request_headers: {}
22+
}
23+
handler.call(env)
24+
handler.call(env)
25+
expect(env[:request_headers][user_agent_key].split("kiota-ruby").length).to eq(2)
26+
end
27+
it "doesnt add the header when disabled" do
28+
handler = MicrosoftKiotaFaraday::Middleware::UserAgentHandler.new()
29+
opt = MicrosoftKiotaFaraday::Middleware::UserAgentOption.new()
30+
opt.enabled = false
31+
env = {
32+
url: URI.parse(url),
33+
request_headers: {},
34+
request: {
35+
context: {
36+
opt.get_key => opt
37+
}
38+
}
39+
}
40+
handler.call(env)
41+
handler.call(env)
42+
expect(env[:request_headers][user_agent_key]).to be_nil
43+
end
44+
end

0 commit comments

Comments
 (0)