SQL Conversion complete. Needs tweaks still

pull/260/head
Rick Carlino 2016-09-02 09:19:27 -05:00
parent 00d7f56643
commit d9fa96b46b
12 changed files with 49 additions and 46 deletions

View File

@ -8,7 +8,6 @@ module Api
current_device
.if_null { create }
.if_not_null { render json: current_device }
# .if_null { render json: {error: "add device to account"}, status: 404 }
end
# POST /api/device
@ -25,10 +24,8 @@ module Api
# DELETE /api/devices/1
def destroy
if current_device.users.include?(current_user)
current_device.destroy
render nothing: true, status: 204
end
Devices::Destroy.run!(user: current_user, device: current_device)
render nothing: true, status: 204
end
private

View File

@ -12,7 +12,6 @@ module Api
end
def create
#binding.pry
mutate Sequences::Create.run(params, device: current_device)
end

View File

@ -5,18 +5,4 @@ class User < ActiveRecord::Base
devise :database_authenticatable, :registerable, :recoverable, :rememberable,
:trackable, :validatable
# # Lazy load a device into the account. Prevents weird edge cases, such as
# # device === nil on first login.
# TODO THIS NEEDS TO NOT EXIST!!!
def device
# Device.where(id: self[:device]).first || Devices::Create.run!(user: self,
# uuid: SecureRandom.uuid,
# token: SecureRandom.hex)
super || Devices::Create.run!(user: self, uuid: SecureRandom.uuid, token: SecureRandom.hex)
end
# def device_id
# self[:device_id] || device.id
# end
end

View File

@ -4,24 +4,32 @@ module Devices
required do
model :user, class: User
string :uuid
string :token
end
optional do
string :name, default: nil
string :uuid
string :token
string :name
end
def execute
inputs["name"] ||= Haikunator.haikunate(9999)
dev = Device.find_or_initialize_by(uuid: uuid)
merge_default_values
ActiveRecord::Base.transaction do
dev.update_attributes!(inputs.except(:user))
user.update_attributes!(device_id: dev.id)
end
device.update_attributes(inputs.except(:user))
user.update_attributes(device_id: device.id)
dev
device
end
private
def merge_default_values
inputs[:uuid] ||= SecureRandom.uuid
inputs[:token] ||= SecureRandom.hex
inputs[:name] ||= Haikunator.haikunate(9999)
end
def device
@device ||= Device.find_by(uuid: uuid) || Device.new(uuid: uuid)
end
end
end

View File

@ -0,0 +1,16 @@
module Devices
class Destroy < Mutations::Command
required do
model :user, class: User
model :device, class: Device
end
def execute
ActiveRecord::Base.transaction do
user.update_attributes!(device: Devices::Create.run!(user: user))
device.destroy! if device.reload.users.count < 1
end
true
end
end
end

View File

@ -20,8 +20,6 @@ module Schedules
create(Schedule, inputs) do |sched|
sched.next_time = sched.calculate_next_occurence
end
rescue Exception => e
binding.pry
end
end
end

View File

@ -21,6 +21,8 @@ module Users
password_confirmation: password_confirmation,
name: name)
device = Devices::Create.run!(user: resp[:user])
resp.merge!(Auth::CreateToken.run!(email: email,
password: password,
host: "http://localhost:3000"))

View File

@ -6,8 +6,8 @@ describe Api::DevicesController do
describe '#create' do
let(:user) { FactoryGirl.create(:user) }
let(:user2) { FactoryGirl.create(:user) }
let!(:user) { FactoryGirl.create(:user) }
let!(:user2) { FactoryGirl.create(:user) }
it 'creates a new device for a user' do
sign_in user
@ -23,12 +23,11 @@ describe Api::DevicesController do
it 'shares devices between two users' do
bot = user.device
sign_in user2
params = {name: 'Frank', uuid: bot.uuid, token: bot.token}
params = {name: 'QQQ', uuid: bot.uuid, token: bot.token}
post :create, params
user.reload
user2.reload
binding.pry
expect(user.device.id).to eq(user2.device.id)
expect(user.reload.device.reload.name).to eq("QQQ")
expect(user2.reload.device.reload.name).to eq("QQQ")
expect(user.device_id).to eq(user2.device_id)
end
end
end

View File

@ -19,7 +19,6 @@ describe Api::SchedulesController do
.map(&:id)
.sort
get :index
#binding.pry
expect(response.status).to eq(200)
expect(json.length).to eq(2)
expect(json.map { |s| s[:id] }.sort).to eq(schedule_ids)

View File

@ -3,8 +3,8 @@ require 'securerandom'
FactoryGirl.define do
factory :device do
name Faker::Internet.user_name
uuid SecureRandom.uuid
token SecureRandom.urlsafe_base64
name { Faker::Internet.user_name }
uuid { SecureRandom.uuid }
token { SecureRandom.urlsafe_base64 }
end
end

View File

@ -6,6 +6,6 @@ FactoryGirl.define do
name { Faker::Name.name }
email { Faker::Internet.email }
password { Faker::Internet.password(8) }
after(:create) { |user| user.device ||= FactoryGirl.create(:device) }
after(:create) { |user| user.device ||= Devices::Create.run!(user: resp[:user]) }
end
end

View File

@ -50,7 +50,6 @@ RSpec.configure do |config|
end
config.after(:suite) do
ActiveRecord::Base.subclasses.map(&:delete_all)
SmarfDoc.finish!
end
end
end