spackle-ruby 0.0.1 → 0.0.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: da95d997ac3fdc1de27078762389d267be3d9ff4a89091147eef7d8067a71fd1
4
- data.tar.gz: 064c9007ff68c9f51003c49b31ff467595511acc876dd90cd5916ab5ea9d2c2d
3
+ metadata.gz: d27b263b4e2980ec835c98ddecf665742d566c746ac6e992b0b6c92a7c182bfa
4
+ data.tar.gz: 566c2461defd89631a9c514b44284718e218065ca6bb6b6ff04a558fe750ea23
5
5
  SHA512:
6
- metadata.gz: c70087975948d0a24ae44f79ade37f0f821035e1503576992ed82b71dc81733547e22d87106f38e8bed5b48265194402f8f50b0d1968b5d05f41792e7196c6a6
7
- data.tar.gz: 1b60e61ecca69ce71662c9a95a1d6b45ef24a4fac3d5469fcf4c21ab74818a63386adfa8bd6d14564016454874d38d1f2013881859dbd55a73a725497210076f
6
+ metadata.gz: a13b6955dddbe47c3c7385f657fb0d2a184c9decb18cd4ce3fdffdb9cf30cb00def4d354c1652f4e6b997467345d64d34f62d07076dc0d4505f102a61cd0e837
7
+ data.tar.gz: bad22643c179c73f4b87ecab410c86f2e33264e58dc61ef677f7ca1e67ae5eb2437e1f5e8e17f0a95599ab8fc9cbb4ba3dddd6f337fce86bb1f422baffe44053
data/README.md CHANGED
@@ -21,7 +21,7 @@ gem install spackle-ruby
21
21
  ```ruby
22
22
  source 'https://rubygems.org'
23
23
 
24
- gem 'spackle'
24
+ gem 'spackle-ruby'
25
25
  ```
26
26
 
27
27
  ### Configure your environment
@@ -4,35 +4,58 @@ module Spackle
4
4
 
5
5
  def self.retrieve(id)
6
6
  Util.log_debug("Retrieving customer data for #{id}")
7
- data = Spackle.client.get_item({
8
- 'CustomerId' => id
7
+ data = Spackle.client.query({
8
+ key_condition_expression: 'CustomerId = :customer_id',
9
+ filter_expression: 'Version = :version',
10
+ expression_attribute_values: {
11
+ ':customer_id' => id,
12
+ ':version' => Spackle.version
13
+ },
14
+ limit: 1
9
15
  })
16
+
17
+ if not data.items.any?
18
+ raise SpackleError.new "Customer #{id} not found"
19
+ end
20
+
10
21
  Util.log_debug("Retrieved customer data for #{id}: #{data}")
11
- Customer.new(data)
22
+ Customer.new(JSON.parse(data.items[0]['State']))
12
23
  end
13
24
 
14
25
  def initialize(data)
15
26
  @data = data
16
27
  end
17
28
 
29
+ def features
30
+ return @data['features']
31
+ end
32
+
33
+ def flag_features
34
+ features.select { |f| f['type'] == 0 }
35
+ end
36
+
37
+ def limit_features
38
+ features.select { |f| f['type'] == 1 }
39
+ end
40
+
18
41
  def enabled(key)
19
- @data['features'].each do |f|
42
+ flag_features.each do |f|
20
43
  if f['key'] == key
21
44
  return f['value_flag']
22
45
  end
23
46
  end
24
47
 
25
- return false
48
+ raise SpackleError.new "Flag feature #{key} not found"
26
49
  end
27
50
 
28
51
  def limit(key)
29
52
  @data['features'].each do |f|
30
53
  if f['key'] == key
31
- return f['value_limit']
54
+ return f['value_limit'] || Float::INFINITY
32
55
  end
33
56
  end
34
57
 
35
- return 0
58
+ raise SpackleError.new "Limit feature #{key} not found"
36
59
  end
37
60
  end
38
61
  end
@@ -7,7 +7,6 @@ module Spackle
7
7
  @client = nil
8
8
  @identity_id = nil
9
9
  @table_name = nil
10
- @aws_region = nil
11
10
 
12
11
  def initialize
13
12
  @client = bootstrap_client
@@ -26,8 +25,16 @@ module Spackle
26
25
  JSON.parse(response.item['State'])
27
26
  end
28
27
 
29
- private
28
+ def query(query)
29
+ query[:table_name] = @table_name
30
+ query[:key_condition_expression] = 'AccountId = :account_id AND ' + query[:key_condition_expression]
31
+ query[:expression_attribute_values] = query[:expression_attribute_values].merge({
32
+ ':account_id' => @identity_id
33
+ })
34
+ response = @client.query(query)
35
+ end
30
36
 
37
+ private
31
38
 
32
39
  def bootstrap_client
33
40
  Util.log_debug('Bootstrapping DynamoDB client...')
@@ -44,7 +51,6 @@ module Spackle
44
51
 
45
52
  @identity_id = data['identity_id']
46
53
  @table_name = data['table_name']
47
- @aws_region = data['aws_region']
48
54
 
49
55
  credentials = SpackleCredentials.new(
50
56
  data['role_arn'],
@@ -52,7 +58,6 @@ module Spackle
52
58
  )
53
59
 
54
60
  Aws::DynamoDB::Client.new(
55
- region: @aws_region,
56
61
  credentials: credentials,
57
62
  )
58
63
  end
@@ -6,11 +6,13 @@ module Spackle
6
6
  attr_accessor :api_base
7
7
  attr_accessor :log_level
8
8
  attr_reader :logger
9
+ attr_reader :version
9
10
 
10
11
  def initialize
11
12
  @api_base = 'https://api.spackle.so'
12
13
  @log_level = Logger::INFO
13
14
  @logger = Logger.new(STDOUT, level: @log_level)
15
+ @version = 1
14
16
  end
15
17
 
16
18
  def log_level=(level)
data/lib/spackle.rb CHANGED
@@ -23,6 +23,7 @@ module Spackle
23
23
  def_delegators :@config, :api_base, :api_base=
24
24
  def_delegators :@config, :log_level, :log_level=
25
25
  def_delegators :@config, :logger, :logger=
26
+ def_delegators :@config, :version, :version=
26
27
  end
27
28
 
28
29
  def self.client
@@ -35,6 +36,9 @@ module Spackle
35
36
  self.client
36
37
  nil
37
38
  end
39
+
40
+ class SpackleError < StandardError
41
+ end
38
42
  end
39
43
 
40
44
  Spackle.log_level = ENV["SPACKLE_LOG"] unless ENV["SPACKLE_LOG"].nil?
data/spackle.gemspec CHANGED
@@ -2,9 +2,9 @@ $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.1"
5
+ s.version = "0.0.2"
6
6
  s.summary = "Spackle Ruby gem"
7
- s.description = "Spackle is the easiest way to integrate your Ruby app with Stripe Billing." \
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."
9
9
  s.authors = ["Spackle"]
10
10
  s.email = "support@spackle.so"
metadata CHANGED
@@ -1,17 +1,17 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: spackle-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Spackle
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-01-08 00:00:00.000000000 Z
11
+ date: 2023-01-21 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Spackle is the easiest way to integrate your Ruby app with Stripe Billing.See
14
- https://www.spackle.so for details.
13
+ description: Spackle is the easiest way to integrate your Ruby app with Stripe Billing.
14
+ See https://www.spackle.so for details.
15
15
  email: support@spackle.so
16
16
  executables:
17
17
  - spackle-console