From 370040668739ead9ef7d1b4c3c73be89d0f08dab Mon Sep 17 00:00:00 2001 From: Rick Carlino Date: Sun, 22 Mar 2020 18:32:00 -0500 Subject: [PATCH] Add new `Weed` PointerType --- app/lib/resources.rb | 1 + app/models/celery_script_settings_bag.rb | 4 ++-- app/models/in_use_point.rb | 1 + app/models/point.rb | 2 +- app/models/weed.rb | 4 ++++ app/serializers/weed_serializer.rb | 19 ++++++++++++++++++ package.json | 2 +- spec/controllers/api/points/create_spec.rb | 23 ++++++++++++++++++++++ 8 files changed, 52 insertions(+), 4 deletions(-) create mode 100644 app/models/weed.rb create mode 100644 app/serializers/weed_serializer.rb diff --git a/app/lib/resources.rb b/app/lib/resources.rb index c582cd900..dafcee0dc 100644 --- a/app/lib/resources.rb +++ b/app/lib/resources.rb @@ -46,5 +46,6 @@ module Resources Plant => Points, Point => Points, ToolSlot => Points, + Weed => Points, } end # Resources diff --git a/app/models/celery_script_settings_bag.rb b/app/models/celery_script_settings_bag.rb index 3d3dba3ca..93a412e62 100644 --- a/app/models/celery_script_settings_bag.rb +++ b/app/models/celery_script_settings_bag.rb @@ -30,8 +30,8 @@ module CeleryScriptSettingsBag ALLOWED_PACKAGES = %w(farmbot_os arduino_firmware) ALLOWED_PIN_MODES = [DIGITAL = 0, ANALOG = 1] ALLOWED_PIN_TYPES = PIN_TYPE_MAP.keys - ALLOWED_POINTER_TYPE = %w(GenericPointer ToolSlot Plant) - ALLOWED_RESOURCE_TYPE = %w(Device Point Plant ToolSlot GenericPointer) + ALLOWED_POINTER_TYPE = %w(GenericPointer ToolSlot Plant Weed) + ALLOWED_RESOURCE_TYPE = %w(Device Point Plant ToolSlot Weed GenericPointer) ALLOWED_RPC_NODES = %w(assertion calibrate change_ownership check_updates dump_info emergency_lock emergency_unlock execute execute_script diff --git a/app/models/in_use_point.rb b/app/models/in_use_point.rb index 4c29f3894..781ca20e1 100644 --- a/app/models/in_use_point.rb +++ b/app/models/in_use_point.rb @@ -8,6 +8,7 @@ class InUsePoint < ApplicationRecord GenericPointer.name => DEFAULT_NAME, ToolSlot.name => "slot", Plant.name => "plant", + Weed.name => "weed" } def readonly? diff --git a/app/models/point.rb b/app/models/point.rb index d7702c2cf..4b3749f11 100644 --- a/app/models/point.rb +++ b/app/models/point.rb @@ -4,7 +4,7 @@ class Point < ApplicationRecord # axis value > 21k right now - RC # Using real constants instead of strings results # in circular dep. errors. - POINTER_KINDS = ["GenericPointer", "Plant", "ToolSlot"] + POINTER_KINDS = ["GenericPointer", "Plant", "ToolSlot", "Weed"] self.inheritance_column = "pointer_type" belongs_to :device diff --git a/app/models/weed.rb b/app/models/weed.rb new file mode 100644 index 000000000..8e8597bd1 --- /dev/null +++ b/app/models/weed.rb @@ -0,0 +1,4 @@ +class Weed < Point + DEFAULT_ICON = "/app-resources/img/icons/generic-plant.svg" + ATTRS = %w(meta name plant_stage planted_at pointer_type radius x y z) +end diff --git a/app/serializers/weed_serializer.rb b/app/serializers/weed_serializer.rb new file mode 100644 index 000000000..b09a65f80 --- /dev/null +++ b/app/serializers/weed_serializer.rb @@ -0,0 +1,19 @@ +class WeedSerializer < BasePointSerializer + attributes :plant_stage, :planted_at, :radius, :meta + + def x + object.x.round + end + + def y + object.y.round + end + + def z + object.z.round + end + + def meta + object.meta || {} + end +end diff --git a/package.json b/package.json index f72e1462e..5563a4b63 100644 --- a/package.json +++ b/package.json @@ -45,7 +45,7 @@ "coveralls": "3.0.11", "enzyme": "3.11.0", "enzyme-adapter-react-16": "1.15.2", - "farmbot": "9.1.2", + "farmbot": "9.2.0-rc1", "i18next": "19.3.3", "install": "0.13.0", "lodash": "4.17.15", diff --git a/spec/controllers/api/points/create_spec.rb b/spec/controllers/api/points/create_spec.rb index a52e6a20e..3da8acdc2 100644 --- a/spec/controllers/api/points/create_spec.rb +++ b/spec/controllers/api/points/create_spec.rb @@ -46,6 +46,29 @@ describe Api::PointsController do end end + it "creates a weed" do + sign_in user + time = (DateTime.now - 1.day).to_json + p = { x: 23, + y: 45, + name: "unwelcomed guest", + pointer_type: "Weed", + planted_at: time, + plant_stage: "sprouted" } + post :create, body: p.to_json, params: { format: :json } + expect(response.status).to eq(200) + weed = Weed.last + expect(weed.x).to eq(p[:x]) + expect(weed.y).to eq(p[:y]) + expect(weed.name).to eq(p[:name]) + expect(weed.plant_stage).to eq("sprouted") + expect(p[:plant_stage]).to eq("sprouted") + expect(weed.created_at).to be_truthy + p.keys.each do |key| + expect(json).to have_key(key) + end + end + it "validates pointer_type" do sign_in user body = { pointer_type: "TypoPointer", x: 0, y: 0 }