ud-sync is a set of tools to allow client applications to work offline. This gem will help you on the server.
This gem will plug into your Rails models and save every DB operation.
With that information, it will expose GET /ud_sync/operations so that your
mobile devices can come from offline and know what data was deleted in other
devices, synchronizing automatically.
We're aiming at building the client counterparts. Check the ud-sync organization for other languages (e.g ud-sync-swift).
Add this line to your application's Gemfile:
gem 'ud_sync'And then execute:
$ bundle
Step 1: runs migrations
rake db:migrate
ud-sync records operations and configurations in database tables.
Step 2: add the route
Rails.application.routes.draw do
mount UdSync::Engine => "/ud_sync"
# ...
endStep 3: configure your models
class Post < ActiveRecord::Base
ud_sync
# ...
endWhenever you save or delete a post, this will save the operation automatically.
Step 4: consume /ud_sync/operations
When you access GET /ud_sync/operations, you will get a response such as the
following.
{
"operations": [{
"id": 1,
"name": "save",
"record_id": "record-1",
"entity": "User",
"date": "2025-10-23T10:32:41Z"
}, {
"id": 2,
"name": "delete",
"record_id": "record-2",
"entity": "Post",
"date": "2025-10-23T11:23:23Z"
}]
}name stands for the name of the operation, which could be save or delete.
record_id is the id of the record that was processed. entity is the resource
name and date when it happened.
For example, when DeviceA running your offline ready mobile app deletes Post
with id record-2, this operation will be recorded. When DeviceB comes online,
it will request the operations endpoint and check that the Post was deleted
online. It will then delete it locally so that it's synchronized with DeviceA.
Step 5: define current_user in your application controller
If your ApplicationController has current_user defined, GET /operations
will only return Operations which owner_id equals current_user.id
You can customize it by changing ud_sync call:
class Post < ActiveRecord::Base
belongs_to :user
ud_sync entity: 'Article', id: :uuid, owner: :user
# ...
endentity is the name of the resource. If not specified, the name of the model
class will be used. id is the attribute you want to use as id - for example,
when you use uuids, you might not want to expose your internal ids. owner
is the association that represents the user that has the current resource. With
that, you can return only the operations belonging to the current user.
After checking out the repo, run bin/setup to install dependencies. Then, run
rake to run the tests.
When adding a new attribute via migration, do the following to clean up the cache:
bin/setup
Bug reports and pull requests are welcome on GitHub at https://github.com/[USERNAME]/ud-sync-rails.