BookingsyncPortal
A Rails engine to simplify building BookingSync Portal Applications.
Requirements
This engine requires Rails >= 6.0.0
and Ruby >= 2.7.0
.
Documentation
API documentation is available at rdoc.info.
Installation
BookingSync Portal works with Rails 6.0 onwards and Ruby 2.7 onwards. To get started, add it to your Gemfile with:
gem 'bookingsync_portal'
Then bundle install:
bundle install
Add routes
BookingSync Authorization routes need to be mounted inside you apps routes.rb
:
mount BookingSync::Engine => '/'
This will add the following routes:
/auth/bookingsync/callback
/auth/failure
/signout
as well as BookingSync Portal controllers routes:
mount BookingsyncPortal::Engine => '/'
Migrations
BookingSync Portal provide migrations for the most common models:
-
Account
: BookingSync accounts, -
Connection
: connection betweenrentals
andremote_rentals
, -
Photo
: BookingSync rentals' photos, -
Rate
: BookingSync rentals' rates, -
RemoteAccount
: Portal accounts, -
RemoteRental
: Portal rentals, -
Rental
: BookingSync rentals,
You can copy the migrations file to your application by running:
rake bookingsync_portal:install:migrations
then run the migration:
rake db:migrate
Add initializer and default models
This will install a configuration file in config/initializers/bookingsync_portal.rb
as well as creating default models:
rails g bookingsync_portal:install
Assets
You will need to install the assets for each namespace:
in /app/assets/javascripts/admin/application.js
:
// This is a manifest file that'll be compiled into application.js, which will include all the files
// listed below.
//
// Any JavaScript/Coffee file within this directory, lib/assets/javascripts, vendor/assets/javascripts,
// or vendor/assets/javascripts of plugins, if any, can be referenced here using a relative path.
//
// It's not advisable to add code directly here, but if you do, it'll appear at the bottom of the
// compiled file.
//
// Read Sprockets README (https://github.com/sstephenson/sprockets#sprockets-directives) for details
// about supported directives.
//
//= require bookingsync_portal/admin/application
//= require_tree .
in /app/assets/javascripts/admin/application.css.scss
:
/*
* This is a manifest file that'll be compiled into application.css, which will include all the files
* listed below.
*
* Any CSS and SCSS file within this directory, lib/assets/stylesheets, vendor/assets/stylesheets,
* or vendor/assets/stylesheets of plugins, if any, can be referenced here using a relative path.
*
* You're free to add application-wide styles to this file and they'll appear at the bottom of the
* compiled file so the styles you add here take precedence over styles defined in any styles
* defined in the other CSS/SCSS files in this directory. It is generally better to create a new
* file per style scope.
*
*= require bookingsync_portal/admin/application
*= require_self
*/
Note: When saving new token, this gem uses a separate thread with new db connection to ensure token save (in case of a rollback in the main transaction). To make room for the new connections, it is recommended to increase db pool
size by 2-3.
Configuration
The engine is configured by the following ENV variables:
-
BOOKINGSYNC_URL
- the url of the website, should behttps://www.bookingsync.com
-
BOOKINGSYNC_APP_ID
- BookingSync Application's Client ID -
BOOKINGSYNC_APP_SECRET
- BookingSync Application's Client Secret -
BOOKINGSYNC_VERIFY_SSL
- Verify SSL (available only in development or test). Default to false -
BOOKINGSYNC_SCOPE
- Space separated list of required scopes. Defaults to nil, which means the public scope.
You might want to use dotenv-rails to make ENV variables management easy.
Furthermore gem provides hooks to let you ensure displayed data will be up to date.
Rentals
By default BookingsyncPortal.rental_model
synchronization is performed inline using synced gem. You may want to customize this behaviour by specifying some callable. This can be useful if you have larger accounts and would like to synchronize rentals asynchronously, eg.:
BookingsyncPortal.setup do |config|
config.rentals_synchronizer = ->(account) { AsyncRentalsSynchronizer.perform_async(account.id) }
end
Rack::Lock is not recommended with message_bus gem, causing deadlock problems. You might want to add this line to your app development.rb
file:
config.middleware.delete Rack::Lock
Testing
RSpec
We do provide some helper for RSpec users, you can include them in your spec/rails_helper.rb
(before spec/support
inclusion):
require 'bookingsync_application/spec_helper'
VCR
We recommend a VCR setup inspired from the following configuration. It will mask authorization tokens from your fixtures:
require 'vcr'
VCR.configure do |config|
config.cassette_library_dir = 'spec/fixtures/cassettes'
config.hook_into :webmock
config.configure_rspec_metadata!
config.filter_sensitive_data('BOOKINGSYNC_OAUTH_ACCESS_TOKEN') do
ENV['BOOKINGSYNC_OAUTH_ACCESS_TOKEN']
end
# Uncomment if using codeclimate
# config.ignore_hosts 'codeclimate.com'
end