vindi-rails 0.4.0 → 0.5.0
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/CHANGELOG.md +6 -0
- data/CHANGELOG.pt-BR.md +6 -0
- data/README.md +14 -0
- data/README.pt-BR.md +14 -0
- data/WIKI.md +26 -0
- data/WIKI.pt-BR.md +26 -0
- data/lib/vindi/version.rb +1 -1
- data/lib/vindi.rb +83 -59
- metadata +2 -2
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 9cc70a8b11e2e8ba106e24508d896f8c7d862c576b2a5567b9b761cbf4e576bc
|
|
4
|
+
data.tar.gz: 80020ce37d9eb50fbdfa3af086787c3f21dec7d9117b910a49f8ef35d699b4d1
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: d0ac13636a87643501770e84730fcc00686897057705fba0c2eed3a5f274832afbacbe9601fc81c882559ed6b4befc1afd907d06d66f88e49ccc123d411a9cf9
|
|
7
|
+
data.tar.gz: d2b83b3553f2850334b1e8820aeceabcce3bef8a49e0132b3afc44da595163eed5f2e3182b5c9483690a4b450be58c99f5ed6a3fefdc1d4bc45efcc8ded24910
|
data/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
---
|
|
6
|
+
## [0.5.0] - 2026-06-21
|
|
7
|
+
|
|
8
|
+
### Added
|
|
9
|
+
- **Dynamic Multi-Merchant (Multi-Tenancy)**: Added thread-safe dynamic configuration capabilities via `Vindi.with_config` to allow executing blocks of API actions with different credentials or settings temporarily, without affecting other concurrent threads or the global state.
|
|
10
|
+
|
|
5
11
|
---
|
|
6
12
|
## [0.4.0] - 2026-06-15
|
|
7
13
|
|
data/CHANGELOG.pt-BR.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
Todas as alterações notáveis neste projeto serão documentadas neste arquivo.
|
|
4
4
|
|
|
5
|
+
---
|
|
6
|
+
## [0.5.0] - 21-06-2026
|
|
7
|
+
|
|
8
|
+
### Adicionado
|
|
9
|
+
- **Multi-Merchant Dinâmico (Multi-Tenancy)**: Suporte a configurações dinâmicas e isoladas por thread (thread-safe) usando `Vindi.with_config` para executar blocos de ações da API com credenciais ou configurações diferentes temporariamente, sem interferir no estado global ou em outras threads concorrentes.
|
|
10
|
+
|
|
5
11
|
---
|
|
6
12
|
## [0.4.0] - 15-06-2026
|
|
7
13
|
|
data/README.md
CHANGED
|
@@ -46,6 +46,20 @@ Vindi.configure do |config|
|
|
|
46
46
|
end
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
### Dynamic Configuration (Multi-Merchant / Multi-Tenancy)
|
|
50
|
+
|
|
51
|
+
If your application needs to handle multiple Vindi accounts or switch API credentials dynamically (e.g., in a multi-tenant SaaS application), you can use `Vindi.with_config` to run a block with temporary credentials. This operation is thread-safe:
|
|
52
|
+
|
|
53
|
+
```ruby
|
|
54
|
+
# Switch key and API url dynamically within a block
|
|
55
|
+
Vindi.with_config(api_key: 'another_merchant_api_key', api_url: 'https://gp.vindi.com.br/api/v1') do
|
|
56
|
+
# Any API call here will use the overridden configuration
|
|
57
|
+
customers = Vindi::Customer.list
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# The original global configuration is automatically restored outside the block
|
|
61
|
+
```
|
|
62
|
+
|
|
49
63
|
## Usage
|
|
50
64
|
|
|
51
65
|
Resources are mapped directly under the `Vindi` namespace.
|
data/README.pt-BR.md
CHANGED
|
@@ -46,6 +46,20 @@ Vindi.configure do |config|
|
|
|
46
46
|
end
|
|
47
47
|
```
|
|
48
48
|
|
|
49
|
+
### Configuração Dinâmica (Multi-Merchant / Multi-Tenancy)
|
|
50
|
+
|
|
51
|
+
Se a sua aplicação precisa lidar com múltiplas contas da Vindi ou alternar credenciais da API dinamicamente (por exemplo, em uma aplicação SaaS multi-tenant), você pode usar `Vindi.with_config` para executar um bloco com credenciais temporárias. Esta operação é segura contra concorrência (thread-safe):
|
|
52
|
+
|
|
53
|
+
```ruby
|
|
54
|
+
# Altera a chave e a URL da API dinamicamente dentro de um bloco
|
|
55
|
+
Vindi.with_config(api_key: 'outra_chave_api_do_merchant', api_url: 'https://gp.vindi.com.br/api/v1') do
|
|
56
|
+
# Qualquer chamada de API dentro deste bloco usará as configurações sobrescritas
|
|
57
|
+
clientes = Vindi::Customer.list
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# A configuração global original é restaurada automaticamente fora do bloco
|
|
61
|
+
```
|
|
62
|
+
|
|
49
63
|
## Utilização
|
|
50
64
|
|
|
51
65
|
Os recursos são mapeados diretamente sob o namespace `Vindi`.
|
data/WIKI.md
CHANGED
|
@@ -549,4 +549,30 @@ Vindi.configure do |config|
|
|
|
549
549
|
end
|
|
550
550
|
```
|
|
551
551
|
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
## 7. Dynamic Configuration (Multi-Merchant / Multi-Tenancy)
|
|
555
|
+
|
|
556
|
+
When building multi-tenant SaaS applications, you may need to perform Vindi API calls on behalf of different merchant accounts, each with its own API key and configuration settings.
|
|
557
|
+
|
|
558
|
+
To switch configuration settings on the fly in a thread-safe manner, use the `Vindi.with_config` method.
|
|
559
|
+
|
|
560
|
+
### Example Usage
|
|
561
|
+
|
|
562
|
+
```ruby
|
|
563
|
+
# The global configuration is configured in the initializer
|
|
564
|
+
# Vindi.configuration.api_key # => "global_api_key"
|
|
565
|
+
|
|
566
|
+
# Temporarily switch credentials within a block
|
|
567
|
+
Vindi.with_config(api_key: "merchant_b_api_key", api_url: "https://gp.vindi.com.br/api/v1") do
|
|
568
|
+
# Calls inside this block will use Merchant B's credentials and base URL
|
|
569
|
+
@plans = Vindi::Plan.list
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
# Once the block exits, the default global configuration is restored
|
|
573
|
+
# Vindi.configuration.api_key # => "global_api_key"
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
The config override accepts either a hash of keys (`:api_key`, `:api_url`, `:cache_store`, etc.) or a complete `Vindi::Configuration` instance.
|
|
577
|
+
|
|
552
578
|
|
data/WIKI.pt-BR.md
CHANGED
|
@@ -549,4 +549,30 @@ Vindi.configure do |config|
|
|
|
549
549
|
end
|
|
550
550
|
```
|
|
551
551
|
|
|
552
|
+
---
|
|
553
|
+
|
|
554
|
+
## 7. Configuração Dinâmica (Multi-Merchant / Multi-Tenancy)
|
|
555
|
+
|
|
556
|
+
Ao construir aplicações SaaS multi-tenant, você pode precisar fazer chamadas à API da Vindi em nome de contas de merchants diferentes, cada uma com sua própria chave de API e parâmetros de configuração.
|
|
557
|
+
|
|
558
|
+
Para alterar as configurações em tempo de execução de forma segura contra concorrência (thread-safe), use o método `Vindi.with_config`.
|
|
559
|
+
|
|
560
|
+
### Exemplo de Uso
|
|
561
|
+
|
|
562
|
+
```ruby
|
|
563
|
+
# A configuração global é definida no inicializador (ex: config/initializers/vindi.rb)
|
|
564
|
+
# Vindi.configuration.api_key # => "chave_global"
|
|
565
|
+
|
|
566
|
+
# Altera temporariamente as credenciais dentro de um bloco
|
|
567
|
+
Vindi.with_config(api_key: "chave_do_merchant_b", api_url: "https://gp.vindi.com.br/api/v1") do
|
|
568
|
+
# Chamadas de API dentro deste bloco usam a chave e URL do Merchant B
|
|
569
|
+
@plans = Vindi::Plan.list
|
|
570
|
+
end
|
|
571
|
+
|
|
572
|
+
# Após a saída do bloco, a configuração global padrão é restaurada automaticamente
|
|
573
|
+
# Vindi.configuration.api_key # => "chave_global"
|
|
574
|
+
```
|
|
575
|
+
|
|
576
|
+
O override de configuração aceita tanto um hash de chaves (`:api_key`, `:api_url`, `:cache_store`, etc.) quanto uma instância completa da classe `Vindi::Configuration`.
|
|
577
|
+
|
|
552
578
|
|
data/lib/vindi/version.rb
CHANGED
data/lib/vindi.rb
CHANGED
|
@@ -1,59 +1,83 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
require "rest-client"
|
|
4
|
-
require "json"
|
|
5
|
-
|
|
6
|
-
require_relative "vindi/version"
|
|
7
|
-
require_relative "vindi/configuration"
|
|
8
|
-
require_relative "vindi/errors"
|
|
9
|
-
require_relative "vindi/client"
|
|
10
|
-
require_relative "vindi/api_operations/create"
|
|
11
|
-
require_relative "vindi/api_operations/delete"
|
|
12
|
-
require_relative "vindi/api_operations/list"
|
|
13
|
-
require_relative "vindi/api_operations/update"
|
|
14
|
-
require_relative "vindi/resource"
|
|
15
|
-
require_relative "vindi/railtie" if defined?(Rails)
|
|
16
|
-
|
|
17
|
-
# Load all resources
|
|
18
|
-
require_relative "vindi/resources/customer"
|
|
19
|
-
require_relative "vindi/resources/payment_profile"
|
|
20
|
-
require_relative "vindi/resources/subscription"
|
|
21
|
-
require_relative "vindi/resources/charge"
|
|
22
|
-
require_relative "vindi/resources/plan"
|
|
23
|
-
require_relative "vindi/resources/product"
|
|
24
|
-
require_relative "vindi/resources/payment_method"
|
|
25
|
-
require_relative "vindi/resources/discount"
|
|
26
|
-
require_relative "vindi/resources/product_item"
|
|
27
|
-
require_relative "vindi/resources/period"
|
|
28
|
-
require_relative "vindi/resources/bill"
|
|
29
|
-
require_relative "vindi/resources/bill_item"
|
|
30
|
-
require_relative "vindi/resources/transaction"
|
|
31
|
-
require_relative "vindi/resources/usage"
|
|
32
|
-
require_relative "vindi/resources/invoice"
|
|
33
|
-
require_relative "vindi/resources/movement"
|
|
34
|
-
require_relative "vindi/resources/message"
|
|
35
|
-
require_relative "vindi/resources/export_batch"
|
|
36
|
-
require_relative "vindi/resources/import_batch"
|
|
37
|
-
require_relative "vindi/resources/issue"
|
|
38
|
-
require_relative "vindi/resources/notification"
|
|
39
|
-
require_relative "vindi/resources/merchant"
|
|
40
|
-
require_relative "vindi/resources/merchant_user"
|
|
41
|
-
require_relative "vindi/resources/role"
|
|
42
|
-
require_relative "vindi/resources/user"
|
|
43
|
-
require_relative "vindi/resources/public"
|
|
44
|
-
require_relative "vindi/resources/affiliate"
|
|
45
|
-
require_relative "vindi/resources/partner"
|
|
46
|
-
|
|
47
|
-
module Vindi
|
|
48
|
-
class << self
|
|
49
|
-
attr_writer :configuration
|
|
50
|
-
|
|
51
|
-
def configuration
|
|
52
|
-
@configuration ||= Configuration.new
|
|
53
|
-
end
|
|
54
|
-
|
|
55
|
-
def configure
|
|
56
|
-
yield(configuration)
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require "rest-client"
|
|
4
|
+
require "json"
|
|
5
|
+
|
|
6
|
+
require_relative "vindi/version"
|
|
7
|
+
require_relative "vindi/configuration"
|
|
8
|
+
require_relative "vindi/errors"
|
|
9
|
+
require_relative "vindi/client"
|
|
10
|
+
require_relative "vindi/api_operations/create"
|
|
11
|
+
require_relative "vindi/api_operations/delete"
|
|
12
|
+
require_relative "vindi/api_operations/list"
|
|
13
|
+
require_relative "vindi/api_operations/update"
|
|
14
|
+
require_relative "vindi/resource"
|
|
15
|
+
require_relative "vindi/railtie" if defined?(Rails)
|
|
16
|
+
|
|
17
|
+
# Load all resources
|
|
18
|
+
require_relative "vindi/resources/customer"
|
|
19
|
+
require_relative "vindi/resources/payment_profile"
|
|
20
|
+
require_relative "vindi/resources/subscription"
|
|
21
|
+
require_relative "vindi/resources/charge"
|
|
22
|
+
require_relative "vindi/resources/plan"
|
|
23
|
+
require_relative "vindi/resources/product"
|
|
24
|
+
require_relative "vindi/resources/payment_method"
|
|
25
|
+
require_relative "vindi/resources/discount"
|
|
26
|
+
require_relative "vindi/resources/product_item"
|
|
27
|
+
require_relative "vindi/resources/period"
|
|
28
|
+
require_relative "vindi/resources/bill"
|
|
29
|
+
require_relative "vindi/resources/bill_item"
|
|
30
|
+
require_relative "vindi/resources/transaction"
|
|
31
|
+
require_relative "vindi/resources/usage"
|
|
32
|
+
require_relative "vindi/resources/invoice"
|
|
33
|
+
require_relative "vindi/resources/movement"
|
|
34
|
+
require_relative "vindi/resources/message"
|
|
35
|
+
require_relative "vindi/resources/export_batch"
|
|
36
|
+
require_relative "vindi/resources/import_batch"
|
|
37
|
+
require_relative "vindi/resources/issue"
|
|
38
|
+
require_relative "vindi/resources/notification"
|
|
39
|
+
require_relative "vindi/resources/merchant"
|
|
40
|
+
require_relative "vindi/resources/merchant_user"
|
|
41
|
+
require_relative "vindi/resources/role"
|
|
42
|
+
require_relative "vindi/resources/user"
|
|
43
|
+
require_relative "vindi/resources/public"
|
|
44
|
+
require_relative "vindi/resources/affiliate"
|
|
45
|
+
require_relative "vindi/resources/partner"
|
|
46
|
+
|
|
47
|
+
module Vindi
|
|
48
|
+
class << self
|
|
49
|
+
attr_writer :configuration
|
|
50
|
+
|
|
51
|
+
def configuration
|
|
52
|
+
Thread.current[:vindi_config] || @configuration ||= Configuration.new
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
def configure
|
|
56
|
+
yield(configuration)
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
def with_config(config_override)
|
|
60
|
+
original_config = Thread.current[:vindi_config]
|
|
61
|
+
Thread.current[:vindi_config] = build_override_config(config_override)
|
|
62
|
+
yield
|
|
63
|
+
ensure
|
|
64
|
+
Thread.current[:vindi_config] = original_config
|
|
65
|
+
end
|
|
66
|
+
|
|
67
|
+
private
|
|
68
|
+
|
|
69
|
+
def build_override_config(override)
|
|
70
|
+
return override if override.is_a?(Configuration)
|
|
71
|
+
|
|
72
|
+
current = Thread.current[:vindi_config] || @configuration || Configuration.new
|
|
73
|
+
cloned = current.clone
|
|
74
|
+
|
|
75
|
+
override.each do |key, value|
|
|
76
|
+
setter = "#{key}="
|
|
77
|
+
cloned.public_send(setter, value) if cloned.respond_to?(setter)
|
|
78
|
+
end
|
|
79
|
+
|
|
80
|
+
cloned
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
end
|
metadata
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: vindi-rails
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.
|
|
4
|
+
version: 0.5.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Wesley Lima
|
|
8
8
|
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2026-06-
|
|
11
|
+
date: 2026-06-21 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
14
|
name: rest-client
|