lightspeed_ruby 0.1.8 → 0.1.9

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 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