spackle-ruby 0.0.11 → 0.0.13
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/Gemfile +0 -1
- data/lib/spackle/spackle_configuration.rb +3 -1
- data/lib/spackle/stores/edge.rb +46 -0
- data/lib/spackle.rb +2 -5
- data/spackle.gemspec +1 -2
- metadata +7 -21
- data/lib/spackle/stores/dynamodb.rb +0 -108
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: a9db8095ffa764bd7168fd58dd693be699a3935bfec20f94b47083f48ac7c6c3
|
|
4
|
+
data.tar.gz: f9c1ac487e16061759e4c617e49f7962567f32fd0559b5917b9de106c53af9fd
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c9551e7c797ad58938d4de81dc5aca6016cf344b72fdca62a2d24f90d7124ff5d02c5497ebdcd77fbd13a8ba6c9abbeff0edfe365ff7196b07541de8be2e6806
|
|
7
|
+
data.tar.gz: 37408f32c5a15421157b4ab3987cf7b01eda0c341136e33772890476549a76df1694a157a5c71901b0ec23bf627ab7d86b644bf947f13dbfe21fe4e4197e706e
|
data/Gemfile
CHANGED
|
@@ -4,11 +4,13 @@ module Spackle
|
|
|
4
4
|
class SpackleConfiguration
|
|
5
5
|
attr_accessor :api_key
|
|
6
6
|
attr_accessor :api_base
|
|
7
|
+
attr_accessor :edge_base
|
|
7
8
|
attr_reader :logger
|
|
8
9
|
attr_reader :version
|
|
9
10
|
|
|
10
11
|
def initialize
|
|
11
12
|
@api_base = 'https://api.spackle.so/v1'
|
|
13
|
+
@edge_base = 'https://us-west-2.edge.spackle.so'
|
|
12
14
|
@log_level = Logger::WARN
|
|
13
15
|
@logger = Logger.new(STDOUT, level: @log_level)
|
|
14
16
|
@version = 1
|
|
@@ -26,7 +28,7 @@ module Spackle
|
|
|
26
28
|
|
|
27
29
|
def store()
|
|
28
30
|
if @store == nil
|
|
29
|
-
@store =
|
|
31
|
+
@store = EdgeStore.new
|
|
30
32
|
end
|
|
31
33
|
@store
|
|
32
34
|
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
require 'net/http'
|
|
2
|
+
require 'json'
|
|
3
|
+
require 'logger'
|
|
4
|
+
|
|
5
|
+
module Spackle
|
|
6
|
+
class EdgeStore < BaseStore
|
|
7
|
+
def initialize()
|
|
8
|
+
edge_uri = URI(Spackle.edge_base)
|
|
9
|
+
@edge_http = Net::HTTP.new(edge_uri.host, edge_uri.port)
|
|
10
|
+
@edge_http.use_ssl = true
|
|
11
|
+
|
|
12
|
+
api_uri = URI(Spackle.api_base)
|
|
13
|
+
@api_http = Net::HTTP.new(api_uri.host, api_uri.port)
|
|
14
|
+
@api_http.use_ssl = true
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def get_customer_data(id)
|
|
18
|
+
request = Net::HTTP::Get.new(Spackle.edge_base + '/customers/' + id + '/state')
|
|
19
|
+
request['Authorization'] = 'Bearer ' + Spackle.api_key
|
|
20
|
+
request['X-Spackle-Schema-Version'] = Spackle.version.to_s
|
|
21
|
+
|
|
22
|
+
response = @edge_http.request(request)
|
|
23
|
+
if response.code != '200'
|
|
24
|
+
return fetch_state_from_api(id)
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
JSON.parse(response.body)
|
|
28
|
+
end
|
|
29
|
+
|
|
30
|
+
def fetch_state_from_api(id)
|
|
31
|
+
Util.log_warn("Customer #{id} not found. Fetching from API...")
|
|
32
|
+
request = Net::HTTP::Get.new(Spackle.api_base + '/customers/' + id + '/state')
|
|
33
|
+
request['Authorization'] = 'Bearer ' + Spackle.api_key
|
|
34
|
+
request['X-Spackle-Schema-Version'] = Spackle.version.to_s
|
|
35
|
+
|
|
36
|
+
response = @api_http.request(request)
|
|
37
|
+
if response.code != '200'
|
|
38
|
+
puts response.code
|
|
39
|
+
puts response.body
|
|
40
|
+
raise SpackleError.new "Customer #{id} not found"
|
|
41
|
+
end
|
|
42
|
+
|
|
43
|
+
JSON.parse(response.body)
|
|
44
|
+
end
|
|
45
|
+
end
|
|
46
|
+
end
|
data/lib/spackle.rb
CHANGED
|
@@ -7,7 +7,7 @@ require 'spackle/util'
|
|
|
7
7
|
require 'spackle/waiters'
|
|
8
8
|
|
|
9
9
|
require 'spackle/stores/base'
|
|
10
|
-
require 'spackle/stores/
|
|
10
|
+
require 'spackle/stores/edge'
|
|
11
11
|
require 'spackle/stores/file'
|
|
12
12
|
require 'spackle/stores/memory'
|
|
13
13
|
|
|
@@ -27,16 +27,13 @@ module Spackle
|
|
|
27
27
|
|
|
28
28
|
def_delegators :@config, :api_key, :api_key=
|
|
29
29
|
def_delegators :@config, :api_base, :api_base=
|
|
30
|
+
def_delegators :@config, :edge_base, :edge_base=
|
|
30
31
|
def_delegators :@config, :log_level, :log_level=
|
|
31
32
|
def_delegators :@config, :store, :store=
|
|
32
33
|
def_delegators :@config, :logger, :logger=
|
|
33
34
|
def_delegators :@config, :version, :version=
|
|
34
35
|
end
|
|
35
36
|
|
|
36
|
-
def self.bootstrap
|
|
37
|
-
Spackle.store
|
|
38
|
-
end
|
|
39
|
-
|
|
40
37
|
class SpackleError < StandardError
|
|
41
38
|
end
|
|
42
39
|
end
|
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.13"
|
|
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."
|
|
@@ -18,7 +18,6 @@ Gem::Specification.new do |s|
|
|
|
18
18
|
"source_code_uri" => "https://github.com/spackleso/spackle-ruby",
|
|
19
19
|
}
|
|
20
20
|
|
|
21
|
-
s.add_dependency "aws-sdk", "~> 3"
|
|
22
21
|
s.add_dependency "nokogiri", "~> 1.13"
|
|
23
22
|
s.add_dependency "stripe", "~> 8.3"
|
|
24
23
|
|
metadata
CHANGED
|
@@ -1,29 +1,15 @@
|
|
|
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.13
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Spackle
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: bin
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date: 2023-
|
|
11
|
+
date: 2023-07-23 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
|
-
- !ruby/object:Gem::Dependency
|
|
14
|
-
name: aws-sdk
|
|
15
|
-
requirement: !ruby/object:Gem::Requirement
|
|
16
|
-
requirements:
|
|
17
|
-
- - "~>"
|
|
18
|
-
- !ruby/object:Gem::Version
|
|
19
|
-
version: '3'
|
|
20
|
-
type: :runtime
|
|
21
|
-
prerelease: false
|
|
22
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
23
|
-
requirements:
|
|
24
|
-
- - "~>"
|
|
25
|
-
- !ruby/object:Gem::Version
|
|
26
|
-
version: '3'
|
|
27
13
|
- !ruby/object:Gem::Dependency
|
|
28
14
|
name: nokogiri
|
|
29
15
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -97,7 +83,7 @@ files:
|
|
|
97
83
|
- lib/spackle/customer.rb
|
|
98
84
|
- lib/spackle/spackle_configuration.rb
|
|
99
85
|
- lib/spackle/stores/base.rb
|
|
100
|
-
- lib/spackle/stores/
|
|
86
|
+
- lib/spackle/stores/edge.rb
|
|
101
87
|
- lib/spackle/stores/file.rb
|
|
102
88
|
- lib/spackle/stores/memory.rb
|
|
103
89
|
- lib/spackle/util.rb
|
|
@@ -112,7 +98,7 @@ metadata:
|
|
|
112
98
|
github_repo: ssh://github.com/spackleso/spackle-ruby
|
|
113
99
|
homepage_uri: https://docs.spackle.so/ruby
|
|
114
100
|
source_code_uri: https://github.com/spackleso/spackle-ruby
|
|
115
|
-
post_install_message:
|
|
101
|
+
post_install_message:
|
|
116
102
|
rdoc_options: []
|
|
117
103
|
require_paths:
|
|
118
104
|
- lib
|
|
@@ -127,8 +113,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
127
113
|
- !ruby/object:Gem::Version
|
|
128
114
|
version: '0'
|
|
129
115
|
requirements: []
|
|
130
|
-
rubygems_version: 3.
|
|
131
|
-
signing_key:
|
|
116
|
+
rubygems_version: 3.4.10
|
|
117
|
+
signing_key:
|
|
132
118
|
specification_version: 4
|
|
133
119
|
summary: Spackle Ruby gem
|
|
134
120
|
test_files: []
|
|
@@ -1,108 +0,0 @@
|
|
|
1
|
-
require 'aws-sdk'
|
|
2
|
-
require 'net/http'
|
|
3
|
-
require 'json'
|
|
4
|
-
require 'logger'
|
|
5
|
-
|
|
6
|
-
module Spackle
|
|
7
|
-
class DynamoDBStore < BaseStore
|
|
8
|
-
@client = nil
|
|
9
|
-
@store_config = {}
|
|
10
|
-
|
|
11
|
-
def initialize(client = nil, store_config = nil)
|
|
12
|
-
@store_config = store_config || {}
|
|
13
|
-
@client = client || bootstrap_client
|
|
14
|
-
end
|
|
15
|
-
|
|
16
|
-
def get_customer_data(id)
|
|
17
|
-
result = get_item(id)
|
|
18
|
-
|
|
19
|
-
if result.nil? or result.item.nil?
|
|
20
|
-
raise SpackleError.new "Customer #{id} not found"
|
|
21
|
-
end
|
|
22
|
-
|
|
23
|
-
JSON.parse(result.item['State'])
|
|
24
|
-
end
|
|
25
|
-
|
|
26
|
-
private
|
|
27
|
-
|
|
28
|
-
def get_item(id)
|
|
29
|
-
return @client.get_item({
|
|
30
|
-
table_name: @store_config['table_name'],
|
|
31
|
-
key: {
|
|
32
|
-
AccountId: @store_config['identity_id'],
|
|
33
|
-
CustomerId: "#{id}:#{Spackle.version}"
|
|
34
|
-
}
|
|
35
|
-
})
|
|
36
|
-
rescue StandardError
|
|
37
|
-
return nil
|
|
38
|
-
end
|
|
39
|
-
|
|
40
|
-
def bootstrap_client
|
|
41
|
-
Util.log_debug('Bootstrapping DynamoDB client...')
|
|
42
|
-
|
|
43
|
-
if Spackle.api_key.nil?
|
|
44
|
-
raise SpackleError.new 'API key not set'
|
|
45
|
-
end
|
|
46
|
-
|
|
47
|
-
uri = URI(Spackle.api_base + '/sessions')
|
|
48
|
-
https = Net::HTTP.new(uri.host, uri.port)
|
|
49
|
-
https.use_ssl = true
|
|
50
|
-
|
|
51
|
-
request = Net::HTTP::Post.new(uri.path)
|
|
52
|
-
request['Authorization'] = 'Bearer ' + Spackle.api_key
|
|
53
|
-
|
|
54
|
-
response = https.request(request)
|
|
55
|
-
data = JSON.parse(response.body)
|
|
56
|
-
Util.log_debug("Created session: #{data}")
|
|
57
|
-
|
|
58
|
-
@store_config = data['adapter']
|
|
59
|
-
credentials = SpackleCredentials.new(
|
|
60
|
-
@store_config['role_arn'],
|
|
61
|
-
@store_config['token'],
|
|
62
|
-
@store_config['region'],
|
|
63
|
-
)
|
|
64
|
-
|
|
65
|
-
Aws::DynamoDB::Client.new(
|
|
66
|
-
region: @store_config['region'],
|
|
67
|
-
credentials: credentials,
|
|
68
|
-
)
|
|
69
|
-
end
|
|
70
|
-
end
|
|
71
|
-
|
|
72
|
-
class SpackleCredentials
|
|
73
|
-
include Aws::CredentialProvider
|
|
74
|
-
include Aws::RefreshingCredentials
|
|
75
|
-
|
|
76
|
-
@region = nil
|
|
77
|
-
@role_arn = nil
|
|
78
|
-
@token = nil
|
|
79
|
-
|
|
80
|
-
def initialize(role_arn, token, region)
|
|
81
|
-
@region = region
|
|
82
|
-
@role_arn = role_arn
|
|
83
|
-
@token = token
|
|
84
|
-
@client = Aws::STS::Client.new(
|
|
85
|
-
region: @region,
|
|
86
|
-
credentials: false,
|
|
87
|
-
)
|
|
88
|
-
super()
|
|
89
|
-
end
|
|
90
|
-
|
|
91
|
-
private
|
|
92
|
-
|
|
93
|
-
def refresh
|
|
94
|
-
Util.log_debug('Refreshing DynamoDB credentials...')
|
|
95
|
-
c = @client.assume_role_with_web_identity({
|
|
96
|
-
role_arn: @role_arn,
|
|
97
|
-
role_session_name: Base64.strict_encode64(SecureRandom.uuid),
|
|
98
|
-
web_identity_token: @token
|
|
99
|
-
}).credentials
|
|
100
|
-
@credentials = Aws::Credentials.new(
|
|
101
|
-
c.access_key_id,
|
|
102
|
-
c.secret_access_key,
|
|
103
|
-
c.session_token
|
|
104
|
-
)
|
|
105
|
-
@expiration = c.expiration
|
|
106
|
-
end
|
|
107
|
-
end
|
|
108
|
-
end
|