Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 9 additions & 9 deletions lib/wreq.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,7 @@ module Wreq
#
# @param method [Wreq::Method] HTTP method to use
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -55,7 +55,7 @@ def self.request(method, url, **options)
# Send an HTTP GET request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -86,7 +86,7 @@ def self.get(url, **options)
# Send an HTTP HEAD request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -117,7 +117,7 @@ def self.head(url, **options)
# Send an HTTP POST request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -148,7 +148,7 @@ def self.post(url, **options)
# Send an HTTP PUT request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -179,7 +179,7 @@ def self.put(url, **options)
# Send an HTTP DELETE request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -210,7 +210,7 @@ def self.delete(url, **options)
# Send an HTTP OPTIONS request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -241,7 +241,7 @@ def self.options(url, **options)
# Send an HTTP TRACE request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -272,7 +272,7 @@ def self.trace(url, **options)
# Send an HTTP PATCH request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down
20 changes: 10 additions & 10 deletions lib/wreq_ruby/client.rb
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@ class Client
# @param user_agent [String, nil] Custom User-Agent header value.
# If not specified, a default user agent will be used.
#
# @param headers [Hash{String=>String}, nil] Default headers to include
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Default headers to include
# in every request. Header names are case-insensitive. These headers
# can be overridden on a per-request basis.
#
Expand Down Expand Up @@ -236,7 +236,7 @@ def self.new(**options)
#
# @param method [Wreq::Method] HTTP method to use
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -267,7 +267,7 @@ def request(method, url, **options)
# Send an HTTP GET request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -298,7 +298,7 @@ def get(url, **options)
# Send an HTTP HEAD request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -329,7 +329,7 @@ def head(url, **options)
# Send an HTTP POST request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -360,7 +360,7 @@ def post(url, **options)
# Send an HTTP PUT request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -391,7 +391,7 @@ def put(url, **options)
# Send an HTTP DELETE request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -422,7 +422,7 @@ def delete(url, **options)
# Send an HTTP OPTIONS request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -453,7 +453,7 @@ def options(url, **options)
# Send an HTTP TRACE request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down Expand Up @@ -484,7 +484,7 @@ def trace(url, **options)
# Send an HTTP PATCH request.
#
# @param url [String] Target URL
# @param headers [Hash{String=>String}, nil] Custom headers for this request
# @param headers [Wreq::Headers, Hash{String=>String}, nil] Custom headers for this request
# @param orig_headers [Hash{String=>String}, nil] Original headers (raw, unmodified)
# @param default_headers [Hash{String=>String}, nil] Default headers to merge
# @param query [Hash, nil] URL query parameters
Expand Down
60 changes: 32 additions & 28 deletions src/client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ use magnus::{
use serde::Deserialize;
use wreq::{
Proxy,
header::{HeaderMap, HeaderValue, OrigHeaderMap},
header::{HeaderValue, OrigHeaderMap},
};

use crate::{
Expand All @@ -22,6 +22,7 @@ use crate::{
error::wreq_error_to_magnus,
extractor::Extractor,
gvl,
header::Headers,
http::Method,
};

Expand All @@ -36,7 +37,7 @@ struct Builder {
user_agent: Option<HeaderValue>,
/// The headers to use for the client.
#[serde(skip)]
headers: Option<HeaderMap>,
headers: Option<Headers>,
/// The original headers to use for the client.
#[serde(skip)]
orig_headers: Option<OrigHeaderMap>,
Expand Down Expand Up @@ -128,45 +129,43 @@ pub struct Client(wreq::Client);
impl Builder {
/// Create a new [`Builder`] from Ruby keyword arguments.
fn new(ruby: &magnus::Ruby, keyword: &Value) -> Result<Self, magnus::Error> {
if let Ok(hash) = RHash::try_convert(*keyword) {
let mut builder: Self = serde_magnus::deserialize(ruby, hash)?;
// extra emulation handling
if let Some(v) = hash.get(ruby.to_symbol(stringify!(emulation))) {
let emulation_obj = Obj::<Emulation>::try_convert(v)?;
builder.emulation = Some((*emulation_obj).clone());
}
let Ok(hash) = RHash::try_convert(*keyword) else {
return Ok(Default::default());
};

// extra user agent handling
builder.user_agent = Extractor::<HeaderValue>::try_convert(*keyword)?.into_inner();
let mut builder: Self = serde_magnus::deserialize(ruby, hash)?;

// extra headers handling
builder.headers = Extractor::<HeaderMap>::try_convert(*keyword)?.into_inner();

// extra original headers handling
builder.orig_headers = Extractor::<OrigHeaderMap>::try_convert(*keyword)?.into_inner();
if let Some(v) = hash.get(ruby.to_symbol(stringify!(emulation))) {
builder.emulation = Some((*Obj::<Emulation>::try_convert(v)?).clone());
}

// extra proxy handling
builder.proxy = Extractor::<Proxy>::try_convert(*keyword)?.into_inner();
if let Some(v) = hash.get(ruby.to_symbol(stringify!(headers))) {
builder.headers = Some(Headers::try_convert(v)?);
}

// extra cookie store handling
if let Some(jar) = hash.get(ruby.to_symbol(stringify!(cookie_provider))) {
builder.cookie_provider = Some((*Obj::<Jar>::try_convert(jar)?).clone());
}
if let Some(v) = hash.get(ruby.to_symbol(stringify!(cookie_provider))) {
builder.cookie_provider = Some((*Obj::<Jar>::try_convert(v)?).clone());
}

return Ok(builder);
if let Some(jar) = hash.get(ruby.to_symbol(stringify!(cookie_provider))) {
builder.cookie_provider = Some((*Obj::<Jar>::try_convert(jar)?).clone());
}

Ok(Default::default())
builder.user_agent = Extractor::<HeaderValue>::try_convert(*keyword)?.into_inner();
builder.orig_headers = Extractor::<OrigHeaderMap>::try_convert(*keyword)?.into_inner();
builder.proxy = Extractor::<Proxy>::try_convert(*keyword)?.into_inner();

Ok(builder)
}
}

// ===== impl Client =====

impl Client {
/// Create a new [`Client`] with the given keyword arguments.
pub fn new(ruby: &Ruby, kwargs: &[Value]) -> Result<Self, magnus::Error> {
if let Some(kwargs) = kwargs.first() {
let mut params = Builder::new(ruby, kwargs)?;
pub fn new(ruby: &Ruby, keyword: &[Value]) -> Result<Self, magnus::Error> {
if let Some(keyword) = keyword.first() {
let mut params = Builder::new(ruby, keyword)?;
gvl::nogvl(|| {
let mut builder = wreq::Client::builder();

Expand All @@ -177,7 +176,12 @@ impl Client {
apply_option!(set_if_some, builder, params.user_agent, user_agent);

// Default headers options.
apply_option!(set_if_some, builder, params.headers, default_headers);
apply_option!(
set_if_some_into_inner,
builder,
params.headers,
default_headers
);
apply_option!(set_if_some, builder, params.orig_headers, orig_headers);

// Allow redirects options.
Expand Down
Loading