Sync resource
parent
270153611f
commit
05a16568a2
|
@ -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
|
|
@ -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
|
|
@ -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]
|
||||
|
|
|
@ -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
|
Loading…
Reference in New Issue