Get remote server’s attributes and set them into local attributes via API.
User’s infomation will be used by other servers. So, prepare remote(provider) server for common user infomation provider, and Other servers(client) use ‘remote_attr_accessor’ to get common infomation of users.
Make file in “lib/remote_attr_accessor/config.rb” to Overwrite for your environment.
module RemoteAttrAccessor class Config def self.id_name 'id' end def self.prefix 'remote_' end def self.remote_json_key 'users' end def self.remote_attrs [:email, :last_name, :first_name] end def self.remote_attrs_with_prefix @remote_attrs_with_prefix = remote_attrs.map{|attr| "#{prefix}#{attr}"} end end end
Make file in “lib/remote_attr_accessor/api.rb” to Overwrite for your environments.
module RemoteAttrAccessor
class Api def self.get_remote_attrs(ids) # Write here API access code end def self.upsert_remote_attr(params) # Write here API access code end end
end
{ "users": { "1": { "id": 1, "email": "[email protected]", "last_name": szk, "first_name": kenji, "created_at": "2016-05-31T18:04:05.000Z", "updated_at": "2016-06-03T05:37:51.000Z" }, "2": { "id": 2, "email": "[email protected]", "last_name": ple, "first_name": sam, "created_at": "2016-05-31T07:51:10.000Z", "updated_at": "2016-05-31T07:51:10.000Z" } } }
Use sample for “User model”.
users = User.limit(1) user.first.remote_email # Get users email from remote server user.first.remote_email = '[email protected]' # Set users email to remote server
users = User.limit(1) RemoteAttrAccessor::Bulk.load_remote_attr(users) # Get users info in bulk and set instance variable user.first.remote_email # Not access to remote server
This project rocks and uses MIT-LICENSE.