lightspeed_ruby 0.1.8 → 0.1.9

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
  SHA1:
3
- metadata.gz: 1c8f09a2f9d45e65208c617efe27a6e7b3f4b23d
4
- data.tar.gz: 2e728c4ff040d9bd4b69ab7dd4fa6bb81262c50e
3
+ metadata.gz: b9cee427c44e3a97df29a3fdaf4209bdfcc00daa
4
+ data.tar.gz: 742e83a6c3d50913075bbd939f02f843b5f89c19
5
5
  SHA512:
6
- metadata.gz: c948b41df45a51f99b2a87b7db70ad899ffdac5789e079a199c82f379328dfaf572f0eae9e477dbfd8cd9719adebff5bfa964241f9702f3718d9163e5d1b34a1
7
- data.tar.gz: 1595326fa3caeaadcb47b04d4433d1145442e4ccb45319eee072c290c44b7a073f5452ef26320cce9216c8d8ff77cb316982709b424b46529109a2d5480ad5b6
6
+ metadata.gz: dee56f0f7a79fa8d002591935debcdf19ed7a1c8dfa56da3aa10eeff7a3e9f6a8c64080172ad1fd82df8bf03a415e06b5acb4fdcbb980892a151241cd7c841c8
7
+ data.tar.gz: ecb8fc57d401871aff0bc76180921e9a29c0fe629c0c6b34c9e09487185f8a7f3a74d6009f95054c96eee7d7b5e7231af3829e5d63b3ea6ea06323de4f8bd4a6
@@ -1,3 +1,4 @@
1
+ require "lightspeed/configuration"
1
2
  require "lightspeed/api/tokens"
2
3
  require "lightspeed/api/accounts"
3
4
  require "lightspeed/api/sales"
@@ -6,6 +7,14 @@ require "lightspeed/api/items"
6
7
  require "lightspeed/api/categories"
7
8
 
8
9
  module Lightspeed
10
+ def self.configuration
11
+ @_configuration ||= Configuration.new
12
+ end
13
+
14
+ def self.configure
15
+ yield configuration
16
+ end
17
+
9
18
  class Client
10
19
  API_BASE = "https://api.merchantos.com/API/"
11
20
 
@@ -15,25 +24,34 @@ module Lightspeed
15
24
  API::Tokens.new(client_id, client_secret, refresh_token)
16
25
  end
17
26
 
18
- def initialize(access_token:, account_id:)
27
+ def initialize(access_token:, account_id:, configuration:)
19
28
  @access_token = access_token
20
29
  @account_id = account_id
30
+ @configuration = configuration
21
31
  end
22
32
 
23
33
  def get(url, params: {}, relations: [])
24
- conn.get(url, params.merge(load_relations: "[#{relation_names(relations)}]"))
34
+ response = conn.get(url, params.merge(load_relations: "[#{relation_names(relations)}]"))
35
+ rate_limit_wait(response)
36
+ response
25
37
  end
26
38
 
27
39
  def post(url, body: {})
28
- conn.post(url, body)
40
+ response = conn.post(url, body)
41
+ rate_limit_wait(response)
42
+ response
29
43
  end
30
44
 
31
45
  def delete(url)
32
- conn.delete(url)
46
+ response = conn.delete(url)
47
+ rate_limit_wait(response)
48
+ response
33
49
  end
34
50
 
35
51
  def put(url, body: {})
36
- conn.put(url, body)
52
+ response = conn.put(url, body)
53
+ rate_limit_wait(response)
54
+ response
37
55
  end
38
56
 
39
57
  def accounts; API::Accounts.new(self); end
@@ -44,6 +62,8 @@ module Lightspeed
44
62
 
45
63
  private
46
64
 
65
+ attr_reader :configuration
66
+
47
67
  def conn
48
68
  @conn ||= Faraday.new(API_BASE) do |f|
49
69
  f.authorization :Bearer, access_token if access_token
@@ -58,5 +78,19 @@ module Lightspeed
58
78
  "\"#{relation.to_s.camelize}\""
59
79
  end.join(",")
60
80
  end
81
+
82
+ def rate_limit_wait(response, points_expense: 10, points_threshold_percentage: 0.5)
83
+ return unless Lightspeed.configuration.rate_limit || configuration.rate_limit
84
+
85
+ bucket_level, bucket_limit = response.headers["x-ls-api-bucket-level"].split("/").map(&:to_f)
86
+ drip_level = response.headers["x-ls-api-drip-rate"].to_f
87
+ threshold = bucket_limit * points_threshold_percentage
88
+
89
+ return if bucket_level + points_expense <= threshold
90
+
91
+ points_over = bucket_level + points_expense - threshold
92
+ wait_for_points = points_over / drip_level
93
+ sleep(wait_for_points)
94
+ end
61
95
  end
62
96
  end
@@ -0,0 +1,9 @@
1
+ module Lightspeed
2
+ class Configuration
3
+ attr_accessor :rate_limit
4
+
5
+ def initialize(rate_limit: nil)
6
+ @rate_limit = rate_limit || false
7
+ end
8
+ end
9
+ end
@@ -1,3 +1,3 @@
1
1
  module Lightspeed
2
- VERSION = "0.1.8"
2
+ VERSION = "0.1.9"
3
3
  end
data/lightspeed.gemspec CHANGED
@@ -24,6 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.add_development_dependency "bundler", "~> 1.14"
25
25
  spec.add_development_dependency "rake", "~> 10.0"
26
26
  spec.add_development_dependency "minitest", "~> 5.0"
27
+ spec.add_development_dependency "webmock", "~> 3.1.1"
27
28
 
28
29
  spec.add_dependency "faraday", "~> 0.12"
29
30
  spec.add_dependency "faraday_middleware", "~> 0.11"
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: lightspeed_ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.8
4
+ version: 0.1.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zamith
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-09-27 00:00:00.000000000 Z
11
+ date: 2017-12-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
54
  version: '5.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: webmock
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 3.1.1
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 3.1.1
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: faraday
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -107,6 +121,7 @@ files:
107
121
  - lib/lightspeed/api/sales/sale_lines.rb
108
122
  - lib/lightspeed/api/tokens.rb
109
123
  - lib/lightspeed/client.rb
124
+ - lib/lightspeed/configuration.rb
110
125
  - lib/lightspeed/errors/missing_refresh_token.rb
111
126
  - lib/lightspeed/version.rb
112
127
  - lightspeed.gemspec