binking 0.2.1 → 0.2.4
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 +4 -4
- data/lib/binking/cache_middalware.rb +84 -0
- data/lib/binking/client.rb +8 -3
- data/lib/binking/config.rb +3 -1
- data/lib/binking/request_resource.rb +5 -3
- data/lib/binking/version.rb +1 -1
- data/lib/binking.rb +2 -1
- metadata +5 -18
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 54fdf60bb43b4cf3b4c6f77cd5d626c187a45a8d4979ff149ed6bccedf7d5ec5
|
4
|
+
data.tar.gz: d73151ea1958e927bc0af2197963b06e294efa13ae33a44a8f25e52c1767db3b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c4696cd3627a8c0394b4d4841822c1c1a101a4cdd7b53d89017ba8940f1b1fc4cbdc5c14a0e82ebb8968c9c6ba58d588a753bb5c29c647826f0d82797804ae04
|
7
|
+
data.tar.gz: 7cd854902ad446e1c8452f87430bc65a09a4a099c8125ec2c20bb4920ab756c252b47bdc51a26870020c673a461802cf012e8e2457078a59ad6265cb709d2c6a
|
@@ -0,0 +1,84 @@
|
|
1
|
+
class CacheMiddalware < Faraday::Middleware
|
2
|
+
DEFAULT_CONDITIONS = ->(env) { env.method == :get || env.method == :head }
|
3
|
+
DEFAULT_CACHE_KEY = ->(env) { env.url }
|
4
|
+
|
5
|
+
def initialize(app, store, *args)
|
6
|
+
super(app)
|
7
|
+
options = args.first || {}
|
8
|
+
|
9
|
+
@store = store
|
10
|
+
@conditions = options.fetch(:conditions, DEFAULT_CONDITIONS)
|
11
|
+
@expires_in = options.fetch(:expires_in, 30)
|
12
|
+
@logger = options.fetch(:logger, nil)
|
13
|
+
@cache_key = options.fetch(:cache_key, DEFAULT_CACHE_KEY)
|
14
|
+
end
|
15
|
+
|
16
|
+
def call(env)
|
17
|
+
dup.call!(env)
|
18
|
+
end
|
19
|
+
|
20
|
+
protected
|
21
|
+
|
22
|
+
def call!(env)
|
23
|
+
response_env = cached_response(env)
|
24
|
+
|
25
|
+
if response_env
|
26
|
+
response_env.response_headers['x-faraday-manual-cache'] = 'HIT'
|
27
|
+
to_response(response_env)
|
28
|
+
else
|
29
|
+
@app.call(env).on_complete do |response_env|
|
30
|
+
response_env.response_headers['x-faraday-manual-cache'] = 'MISS'
|
31
|
+
cache_response(response_env)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def cache_response(env)
|
37
|
+
return unless cacheable?(env) && !env.request_headers['x-faraday-manual-cache']
|
38
|
+
|
39
|
+
info "Cache WRITE: #{key(env)}"
|
40
|
+
@store.write(
|
41
|
+
key(env),
|
42
|
+
env,
|
43
|
+
expires_in: expires_in(env)
|
44
|
+
)
|
45
|
+
end
|
46
|
+
|
47
|
+
def cacheable?(env)
|
48
|
+
@conditions.call(env)
|
49
|
+
end
|
50
|
+
|
51
|
+
def cached_response(env)
|
52
|
+
if cacheable?(env) && !env.request_headers['x-faraday-manual-cache']
|
53
|
+
response_env = @store.fetch(key(env))
|
54
|
+
end
|
55
|
+
|
56
|
+
if response_env
|
57
|
+
info "Cache HIT: #{key(env)}"
|
58
|
+
else
|
59
|
+
info "Cache MISS: #{key(env)}"
|
60
|
+
end
|
61
|
+
|
62
|
+
response_env
|
63
|
+
end
|
64
|
+
|
65
|
+
def info(message)
|
66
|
+
@logger.info(message) unless @logger.nil?
|
67
|
+
end
|
68
|
+
|
69
|
+
def key(env)
|
70
|
+
@cache_key.call(env)
|
71
|
+
end
|
72
|
+
|
73
|
+
def expires_in(env)
|
74
|
+
@expires_in.respond_to?(:call) ? @expires_in.call(env) : @expires_in
|
75
|
+
end
|
76
|
+
|
77
|
+
def to_response(env)
|
78
|
+
env = env.dup
|
79
|
+
env.response_headers['x-faraday-manual-cache'] = 'HIT'
|
80
|
+
response = Faraday::Response.new
|
81
|
+
response.finish(env) unless env.parallel?
|
82
|
+
env.response = response
|
83
|
+
end
|
84
|
+
end
|
data/lib/binking/client.rb
CHANGED
@@ -1,22 +1,23 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require "faraday"
|
4
|
-
require "faraday_middleware"
|
5
4
|
|
6
5
|
module Binking
|
7
6
|
class Client
|
8
|
-
attr_accessor :api_token, :host, :sandbox, :cache, :logger, :options
|
7
|
+
attr_accessor :api_token, :host, :sandbox, :cache, :cache_expires_in, :logger, :options
|
9
8
|
|
10
9
|
def initialize(api_token: Binking.config.api_token,
|
11
10
|
host: Binking.config.host,
|
12
11
|
sandbox: Binking.config.sandbox,
|
13
12
|
cache: Binking.config.cache,
|
13
|
+
cache_expires_in: Binking.config.cache_expires_in,
|
14
14
|
logger: Binking.config.logger,
|
15
15
|
options: Binking.config.request_options)
|
16
16
|
@api_token = api_token
|
17
17
|
@host = host
|
18
18
|
@sandbox = sandbox
|
19
19
|
@cache = cache
|
20
|
+
@cache_expires_in = cache_expires_in
|
20
21
|
@logger = logger
|
21
22
|
@options = options
|
22
23
|
end
|
@@ -32,7 +33,11 @@ module Binking
|
|
32
33
|
|
33
34
|
def connection
|
34
35
|
@connection ||= Faraday.new(host, request: options) do |builder|
|
35
|
-
builder.use(
|
36
|
+
builder.use(
|
37
|
+
CacheMiddalware,
|
38
|
+
cache,
|
39
|
+
expires_in: cache_expires_in
|
40
|
+
) if cache
|
36
41
|
builder.use Faraday::Response::RaiseError
|
37
42
|
builder.request :url_encoded
|
38
43
|
builder.response :json
|
data/lib/binking/config.rb
CHANGED
@@ -4,18 +4,20 @@ module Binking
|
|
4
4
|
class Config
|
5
5
|
DEFAULT_HOST = "https://api.binking.io"
|
6
6
|
|
7
|
-
attr_accessor :api_token, :host, :sandbox, :cache, :logger, :request_options
|
7
|
+
attr_accessor :api_token, :host, :sandbox, :cache, :cache_expires_in, :logger, :request_options
|
8
8
|
|
9
9
|
def initialize(api_token: nil,
|
10
10
|
host: DEFAULT_HOST,
|
11
11
|
sandbox: false,
|
12
12
|
cache: nil,
|
13
|
+
cache_expires_in: 2592000,
|
13
14
|
logger: nil,
|
14
15
|
request_options: {})
|
15
16
|
@api_token = api_token
|
16
17
|
@host = host
|
17
18
|
@sandbox = sandbox
|
18
19
|
@cache = cache
|
20
|
+
@cache_expires_in = cache_expires_in
|
19
21
|
@logger = logger
|
20
22
|
@request_options = request_options
|
21
23
|
end
|
@@ -16,9 +16,11 @@ module Binking
|
|
16
16
|
params[RESOURCES_KEYS[resource.to_s]] = value
|
17
17
|
params[:fields] = fields.join(",") unless fields.empty?
|
18
18
|
|
19
|
-
Client.new(sandbox: sandbox)
|
20
|
-
|
21
|
-
|
19
|
+
response = Client.new(sandbox: sandbox).get("/#{resource}", params)
|
20
|
+
|
21
|
+
return {} if response.body == 'null'
|
22
|
+
|
23
|
+
response.body
|
22
24
|
end
|
23
25
|
end
|
24
26
|
end
|
data/lib/binking/version.rb
CHANGED
data/lib/binking.rb
CHANGED
@@ -2,6 +2,7 @@
|
|
2
2
|
|
3
3
|
require_relative "binking/version"
|
4
4
|
require "binking/config"
|
5
|
+
require "binking/cache_middalware"
|
5
6
|
require "binking/client"
|
6
7
|
require "binking/fields"
|
7
8
|
require "binking/request_resource"
|
@@ -22,7 +23,7 @@ module Binking
|
|
22
23
|
end
|
23
24
|
|
24
25
|
%i[form bank banks].each do |resource_name|
|
25
|
-
define_singleton_method(resource_name) do |*args|
|
26
|
+
define_singleton_method(resource_name) do |*args|
|
26
27
|
raise NotConfiguredError unless configured?
|
27
28
|
|
28
29
|
RequestResource.get(resource_name, *args)
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: binking
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Anton Kostyuk
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-01-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rspec
|
@@ -30,28 +30,14 @@ dependencies:
|
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '2.0'
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: faraday_middleware
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: 1.2.0
|
48
|
-
type: :runtime
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: 1.2.0
|
40
|
+
version: '2.0'
|
55
41
|
description:
|
56
42
|
email:
|
57
43
|
- anton.kostuk.2012@gmail.com
|
@@ -60,6 +46,7 @@ extensions: []
|
|
60
46
|
extra_rdoc_files: []
|
61
47
|
files:
|
62
48
|
- lib/binking.rb
|
49
|
+
- lib/binking/cache_middalware.rb
|
63
50
|
- lib/binking/client.rb
|
64
51
|
- lib/binking/config.rb
|
65
52
|
- lib/binking/fields.rb
|