faraday_persistent_excon 0.2.2 → 0.3.3

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
- SHA1:
3
- metadata.gz: bcf8b17c5b371de5744c937229974e5e2b68881d
4
- data.tar.gz: 4cb644e52301a7d938fb2b56bf21c2e36930320c
2
+ SHA256:
3
+ metadata.gz: c1f85714b132f22e4e9fe9852dbfc6780b6c00f95f5e36e6b77b7f0a9be7de70
4
+ data.tar.gz: 8946a5d751ef31a98636799191c0563530be3c4ffeb3347c38adc954d294f7a9
5
5
  SHA512:
6
- metadata.gz: 8b9303432e6dcb300b0a47aad3db9b8ebbf63b319f3ac1a16401937cb8f629700d8e884e1e3e1583643e9a1a47307326e04e15c26558de159088b6675fc0c0ad
7
- data.tar.gz: 393aeef700b32f7e47bd035e122be9777e234fd08d74ec6061092f209e57c61776fbf1add05bf8209fe47c29a5c665db3f6c462cd96526258c2e9d72c2b83676
6
+ metadata.gz: 80df392684a609ed27fc0f4da85f73e1f5675c9a98369ffc0ee34c7310961a6052163af813d94df1986cf65f36288e1d395c2ec5b37399c0a4feaf7359f493eb
7
+ data.tar.gz: 8e111c4143ae990cf9e5bb201bd8f2360003768ea70a6e4ddaf9704efb7b22a6d609f5d58002b967790e9945162e074d127dbcac02df264d6974ff91b35e4b32
@@ -0,0 +1,9 @@
1
+ /.bundle/
2
+ /.yardoc
3
+ /Gemfile.lock
4
+ /_yardoc/
5
+ /coverage/
6
+ /doc/
7
+ /pkg/
8
+ /spec/reports/
9
+ /tmp/
@@ -0,0 +1,34 @@
1
+ FROM ruby:2.6.5-alpine
2
+ MAINTAINER Ryan Schlesinger <ryan@outstand.com>
3
+
4
+ RUN addgroup -g 1000 -S gem && \
5
+ adduser -u 1000 -S -s /bin/ash -G gem gem && \
6
+ apk add --no-cache \
7
+ ca-certificates \
8
+ tini \
9
+ su-exec \
10
+ build-base \
11
+ git \
12
+ openssh
13
+
14
+ ENV LANG en_US.UTF-8
15
+ ENV LANGUAGE en_US:en
16
+ ENV LC_ALL en_US.UTF-8
17
+
18
+ ENV BUNDLER_VERSION 2.1.4
19
+ RUN gem install bundler -v ${BUNDLER_VERSION} -i /usr/local/lib/ruby/gems/$(ls /usr/local/lib/ruby/gems) --force
20
+
21
+ WORKDIR /srv
22
+ RUN chown -R gem:gem /srv
23
+ USER gem
24
+
25
+ COPY --chown=gem:gem Gemfile faraday_persistent_excon.gemspec /srv/
26
+ COPY --chown=gem:gem lib/faraday_persistent_excon/version.rb /srv/lib/faraday_persistent_excon/
27
+ RUN git config --global push.default simple
28
+ COPY --chown=gem:gem . /srv/
29
+
30
+ USER root
31
+ COPY docker-entrypoint.sh /docker-entrypoint.sh
32
+
33
+ ENTRYPOINT ["/sbin/tini", "-g", "--", "/docker-entrypoint.sh"]
34
+ CMD ["rspec", "spec"]
data/README.md CHANGED
@@ -1,12 +1,14 @@
1
1
  # FaradayPersistentExcon
2
2
 
3
+ [![Code Climate](https://codeclimate.com/github/aceofsales/faraday_persistent_excon/badges/gpa.svg)](https://codeclimate.com/github/aceofsales/faraday_persistent_excon)
4
+
3
5
  Adds configurable connection pools per host for persistent http connections
4
6
 
5
7
  ## Status
6
8
 
7
- **Alpha**
9
+ **Beta**
8
10
 
9
- All testing for this gem is currently in the form of bench testing. We're evaulating this gem in our production stack.
11
+ All testing for this gem is currently in the form of bench testing. We're using this gem in our production stack.
10
12
 
11
13
  ## Installation
12
14
 
@@ -33,15 +35,19 @@ Excon.defaults[:tcp_nodelay] = true
33
35
  Faraday.default_adapter = :persistent_excon
34
36
  FaradayPersistentExcon.connection_pools = {
35
37
  'https://search.example.com' => { size: 5 },
36
- 'http://localhost:9200' => { size: 10, timeout: 2 }
38
+ 'http://localhost:9200' => { size: 10, timeout: 2, idle_timeout: 300 }
37
39
  }
38
40
  ```
39
41
 
40
42
  ## Development
41
43
 
42
- After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake rspec` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
44
+ - `docker-compose build --pull`
45
+ - `docker-compose run --rm faraday_persistent_excon` to run specs
43
46
 
44
- 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 tags, and push the `.gem` file to [rubygems.org](https://rubygems.org).
47
+ To release a new version:
48
+ - Update the version number in `version.rb` and commit the result.
49
+ - `docker-compose build --pull`
50
+ - `docker-compose run --rm release`
45
51
 
46
52
  ## Contributing
47
53
 
@@ -0,0 +1,24 @@
1
+ version: '3.6'
2
+ services:
3
+ faraday_persistent_excon:
4
+ build: .
5
+ image: outstand/faraday_persistent_excon:dev
6
+ stdin_open: true
7
+ tty: true
8
+ volumes:
9
+ - bundler-data:/usr/local/bundle
10
+ - .:/srv
11
+ release:
12
+ image: outstand/faraday_persistent_excon:dev
13
+ stdin_open: true
14
+ tty: true
15
+ command: rake release
16
+ volumes:
17
+ - bundler-data:/usr/local/bundle
18
+ - ~/.gitconfig:/home/gem/.gitconfig
19
+ - ~/.gitconfig.user:/home/gem/.gitconfig.user
20
+ - ~/.ssh/id_rsa:/home/gem/.ssh/id_rsa
21
+ - ~/.gem:/home/gem/.gem
22
+
23
+ volumes:
24
+ bundler-data:
@@ -0,0 +1,20 @@
1
+ #!/bin/sh
2
+ set -e
3
+
4
+ if [ "$(which "$1")" = '' ]; then
5
+ if [ "$(ls -A /usr/local/bundle/bin)" = '' ]; then
6
+ echo 'command not in path and bundler not initialized'
7
+ echo 'running bundle install'
8
+ su-exec gem bundle install
9
+ fi
10
+ fi
11
+
12
+ if [ "$1" = 'bundle' ]; then
13
+ set -- su-exec gem "$@"
14
+ elif ls /usr/local/bundle/bin | grep -q "\b$1\b"; then
15
+ set -- su-exec gem bundle exec "$@"
16
+
17
+ su-exec gem ash -c 'bundle check || bundle install'
18
+ fi
19
+
20
+ exec "$@"
@@ -18,13 +18,13 @@ Gem::Specification.new do |spec|
18
18
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
19
19
  spec.require_paths = ["lib"]
20
20
 
21
- spec.add_dependency "faraday"
21
+ spec.add_dependency "faraday", ">= 0.10.0"
22
22
  spec.add_dependency "excon"
23
23
  spec.add_dependency "connection_pool"
24
24
  spec.add_dependency "activesupport"
25
25
  spec.add_dependency "thread_safe"
26
26
 
27
- spec.add_development_dependency "bundler", "~> 1.10"
28
- spec.add_development_dependency "rake", "~> 10.0"
27
+ spec.add_development_dependency "bundler", "~> 2.1"
28
+ spec.add_development_dependency "rake", "~> 13.0"
29
29
  spec.add_development_dependency "rspec"
30
30
  end
@@ -9,6 +9,7 @@ require 'faraday_persistent_excon/perform_request'
9
9
  require 'faraday_persistent_excon/adapter'
10
10
  require 'faraday_persistent_excon/request_options'
11
11
  require 'faraday_persistent_excon/connection_pools'
12
+ require 'faraday_persistent_excon/connection'
12
13
 
13
14
  module FaradayPersistentExcon
14
15
  class << self
@@ -17,7 +18,7 @@ module FaradayPersistentExcon
17
18
  attr_accessor :connection_pools
18
19
  attr_accessor :idempotent_methods
19
20
  attr_accessor :retry_idempotent_methods
20
- attr_accessor :retry_limit
21
+ attr_accessor :idle_timeout
21
22
  end
22
23
 
23
24
  self.excon_options = {}
@@ -25,7 +26,7 @@ module FaradayPersistentExcon
25
26
  self.connection_pools = {}
26
27
  self.idempotent_methods = %w[GET HEAD PUT DELETE OPTIONS TRACE]
27
28
  self.retry_idempotent_methods = true
28
- self.retry_limit = 1
29
+ self.idle_timeout = 60
29
30
  end
30
31
 
31
32
  Faraday::Adapter.register_middleware persistent_excon: ->{ FaradayPersistentExcon::Adapter }
@@ -12,7 +12,13 @@ module FaradayPersistentExcon
12
12
 
13
13
  def perform_request(env)
14
14
  response = FaradayPersistentExcon.perform_request_class.new.call env
15
- save_response(env, response.status.to_i, response.body, response.headers)
15
+ save_response(
16
+ env,
17
+ response.status.to_i,
18
+ response.body,
19
+ response.headers,
20
+ response.reason_phrase
21
+ )
16
22
  end
17
23
  end
18
24
  end
@@ -0,0 +1,26 @@
1
+ module FaradayPersistentExcon
2
+ class Connection
3
+ attr_accessor :excon
4
+ attr_accessor :last_use
5
+ attr_accessor :idle_timeout
6
+
7
+ def initialize(excon:, idle_timeout:)
8
+ @excon = excon
9
+ @idle_timeout = idle_timeout
10
+ end
11
+
12
+ def reset
13
+ excon.reset
14
+ end
15
+
16
+ def expired?
17
+ return false if last_use.nil? || idle_timeout == 0
18
+
19
+ Time.now.utc - last_use > idle_timeout
20
+ end
21
+
22
+ def used!
23
+ self.last_use = Time.now.utc
24
+ end
25
+ end
26
+ end
@@ -10,7 +10,14 @@ module FaradayPersistentExcon
10
10
  pool = self.connection_pool_for(url)
11
11
 
12
12
  if pool
13
- pool.with(&block)
13
+ pool.with do |conn|
14
+ begin
15
+ conn.reset if conn.expired?
16
+ block.call(conn.excon)
17
+ ensure
18
+ conn.used!
19
+ end
20
+ end
14
21
  else
15
22
  # No pool configured. Use normal connection
16
23
  block.call(::Excon.new(url, persistent: false))
@@ -23,7 +30,16 @@ module FaradayPersistentExcon
23
30
  if config
24
31
  self.__pools.fetch_or_store(url) do
25
32
  ::ConnectionPool.new(config) do
26
- ::Excon.new(url, persistent: true, thread_safe_sockets: false)
33
+ Connection.new(
34
+ excon: ::Excon.new(
35
+ url,
36
+ {
37
+ persistent: true,
38
+ thread_safe_sockets: false
39
+ }.merge(config.fetch(:connection_options, {}))
40
+ ),
41
+ idle_timeout: config.fetch(:idle_timeout, FaradayPersistentExcon.idle_timeout)
42
+ )
27
43
  end
28
44
  end
29
45
  end
@@ -11,15 +11,16 @@ module FaradayPersistentExcon
11
11
  end
12
12
 
13
13
  rescue ::Excon::Errors::SocketError => err
14
- if err.message =~ /\btimeout\b/
15
- raise Faraday::Error::TimeoutError, err
16
- elsif err.message =~ /\bcertificate\b/
17
- raise Faraday::Error::SSLError, err
14
+ case err.message
15
+ when /\btimeout\b/
16
+ raise Faraday::TimeoutError, err
17
+ when /\bcertificate\b/
18
+ raise Faraday::SSLError, err
18
19
  else
19
- raise Faraday::Error::ConnectionFailed, err
20
+ raise Faraday::ConnectionFailed, err
20
21
  end
21
22
  rescue ::Excon::Errors::Timeout => err
22
- raise Faraday::Error::TimeoutError, err
23
+ raise Faraday::TimeoutError, err
23
24
  end
24
25
 
25
26
  protected
@@ -12,6 +12,9 @@ module FaradayPersistentExcon
12
12
  opts[:client_key] = ssl[:client_key] if ssl[:client_key]
13
13
  opts[:certificate] = ssl[:certificate] if ssl[:certificate]
14
14
  opts[:private_key] = ssl[:private_key] if ssl[:private_key]
15
+ opts[:ssl_version] = ssl[:version] if ssl[:version]
16
+ opts[:ssl_min_version] = ssl[:min_version] if ssl[:min_version]
17
+ opts[:ssl_max_version] = ssl[:max_version] if ssl[:max_version]
15
18
  end
16
19
 
17
20
  if ( req = env[:request] )
@@ -23,12 +26,12 @@ module FaradayPersistentExcon
23
26
 
24
27
  if req[:open_timeout]
25
28
  opts[:connect_timeout] = req[:open_timeout]
26
- opts[:write_timeout] = req[:open_timeout]
27
29
  end
28
30
 
29
31
  if req[:proxy]
30
32
  opts[:proxy] = {
31
33
  host: req[:proxy][:uri].host,
34
+ hostname: req[:proxy][:uri].hostname,
32
35
  port: req[:proxy][:uri].port,
33
36
  scheme: req[:proxy][:uri].scheme,
34
37
  user: req[:proxy][:user],
@@ -39,7 +42,6 @@ module FaradayPersistentExcon
39
42
 
40
43
  if FaradayPersistentExcon.retry_idempotent_methods && FaradayPersistentExcon.idempotent_methods.include?(env[:method].to_s.upcase)
41
44
  opts[:idempotent] = true
42
- opts[:retry_limit] = FaradayPersistentExcon.retry_limit
43
45
  end
44
46
 
45
47
  opts
@@ -1,3 +1,3 @@
1
1
  module FaradayPersistentExcon
2
- VERSION = "0.2.2"
2
+ VERSION = "0.3.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: faraday_persistent_excon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.2
4
+ version: 0.3.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Schlesinger
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2015-08-24 00:00:00.000000000 Z
11
+ date: 2020-06-30 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -16,14 +16,14 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 0.10.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 0.10.0
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: excon
29
29
  requirement: !ruby/object:Gem::Requirement
@@ -86,28 +86,28 @@ dependencies:
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '1.10'
89
+ version: '2.1'
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '1.10'
96
+ version: '2.1'
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: '13.0'
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: '13.0'
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
@@ -129,18 +129,23 @@ executables: []
129
129
  extensions: []
130
130
  extra_rdoc_files: []
131
131
  files:
132
+ - ".dockerignore"
132
133
  - ".gitignore"
133
134
  - ".rspec"
134
135
  - ".travis.yml"
136
+ - Dockerfile
135
137
  - Gemfile
136
138
  - LICENSE.md
137
139
  - README.md
138
140
  - Rakefile
139
141
  - bin/console
140
142
  - bin/setup
143
+ - docker-compose.yml
144
+ - docker-entrypoint.sh
141
145
  - faraday_persistent_excon.gemspec
142
146
  - lib/faraday_persistent_excon.rb
143
147
  - lib/faraday_persistent_excon/adapter.rb
148
+ - lib/faraday_persistent_excon/connection.rb
144
149
  - lib/faraday_persistent_excon/connection_pools.rb
145
150
  - lib/faraday_persistent_excon/perform_request.rb
146
151
  - lib/faraday_persistent_excon/request_options.rb
@@ -163,8 +168,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
168
  - !ruby/object:Gem::Version
164
169
  version: '0'
165
170
  requirements: []
166
- rubyforge_project:
167
- rubygems_version: 2.4.7
171
+ rubygems_version: 3.0.3
168
172
  signing_key:
169
173
  specification_version: 4
170
174
  summary: Persistent connections with faraday and excon