Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add thread safe method of querying BigCommerce resources. #123

Merged
merged 1 commit into from
Jun 24, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 13 additions & 3 deletions .rubocop.yml
Original file line number Diff line number Diff line change
@@ -1,9 +1,19 @@
Metrics/LineLength:
Max: 120
AllCops:
Exclude:
- spec/**/*
- .bundle/**/*
- bin/**/*
- vendor/**/*
inherit_from: .rubocop_todo.yml

Metrics/LineLength:
Max: 120

Metrics/AbcSize:
Max: 25

Metrics/MethodLength:
CountComments: false
Max: 25

Style/Documentation:
Enabled: false
20 changes: 0 additions & 20 deletions .rubocop_todo.yml

This file was deleted.

1 change: 1 addition & 0 deletions bigcommerce.gemspec
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ require 'bigcommerce/version'
Gem::Specification.new do |s|
s.name = 'bigcommerce'
s.version = Bigcommerce::VERSION
s.platform = Gem::Platform::RUBY
s.required_ruby_version = '>= 2.0.0'
s.license = 'MIT'

Expand Down
1 change: 0 additions & 1 deletion examples/configuration/legacy_auth.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,4 +9,3 @@
end

puts Bigcommerce::System.time
puts Bigcommerce.api_limit
37 changes: 4 additions & 33 deletions lib/bigcommerce.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
require 'hashie'
require 'faraday_middleware'
require 'bigcommerce/version'
require 'bigcommerce/config'
require 'bigcommerce/connection'
require 'bigcommerce/middleware/auth'
require 'bigcommerce/middleware/http_exception'
require 'bigcommerce/resources/resource'
Expand All @@ -9,43 +11,12 @@ module Bigcommerce
resources = File.join(File.dirname(__FILE__), 'bigcommerce', 'resources', '**', '*.rb')
Dir.glob(resources, &method(:require))

DEFAULTS = {
base_url: 'https://api.bigcommerce.com'
}.freeze

HEADERS = {
'accept' => 'application/json',
'content-type' => 'application/json',
'user-agent' => 'bigcommerce-api-ruby'
}.freeze

class << self
attr_reader :api
attr_accessor :api_limit

def configure
config = Hashie::Mash.new
yield(config)
ssl_options = config.ssl if config.auth == 'legacy'

@api = Faraday.new(url: build_url(config), ssl: ssl_options) do |conn|
conn.request :json
conn.headers = HEADERS
if config.auth == 'legacy'
conn.use Faraday::Request::BasicAuthentication, config.username, config.api_key
else
conn.use Bigcommerce::Middleware::Auth, config
end
conn.use Bigcommerce::Middleware::HttpException
conn.adapter Faraday.default_adapter
end
end

def build_url(config)
return config.url if config.auth == 'legacy'

base = ENV['BC_API_ENDPOINT'].nil? ? DEFAULTS[:base_url] : ENV['BC_API_ENDPOINT']
"#{base}/stores/#{config.store_hash}/v2"
@config = Bigcommerce::Config.new.tap { |h| yield(h) }
@api = Bigcommerce::Connection.build(@config)
end
end
end
14 changes: 14 additions & 0 deletions lib/bigcommerce/config.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
module Bigcommerce
class Config < Hashie::Mash
DEFAULTS = {
base_url: 'https://api.bigcommerce.com'
}.freeze

def api_url
return url if auth == 'legacy'

base = ENV['BC_API_ENDPOINT'].to_s.empty? ? DEFAULTS[:base_url] : ENV['BC_API_ENDPOINT']
"#{base}/stores/#{store_hash}/v2"
end
end
end
24 changes: 24 additions & 0 deletions lib/bigcommerce/connection.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
module Bigcommerce
module Connection
HEADERS = {
'accept' => 'application/json',
'content-type' => 'application/json',
'user-agent' => 'bigcommerce-api-ruby'
}.freeze

def self.build(config)
ssl_options = config.ssl if config.auth == 'legacy'
Faraday.new(url: config.api_url, ssl: ssl_options) do |conn|
conn.request :json
conn.headers = HEADERS
if config.auth == 'legacy'
conn.use Faraday::Request::BasicAuthentication, config.username, config.api_key
else
conn.use Bigcommerce::Middleware::Auth, config
end
conn.use Bigcommerce::Middleware::HttpException
conn.adapter Faraday.default_adapter
end
end
end
end
17 changes: 8 additions & 9 deletions lib/bigcommerce/request.rb
Original file line number Diff line number Diff line change
Expand Up @@ -43,30 +43,29 @@ def included(base)
end

module ClassMethods
def get(path, params = nil)
def get(path, params = {})
response = raw_request(:get, path, params)
build_response_object response
end

def delete(path)
response = raw_request(:delete, path)
def delete(path, params = {})
response = raw_request(:delete, path, params)
response.body
end

def post(path, params)
def post(path, params = {})
response = raw_request(:post, path, params)
build_response_object response
end

def put(path, params)
def put(path, params = {})
response = raw_request(:put, path, params)
build_response_object response
end

def raw_request(method, path, params = nil)
response = Bigcommerce.api.send(method, path.to_s, params)
Bigcommerce.api_limit = response.headers['X-BC-ApiLimit-Remaining']
response
def raw_request(method, path, params = {})
client = params.delete(:connection) || Bigcommerce.api
client.send(method, path.to_s, params)
end

private
Expand Down
16 changes: 8 additions & 8 deletions lib/bigcommerce/resource_actions.rb
Original file line number Diff line number Diff line change
Expand Up @@ -24,27 +24,27 @@ def all(params = {})
get path.build, params
end

def find(resource_id)
def find(resource_id, params = {})
raise ArgumentError if resource_id.nil?
get path.build(resource_id)
get path.build(resource_id), params
end

def create(params)
def create(params = {})
post path.build, params
end

def update(resource_id, params)
def update(resource_id, params = {})
raise ArgumentError if resource_id.nil?
put path.build(resource_id), params
end

def destroy(resource_id)
def destroy(resource_id, params = {})
raise ArgumentError if resource_id.nil?
delete path.build(resource_id)
delete path.build(resource_id), params
end

def destroy_all
delete path.build
def destroy_all(params = {})
delete path.build, params
end
end
end
Expand Down
4 changes: 2 additions & 2 deletions lib/bigcommerce/resources/content/blog_post.rb
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,8 @@ class BlogPost < Resource
property :thumbnail_path
property :count

def self.count
get 'blog/posts/count'
def self.count(params = {})
get 'blog/posts/count', params
end
end
end
4 changes: 2 additions & 2 deletions lib/bigcommerce/resources/content/blog_tag.rb
Original file line number Diff line number Diff line change
Expand Up @@ -9,8 +9,8 @@ class BlogTag < Resource
property :tag
property :post_ids

def self.all
get path.build
def self.all(params = {})
get path.build, params
end
end
end
4 changes: 2 additions & 2 deletions lib/bigcommerce/resources/content/redirect.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ class Redirect < Resource
property :forward
property :url

def self.count
get 'redirects/count'
def self.count(params = {})
get 'redirects/count', params
end
end
end
4 changes: 2 additions & 2 deletions lib/bigcommerce/resources/customers/customer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ class Customer < Resource
property :addresses
property :tax_exempt_category

def self.count
get 'customers/count'
def self.count(params = {})
get 'customers/count', params
end
end
end
8 changes: 4 additions & 4 deletions lib/bigcommerce/resources/customers/customer_address.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,12 +23,12 @@ class CustomerAddress < Resource
property :country_iso2
property :phone

def self.count_all
get 'customers/addresses/count'
def self.count_all(params = {})
get 'customers/addresses/count', params
end

def self.count(customer_id)
get "customers/#{customer_id}/addresses/count"
def self.count(customer_id, params = {})
get "customers/#{customer_id}/addresses/count", params
end
end
end
4 changes: 2 additions & 2 deletions lib/bigcommerce/resources/customers/customer_group.rb
Original file line number Diff line number Diff line change
Expand Up @@ -14,8 +14,8 @@ class CustomerGroup < Resource
property :category_access
property :discount_rules

def self.count
get 'customer_groups/count'
def self.count(params = {})
get 'customer_groups/count', params
end
end
end
4 changes: 2 additions & 2 deletions lib/bigcommerce/resources/geography/country.rb
Original file line number Diff line number Diff line change
Expand Up @@ -16,8 +16,8 @@ class Country < Resource
property :country_iso3
property :states

def self.count
get 'countries/count'
def self.count(params = {})
get 'countries/count', params
end
end
end
8 changes: 4 additions & 4 deletions lib/bigcommerce/resources/geography/state.rb
Original file line number Diff line number Diff line change
Expand Up @@ -15,12 +15,12 @@ class State < Resource
property :state_abbreviation
property :country_id

def self.count(country_id)
get "countries/#{country_id}/states/count"
def self.count(country_id, params = {})
get "countries/#{country_id}/states/count", params
end

def self.count_all
get 'countries/states/count'
def self.count_all(params = {})
get 'countries/states/count', params
end
end
end
4 changes: 2 additions & 2 deletions lib/bigcommerce/resources/marketing/coupon.rb
Original file line number Diff line number Diff line change
Expand Up @@ -23,8 +23,8 @@ class Coupon < Resource
property :restricted_to
property :shipping_methods

def self.count
get 'coupons/count'
def self.count(params = {})
get 'coupons/count', params
end
end
end
2 changes: 1 addition & 1 deletion lib/bigcommerce/resources/marketing/gift_certificates.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Gift Certificates
# Code that can be applied by customers to their order to provide full or partial payment.
# No URL at this time
# https://developer.bigcommerce.com/api/stores/v2/gift_certificates

module Bigcommerce
class GiftCertificates < Resource
Expand Down
8 changes: 4 additions & 4 deletions lib/bigcommerce/resources/orders/order_product.rb
Original file line number Diff line number Diff line change
Expand Up @@ -54,12 +54,12 @@ class OrderProduct < Resource
property :parent_order_product_id
property :count

def self.count(order_id)
get "orders/#{order_id}/products/count"
def self.count(order_id, params = {})
get "orders/#{order_id}/products/count", params
end

def self.count_all
get 'orders/products/count'
def self.count_all(params = {})
get 'orders/products/count', params
end
end
end
8 changes: 4 additions & 4 deletions lib/bigcommerce/resources/orders/order_shipping_address.rb
Original file line number Diff line number Diff line change
Expand Up @@ -40,12 +40,12 @@ class OrderShippingAddress < Resource
property :handling_cost_tax_class_id
property :count

def self.count(order_id)
get "orders/#{order_id}/shipping_addresses/count"
def self.count(order_id, params = {})
get "orders/#{order_id}/shipping_addresses/count", params
end

def self.count_all
get 'orders/shipping_addresses/count'
def self.count_all(params = {})
get 'orders/shipping_addresses/count', params
end
end
end
8 changes: 4 additions & 4 deletions lib/bigcommerce/resources/orders/shipment.rb
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,12 @@ class Shipment < Resource
property :shipping_provider
property :count

def self.count(order_id)
get "orders/#{order_id}/shipments/count"
def self.count(order_id, params = {})
get "orders/#{order_id}/shipments/count", params
end

def self.count_all
get 'orders/shipments/count'
def self.count_all(params = {})
get 'orders/shipments/count', params
end
end
end
Loading