shopify_api_rate_limiter 0.0.1

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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: e2804a85d4d550041386b466d6afd473490a403d
4
+ data.tar.gz: 69d21214df61574234c0b413af972a8f69cfadbe
5
+ SHA512:
6
+ metadata.gz: 9d34ff220e9d9edf3358f30bf369818a8b3e5d52a1061401210fab0dce6d8e7ae8b76bcd1132f790f7de283bb3574e36e46fa25bf16bc957621ff0b8777838f2
7
+ data.tar.gz: ecab6cadfb5316739f17d8174bcb8147f0f697216cca9695709176654c891df661be1e467a869313f3f903e3c7d38714ee2192970c08a7243e86626f642e06a3
data/.gitignore ADDED
@@ -0,0 +1,12 @@
1
+ .DS_Store
2
+ coverage
3
+ rdoc
4
+ doc
5
+ pkg
6
+ .ruby-version
7
+ *.lock
8
+ .idea
9
+ .dev/
10
+ pkg/*
11
+ *.gem
12
+ .bundle
data/Gemfile ADDED
@@ -0,0 +1,3 @@
1
+ source :rubygems
2
+
3
+ gemspec
data/README.md ADDED
@@ -0,0 +1,7 @@
1
+ # shopify_api_rate_limiter
2
+ A rate limiter for ActiveResource that adheres to Shopify's API limits.
3
+
4
+ ## Usage
5
+ ```
6
+ gem install shopify_api_rate_limiter
7
+ ```
data/Rakefile ADDED
@@ -0,0 +1,2 @@
1
+ require 'bundler'
2
+ Bundler::GemHelper.install_tasks
@@ -0,0 +1,20 @@
1
+ module ShopifyApiRateLimiter
2
+ class << self
3
+ attr_accessor :logger
4
+ end
5
+
6
+ class Railties < ::Rails::Railtie
7
+ initializer 'Rails logger' do
8
+ ShopifyApiRateLimiter.logger = Rails.logger
9
+ end
10
+ end
11
+
12
+ if defined?(Rails)
13
+ require 'shopify_api_rate_limiter/active_resource/connection'
14
+ require 'shopify_api_rate_limiter/throttled_connection'
15
+ require 'shopify_api_rate_limiter/engine'
16
+ else
17
+ require 'shopify_api_rate_limiter/active_resource/connection'
18
+ require 'shopify_api_rate_limiter/throttled_connection'
19
+ end
20
+ end
@@ -0,0 +1,7 @@
1
+ require 'shopify_api_rate_limiter/throttled_connection'
2
+
3
+ module ActiveResource
4
+ class Connection
5
+ prepend ShopifyApiRateLimiter::ThrottledConnection
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ module ShopifyApiRateLimiter
2
+ class Engine < ::Rails::Engine
3
+ config.autoload_paths += Dir["#{config.root}/lib/**/"]
4
+ end
5
+ end
@@ -0,0 +1,30 @@
1
+ module ShopifyApiRateLimiter
2
+ module ThrottledConnection
3
+ SHOPIFY_SLEEP_TIME = 0.5
4
+
5
+ def request(method, path, *arguments)
6
+ if self === ShopifyAPI::Base.connection
7
+ if ShopifyAPI::Base.connection.response && ShopifyAPI.credit_maxed?
8
+ ShopifyApiRateLimiter.logger.info "Shopify rate limit credit maxed. Sleeping #{SHOPIFY_SLEEP_TIME}..."
9
+ sleep(SHOPIFY_SLEEP_TIME)
10
+ end
11
+ begin
12
+ super
13
+ rescue ActiveResource::ConnectionError => ex
14
+ if ex.response.code.to_s == '429'
15
+ ShopifyApiRateLimiter.logger.info "Shopify returned 429 (Rate Limit Exceeded). Sleeping #{SHOPIFY_SLEEP_TIME}..."
16
+ sleep(SHOPIFY_SLEEP_TIME)
17
+ retry
18
+ else
19
+ raise ex
20
+ end
21
+ end
22
+ else
23
+ super
24
+ end
25
+ rescue ShopifyAPI::Limits::LimitUnavailable => limit_unavailable
26
+ # Either Shopify API stopped sending the limit header, or we're in a stubby test
27
+ super
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,3 @@
1
+ module ShopifyApiRateLimiter
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,22 @@
1
+ # -*- encoding: utf-8 -*-
2
+ require File.expand_path("../lib/shopify_api_rate_limiter/version", __FILE__)
3
+
4
+ Gem::Specification.new do |s|
5
+ s.name = 'shopify_api_rate_limiter'
6
+ s.version = ShopifyApiRateLimiter::VERSION
7
+ s.date = '2017-01-11'
8
+ s.platform = Gem::Platform::RUBY
9
+ s.summary = "Rate limits API requests to the Shopify API."
10
+ s.description = "A simple (hacky) solution for rate limiting API requests to the Shopify API."
11
+ s.authors = ["Jason Buehler"]
12
+ s.email = 'jason.c.buehler@gmail.com'
13
+ s.files = `git ls-files`.split("\n")
14
+
15
+ s.homepage = 'http://rubygems.org/gems/shopify_api_rate_limiter'
16
+ s.license = 'MIT'
17
+
18
+ s.add_runtime_dependency "shopify_api", ">= 1.2.2"
19
+ s.add_development_dependency "shopify_api", ">= 1.2.2"
20
+ s.add_development_dependency "bundler", ">= 1.0.0"
21
+ s.require_path = 'lib'
22
+ end
metadata ADDED
@@ -0,0 +1,96 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: shopify_api_rate_limiter
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ platform: ruby
6
+ authors:
7
+ - Jason Buehler
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2017-01-11 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: shopify_api
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: 1.2.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: 1.2.2
27
+ - !ruby/object:Gem::Dependency
28
+ name: shopify_api
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.2.2
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.2.2
41
+ - !ruby/object:Gem::Dependency
42
+ name: bundler
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: 1.0.0
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ">="
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ description: A simple (hacky) solution for rate limiting API requests to the Shopify
56
+ API.
57
+ email: jason.c.buehler@gmail.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - ".gitignore"
63
+ - Gemfile
64
+ - README.md
65
+ - Rakefile
66
+ - lib/shopify_api_rate_limiter.rb
67
+ - lib/shopify_api_rate_limiter/active_resource/connection.rb
68
+ - lib/shopify_api_rate_limiter/engine.rb
69
+ - lib/shopify_api_rate_limiter/throttled_connection.rb
70
+ - lib/shopify_api_rate_limiter/version.rb
71
+ - shopify_api_rate_limiter.gemspec
72
+ homepage: http://rubygems.org/gems/shopify_api_rate_limiter
73
+ licenses:
74
+ - MIT
75
+ metadata: {}
76
+ post_install_message:
77
+ rdoc_options: []
78
+ require_paths:
79
+ - lib
80
+ required_ruby_version: !ruby/object:Gem::Requirement
81
+ requirements:
82
+ - - ">="
83
+ - !ruby/object:Gem::Version
84
+ version: '0'
85
+ required_rubygems_version: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - ">="
88
+ - !ruby/object:Gem::Version
89
+ version: '0'
90
+ requirements: []
91
+ rubyforge_project:
92
+ rubygems_version: 2.5.1
93
+ signing_key:
94
+ specification_version: 4
95
+ summary: Rate limits API requests to the Shopify API.
96
+ test_files: []