spackle-ruby 0.0.19 → 0.0.20
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/README.md +6 -11
- data/lib/spackle/spackle_configuration.rb +1 -3
- data/lib/spackle/stores/api.rb +30 -0
- data/lib/spackle.rb +1 -2
- data/spackle.gemspec +1 -1
- metadata +3 -3
- data/lib/spackle/stores/edge.rb +0 -51
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 5e308f6efcd3b1382dbe36a32a0de17b053b02caab96e82922fefed84ae02252
|
4
|
+
data.tar.gz: 2ac13819cd9ec91fa3fc92f3dc2025851e179c9b39895040ac75b17de9bc01c1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 533f9b6ece5e3cf29a1da44bd95d8bc8241b6bb517e149b3413f9e4e0c9e0e33a998d148720c4ef6b968310e41601d40c608a3d062a25961841981e794bccb54
|
7
|
+
data.tar.gz: 1feaa3357a5bfb08e11813743ba864ca0084ad24d7c57ead7034e51d86bcc09208d5cd2e72c3229be5a4a15d3a94a5835b560ec4eb22dbfbca08413a7d00b637
|
data/README.md
CHANGED
@@ -25,7 +25,7 @@ gem 'spackle-ruby'
|
|
25
25
|
```
|
26
26
|
|
27
27
|
### Configure your environment
|
28
|
-
In order to use Spackle, you need to configure your
|
28
|
+
In order to use Spackle, you need to configure your secret key on the `Spackle` module. You can find your secret key in Spackle app [settings page](https://dashboard.stripe.com/settings/apps/so.spackle.stripe).
|
29
29
|
|
30
30
|
```ruby
|
31
31
|
require 'spackle'
|
@@ -33,14 +33,6 @@ require 'spackle'
|
|
33
33
|
Spackle.api_key = "<api key>"
|
34
34
|
```
|
35
35
|
|
36
|
-
### Bootstrap the client (optional)
|
37
|
-
|
38
|
-
The Spackle client requires a single initialization step that includes a network request. To front load this process, you can call the `bootstrap` method in your codebase.
|
39
|
-
|
40
|
-
```ruby
|
41
|
-
Spackle.bootstrap()
|
42
|
-
```
|
43
|
-
|
44
36
|
## Usage
|
45
37
|
|
46
38
|
### Pricing tables
|
@@ -59,6 +51,8 @@ pricing_table = Spackle::PricingTable.retrieve("abcde123")
|
|
59
51
|
intervals: string[]
|
60
52
|
products: {
|
61
53
|
id: string
|
54
|
+
name: string
|
55
|
+
description: string
|
62
56
|
features: {
|
63
57
|
id: string
|
64
58
|
name: string
|
@@ -67,13 +61,14 @@ pricing_table = Spackle::PricingTable.retrieve("abcde123")
|
|
67
61
|
value_flag: boolean
|
68
62
|
value_limit: number | null
|
69
63
|
}[]
|
70
|
-
name: string
|
71
64
|
prices: {
|
72
65
|
month?: {
|
66
|
+
id: string
|
73
67
|
unit_amount: number
|
74
68
|
currency: string
|
75
69
|
}
|
76
70
|
year?: {
|
71
|
+
id: string
|
77
72
|
unit_amount: number
|
78
73
|
currency: string
|
79
74
|
}
|
@@ -168,7 +163,7 @@ Then configure the file store in your application:
|
|
168
163
|
Spackle.store = Spackle::FileStore.new('/app/spackle.json')
|
169
164
|
```
|
170
165
|
|
171
|
-
|
166
|
+
#### Usage in test environments
|
172
167
|
|
173
168
|
In production, Spackle requires a valid Stripe customer. However, that is not ideal in testing or some development environments. As an alternative, you can use an in-memory store to test your application with seed data.
|
174
169
|
|
@@ -4,13 +4,11 @@ module Spackle
|
|
4
4
|
class SpackleConfiguration
|
5
5
|
attr_accessor :api_key
|
6
6
|
attr_accessor :api_base
|
7
|
-
attr_accessor :edge_base
|
8
7
|
attr_reader :logger
|
9
8
|
attr_reader :version
|
10
9
|
|
11
10
|
def initialize
|
12
11
|
@api_base = 'https://api.spackle.so/v1'
|
13
|
-
@edge_base = 'https://us-west-2.edge.spackle.so'
|
14
12
|
@log_level = Logger::WARN
|
15
13
|
@logger = Logger.new(STDOUT, level: @log_level)
|
16
14
|
@version = 1
|
@@ -28,7 +26,7 @@ module Spackle
|
|
28
26
|
|
29
27
|
def store()
|
30
28
|
if @store == nil
|
31
|
-
@store =
|
29
|
+
@store = ApiStore.new
|
32
30
|
end
|
33
31
|
@store
|
34
32
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'faraday'
|
2
|
+
require "faraday/net_http_persistent"
|
3
|
+
require 'json'
|
4
|
+
require 'logger'
|
5
|
+
|
6
|
+
module Spackle
|
7
|
+
class ApiStore < BaseStore
|
8
|
+
def initialize()
|
9
|
+
@api = Faraday.new(
|
10
|
+
url: Spackle.api_base,
|
11
|
+
headers: {
|
12
|
+
'Authorization' => "Bearer #{Spackle.api_key}",
|
13
|
+
'X-Spackle-Schema-Version' => Spackle.version.to_s,
|
14
|
+
}
|
15
|
+
) do |faraday|
|
16
|
+
faraday.adapter :net_http_persistent
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def get_customer_data(id)
|
21
|
+
response = @api.get("/customers/#{id}/state")
|
22
|
+
|
23
|
+
if response.status != 200
|
24
|
+
raise SpackleError.new "Customer #{id} not found"
|
25
|
+
end
|
26
|
+
|
27
|
+
return JSON.parse(response.body)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
data/lib/spackle.rb
CHANGED
@@ -8,7 +8,7 @@ require 'spackle/util'
|
|
8
8
|
require 'spackle/waiters'
|
9
9
|
|
10
10
|
require 'spackle/stores/base'
|
11
|
-
require 'spackle/stores/
|
11
|
+
require 'spackle/stores/api'
|
12
12
|
require 'spackle/stores/file'
|
13
13
|
require 'spackle/stores/memory'
|
14
14
|
|
@@ -28,7 +28,6 @@ module Spackle
|
|
28
28
|
|
29
29
|
def_delegators :@config, :api_key, :api_key=
|
30
30
|
def_delegators :@config, :api_base, :api_base=
|
31
|
-
def_delegators :@config, :edge_base, :edge_base=
|
32
31
|
def_delegators :@config, :log_level, :log_level=
|
33
32
|
def_delegators :@config, :store, :store=
|
34
33
|
def_delegators :@config, :logger, :logger=
|
data/spackle.gemspec
CHANGED
@@ -2,7 +2,7 @@ $LOAD_PATH.unshift(::File.join(::File.dirname(__FILE__), "lib"))
|
|
2
2
|
|
3
3
|
Gem::Specification.new do |s|
|
4
4
|
s.name = "spackle-ruby"
|
5
|
-
s.version = "0.0.
|
5
|
+
s.version = "0.0.20"
|
6
6
|
s.summary = "Spackle Ruby gem"
|
7
7
|
s.description = "Spackle is the easiest way to integrate your Ruby app with Stripe Billing. " \
|
8
8
|
"See https://www.spackle.so for details."
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: spackle-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.20
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Spackle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2024-03-21 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -125,8 +125,8 @@ files:
|
|
125
125
|
- lib/spackle/customer.rb
|
126
126
|
- lib/spackle/pricing_table.rb
|
127
127
|
- lib/spackle/spackle_configuration.rb
|
128
|
+
- lib/spackle/stores/api.rb
|
128
129
|
- lib/spackle/stores/base.rb
|
129
|
-
- lib/spackle/stores/edge.rb
|
130
130
|
- lib/spackle/stores/file.rb
|
131
131
|
- lib/spackle/stores/memory.rb
|
132
132
|
- lib/spackle/util.rb
|
data/lib/spackle/stores/edge.rb
DELETED
@@ -1,51 +0,0 @@
|
|
1
|
-
require 'faraday'
|
2
|
-
require "faraday/net_http_persistent"
|
3
|
-
require 'json'
|
4
|
-
require 'logger'
|
5
|
-
|
6
|
-
module Spackle
|
7
|
-
class EdgeStore < BaseStore
|
8
|
-
def initialize()
|
9
|
-
@edge = Faraday.new(
|
10
|
-
url: Spackle.edge_base,
|
11
|
-
headers: {
|
12
|
-
'Authorization' => "Bearer #{Spackle.api_key}",
|
13
|
-
'X-Spackle-Schema-Version' => Spackle.version.to_s,
|
14
|
-
}
|
15
|
-
) do |faraday|
|
16
|
-
faraday.adapter :net_http_persistent
|
17
|
-
end
|
18
|
-
|
19
|
-
@api = Faraday.new(
|
20
|
-
url: Spackle.api_base,
|
21
|
-
headers: {
|
22
|
-
'Authorization' => "Bearer #{Spackle.api_key}",
|
23
|
-
'X-Spackle-Schema-Version' => Spackle.version.to_s,
|
24
|
-
}
|
25
|
-
) do |faraday|
|
26
|
-
faraday.adapter :net_http_persistent
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
def get_customer_data(id)
|
31
|
-
response = @edge.get("/customers/#{id}/state")
|
32
|
-
|
33
|
-
if response.status != 200
|
34
|
-
return fetch_state_from_api(id)
|
35
|
-
end
|
36
|
-
|
37
|
-
return JSON.parse(response.body)
|
38
|
-
end
|
39
|
-
|
40
|
-
def fetch_state_from_api(id)
|
41
|
-
Util.log_warn("Customer #{id} not found. Fetching from API...")
|
42
|
-
response = @api.get(Spackle.api_base + "/customers/#{id}/state")
|
43
|
-
|
44
|
-
if response.status != 200
|
45
|
-
raise SpackleError.new "Customer #{id} not found"
|
46
|
-
end
|
47
|
-
|
48
|
-
return JSON.parse(response.body)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|