Sync resource

pull/279/head
Rick Carlino 2016-10-04 10:35:44 -05:00
parent 270153611f
commit 05a16568a2
4 changed files with 55 additions and 0 deletions

View File

@ -0,0 +1,12 @@
# Generates a tree of all syncable resources. Typically used by a FarmBot device
# for caching of resources.
module Api
class SyncsController < Api::AbstractController
# GET /api/sync
def show
mutate Sync::Fetch.run(device: current_device)
end
end
end

View File

@ -0,0 +1,18 @@
module Sync
class Fetch < Mutations::Command
required do
model :device, class: Device
end
def execute
message = {
device: device,
users: device.users,
sequences: device.sequences,
regimens: device.regimens
}.as_json
message[:checksum] = Digest::MD5.hexdigest(Marshal::dump(message))
message
end
end
end

View File

@ -1,6 +1,7 @@
FarmBot::Application.routes.draw do
namespace :api, defaults: {format: :json} do
resource :sync, only: [:show]
resource :public_key, only: [:show]
resource :tokens, only: [:create]
resource :users, only: [:create]

View File

@ -0,0 +1,24 @@
require 'spec_helper'
describe Api::SyncsController do
include Devise::Test::ControllerHelpers
describe '#index' do
let(:user) { FactoryGirl.create(:user) }
it 'downloads a sync object' do
sign_in user
device_id = user.device.id
sequences = FactoryGirl
.create_list(:sequence, 2, device_id: device_id)
schedule_ids = user.device.sequences.map(&:id).sort
get :show
expect(response.status).to eq(200)
expect(json).to be_a_kind_of(Hash)
expect(json[:device][:id]).to eq(device_id)
expect(json[:sequences].length).to eq(2)
expect(json[:sequences].map { |s| s[:id] }.sort).to eq(schedule_ids)
end
end
end