Brightpearl

The Brightpearl gem allows Ruby developers to access the Brightpearl API resources for instance confidential apps.

The Brightpearl API is implemented as a REST API JSON interface, using various HTTP verbs such as: GET/POST/PUT/PATCH/OPTIONS/DELETE. Each resource, like Order, Product, or Contact, has different operations available.

To read more, follow the link to the official documentation: https://api-docs.brightpearl.com/

Installation

Add this line to your application's Gemfile:

gem 'ruby-brightpearl'

And then execute:

$ bundle install

Or install it yourself as:

$ gem install ruby-brightpearl

Usage

Requirements

All API usage happens through brightpearl applications, created by developers for private usage or for use by other brightpearl site owners:

A brightpearl developer account is required to begin the development of apps, to read more info about the account creation refer to: https://help.brightpearl.com/hc/en-us/articles/211124886-Register-as-a-Brightpearl-developer

Once an account is provided, developers can create applications through the official portal of brightpearl applications: https://developer.brightpearl.com/

Usage

1) Create an app

Using the official portal create a new application, the type must be instance, once the app has been created an "application ID" and "secret" should be provided.

2) Requesting access for a brightpearl account

Start by setting up the initial configuration for the client:

require 'brightpearl'

Brightpearl.config. =      ACCOUNT # Account to request API access
Brightpearl.config.dev_ref =      DEV_REF # From developer account creation

Brightpearl.config.app_ref =      APP_REF # Brightpearl app ID
Brightpearl.config.app_secret =   APP_REF # Brightpearl app secret

Before the API calls can be performed you will need to get a token, to get one the authentication flow must be followed as per brightpearl documentation: https://help.brightpearl.com/hc/en-us/articles/360032240811-Set-up-the-Authorization-Code-Grant-flow

The oauth URL can be then generated with:

Brightpearl::Auth.oauth_url(state: "random-passcode", redirect_uri: "https://www.something.io/oauth") # => "https://oauth.brightpearl.com/authorize/testAccount?response_type=code&client_id=testAppName&redirect_uri=https://www.something.io/oauth&state=random-passcode

NOTE: The state argument on oauth_url method is a string defined by yourself, this should be a non guessable string that the authorization server will pass back to you on redirection which you should check against to prevent CSRF attacks

3) Trading your code for an access token.

The oauth process will redirect to your redirect_uri with a param called code, the value of this parameter is a temporary token that the app can exchange for an access token.

This process be done by:

Brightpearl::Auth.request_token(auth_token: AUTH_TOKEN, redirect_uri: "https://www.something.io/oauth") # => { payload: { "access_token" => "XXX", "refresh_token" => "XYZ", "api_domain" => "ws-use.brightpearl.com" } }

After the token is obtained it can be added to client by setting it on the config:

Brightpearl.config.api_domain = API_DOMAIN # Such as ws-use.brightpearl.com
Brightpearl.config.token = TOKEN
Brightpearl.config.refresh_token = REFRESH_TOKEN

NOTES:

  • The token has a expiration time, when the token has expired a new one can be obtained using a refresh token.
  • The redirect_uri used on request_token should be the same used on oauth_url

3A) Using the refresh token to get a new access token

When the token has expired, the use_refresh_token method can be used:

Brightpearl::Auth.use_refresh_token(refresh_token: "XXX")
# If refresh_token is loaded on config just call the method
Brightpearl::Auth.use_refresh_token()

The return value is the same as request_token, additionally by default the new token and refresh_token are loaded on Brightpearl.config, if for some reason this is undesired it can be turned off by calling the method as Brightpearl::Auth.use_refresh_token(autoupdate: false)

#### 4) Making requests Responses to REST requests are parsed into a hash with the keys :payload with the actual response from brightpearl API and :quota_remaining with the value of the current quota.

NOTE: Search operations returns a Ruby object for the resource as well for easier access to the attributes, this is returned in the :records key on the result.

result = Brightpearl::Order.get(1)

order = result[:payload]["response"].first
puts order["id"] # => 1
puts order["orderTypeCode"] # => "SO"

Brightpearl API allows for multiple items to be requested at once on most resources:

product_ids = [1, 2, 3]
result = Brightpearl::Product.get(product_ids.join(","))
puts result[:payload]["response"].size # => 3

NOTE: For more information about brightpearl API syntax refer to: https://help.brightpearl.com/hc/en-us/articles/212645003-URI-syntax

Development

After checking out the repo, run bin/setup to install dependencies. Then, run rake spec to run the tests. You can also run bin/console for an interactive prompt that will allow you to experiment.

To install this gem onto your local machine, run bundle exec rake install. To release a new version, update the version number in version.rb, and then run bundle exec rake release, which will create a git tag for the version, push git commits and the created tag, and push the .gem file to rubygems.org.

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/ruby-brightpearl. This project is intended to be a safe, welcoming space for collaboration, and contributors are expected to adhere to the code of conduct.

License

The gem is available as open source under the terms of the MIT License.

Code of Conduct

Everyone interacting in the Brightpearl project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the code of conduct.