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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 3c4a89903d0af0d6e06d1dcf076c14fe601aeb75e3ec4625989fbaf5e7976496
4
- data.tar.gz: 2f86c3d4f3e38cbdfd05ba08395b5335a5c5069a0777690f7306353ab0c1a617
3
+ metadata.gz: 54fdf60bb43b4cf3b4c6f77cd5d626c187a45a8d4979ff149ed6bccedf7d5ec5
4
+ data.tar.gz: d73151ea1958e927bc0af2197963b06e294efa13ae33a44a8f25e52c1767db3b
5
5
  SHA512:
6
- metadata.gz: f33edd70bce295acc722cf3d7f1d58a6ea6934561df3a09ffe4dea1607c61c8c8cd4d423cf01e5521d01f29b361dded60f43f9461f9a6eb246db5823dafb602e
7
- data.tar.gz: fa9fd94576c15edbd6c980ffc501c762ac7e521a0e36c3b399dcb533eb961696fdda0c6c43e22268dba772bb8f39a990e7c0e63db37fff2c7ccb35838c237810
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
@@ -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(FaradayMiddleware::Caching, cache) if cache
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
@@ -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
- .get("/#{resource}", params)
21
- .body
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module Binking
4
- VERSION = "0.2.1"
4
+ VERSION = "0.2.4"
5
5
  end
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.1
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: 2023-08-10 00:00:00.000000000 Z
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: 1.7.1
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: 1.7.1
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