From aa1737fa07b639a5388a0ab54cefa39f7369abcc Mon Sep 17 00:00:00 2001 From: Caspian Baska Date: Mon, 12 Apr 2021 15:39:05 +1000 Subject: [PATCH 1/6] style(lenel): crystal tool format --- drivers/lenel/open_access.cr | 5 +-- drivers/lenel/open_access/client.cr | 32 ++++++---------- drivers/lenel/open_access/error.cr | 7 +--- drivers/lenel/open_access_spec.cr | 58 ++++++++++++++--------------- 4 files changed, 43 insertions(+), 59 deletions(-) diff --git a/drivers/lenel/open_access.cr b/drivers/lenel/open_access.cr index d4ecbc62682..9d309ba13b4 100644 --- a/drivers/lenel/open_access.cr +++ b/drivers/lenel/open_access.cr @@ -2,6 +2,7 @@ require "placeos-driver" require "time" class Lenel::OpenAccess < PlaceOS::Driver; end + require "./open_access/client" class Lenel::OpenAccess < PlaceOS::Driver @@ -18,7 +19,6 @@ class Lenel::OpenAccess < PlaceOS::Driver password: "", }) - private getter client : OpenAccess::Client do transport = PlaceOS::HTTPClient.new self app_id = setting String, :application_id @@ -150,7 +150,7 @@ class Lenel::OpenAccess < PlaceOS::Driver def create_cardholder( email : String, firstname : String, - lastname : String, + lastname : String ) logger.debug { "creating cardholder record for #{email}" } unless client.count(Cardholder, filter: %(email = "#{email}")).zero? @@ -167,7 +167,6 @@ class Lenel::OpenAccess < PlaceOS::Driver end end - ################################################################################ # # Warning: nasty hacks below. These are intended as a _temporary_ measure to diff --git a/drivers/lenel/open_access/client.cr b/drivers/lenel/open_access/client.cr index 5665a55ffbc..3cf54303523 100644 --- a/drivers/lenel/open_access/client.cr +++ b/drivers/lenel/open_access/client.cr @@ -21,12 +21,11 @@ class Lenel::OpenAccess::Client def initialize(@transport, @app_id) transport.before_request do |req| req.headers["Application-Id"] = app_id - req.headers["Content-Type"] = "application/json" - req.headers["Session-Token"] = token.not_nil! unless token.nil? + req.headers["Content-Type"] = "application/json" + req.headers["Session-Token"] = token.not_nil! unless token.nil? end end - Responsible.on_server_error do |response| raise OpenAccess::Error.from_response response end @@ -35,7 +34,6 @@ class Lenel::OpenAccess::Client raise OpenAccess::Error.from_response response end - # Gets the version of the attached OnGuard system. def version ~transport.get( @@ -53,12 +51,7 @@ class Lenel::OpenAccess::Client ) >> NamedTuple( total_items: Int32, item_list: Array(NamedTuple( - property_value_map: { - ID: String, - Name: String, - directory_type: Int32, - } - )), + property_value_map: {ID: String, Name: String, directory_type: Int32})), ))[:item_list].map { |item| item[:property_value_map] } end @@ -66,7 +59,7 @@ class Lenel::OpenAccess::Client def login( username user_name : String, password : String, - directory_id : String?, + directory_id : String? ) ~transport.post( path: "/authentication?version=1.0", @@ -102,8 +95,8 @@ class Lenel::OpenAccess::Client ~transport.post( path: "/instances?version=1.0", body: { - type_name: T.type_name, - property_value_map: T.partial(**props) + type_name: T.type_name, + property_value_map: T.partial(**props), }.to_json ) >> Models::Untyped end @@ -120,7 +113,7 @@ class Lenel::OpenAccess::Client filter : String? = nil, page_number : Int32? = nil, page_size : Int32? = nil, - order_by : String? = nil, + order_by : String? = nil ) : Array(T) forall T params = HTTP::Params.new args.merge(type_name: T.type_name).each do |key, val| @@ -146,8 +139,7 @@ class Lenel::OpenAccess::Client (~transport.get( path: "/count?version=1.0&#{params}" ) >> NamedTuple( - total_items: Int32 - ))[:total_items] + total_items: Int32))[:total_items] end # Updates a record of *entity*. Passed properties must include the types key and @@ -156,8 +148,8 @@ class Lenel::OpenAccess::Client ~transport.put( path: "/instances?version=1.0", body: { - type_name: T.type_name, - property_value_map: T.partial(**props) + type_name: T.type_name, + property_value_map: T.partial(**props), }.to_json ) >> T end @@ -167,8 +159,8 @@ class Lenel::OpenAccess::Client ~transport.delete( path: "/instances?version=1.0", body: { - type_name: T.type_name, - property_value_map: T.partial(**props) + type_name: T.type_name, + property_value_map: T.partial(**props), }.to_json ) end diff --git a/drivers/lenel/open_access/error.cr b/drivers/lenel/open_access/error.cr index e088b1146ec..aaa8d5d8adc 100644 --- a/drivers/lenel/open_access/error.cr +++ b/drivers/lenel/open_access/error.cr @@ -1,12 +1,7 @@ require "json" class Lenel::OpenAccess::Error < Exception - alias Info = { - error: { - code: String, - message: String? - } - } + alias Info = {error: {code: String, message: String?}} def self.from_response(response) # Although the API docs specify this is being in an "error" header, this diff --git a/drivers/lenel/open_access_spec.cr b/drivers/lenel/open_access_spec.cr index add7873331a..db2938753c6 100644 --- a/drivers/lenel/open_access_spec.cr +++ b/drivers/lenel/open_access_spec.cr @@ -10,17 +10,17 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do req.method.should eq("POST") req.path.should eq("/authentication") respond_with 200, { - session_token: "abc123", - token_expiration_time: "#{(Time.utc + 2.weeks).to_rfc3339}" + session_token: "abc123", + token_expiration_time: "#{(Time.utc + 2.weeks).to_rfc3339}", } end # Re-auth on creds update settings({ - username: "foo", - password: "bar", - directory_id: "baz", - application_id: "" + username: "foo", + password: "bar", + directory_id: "baz", + application_id: "", }) expect_http_request do |req, res| req.method.should eq("POST") @@ -30,8 +30,8 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do body["password"].should eq("bar") body["directory_id"].should eq("baz") respond_with 200, { - session_token: "abc123", - token_expiration_time: "#{(Time.utc + 2.weeks).to_rfc3339}" + session_token: "abc123", + token_expiration_time: "#{(Time.utc + 2.weeks).to_rfc3339}", } end @@ -42,15 +42,14 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do req.path.should eq("/version") req.headers["Session-Token"].should eq("abc123") respond_with 200, { - product_name: "OnGuard 7.6", + product_name: "OnGuard 7.6", product_version: "7.6.001", - version: "1.0" + version: "1.0", } end version = version.get.not_nil! version["product_version"].should eq("7.6.001") - # Error handling failing_request = exec(:version) expect_http_request do |req, res| @@ -58,22 +57,21 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do req.path.should eq("/version") respond_with 401, { error: { - code: "openaccess.general.invalidapplicationid", - message: "You are not licensed for OpenAccess." - } + code: "openaccess.general.invalidapplicationid", + message: "You are not licensed for OpenAccess.", + }, } end expect_raises(PlaceOS::Driver::RemoteException) do failing_request.get end - # Cardholder CRUD example_cardholder = { - email: "sales@vandelayindustries.com", + email: "sales@vandelayindustries.com", firstname: "Kel", - lastname: "Varnsen", + lastname: "Varnsen", } created_cardholder = exec(:create_cardholder, **example_cardholder) @@ -82,7 +80,7 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do req.path.should eq("/count") req.query_params["type_name"]?.should eq("Lnl_Cardholder") req.query_params["filter"]?.should eq(%(email = "sales@vandelayindustries.com")) - respond_with 200, { total_items: 0 } + respond_with 200, {total_items: 0} end expect_http_request do |req, res| req.method.should eq("POST") @@ -95,10 +93,10 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do prop["lastname"].should eq("Varnsen") end respond_with 200, { - type_name: "Lnl_Cardholder", + type_name: "Lnl_Cardholder", property_value_map: { ID: 1, - } + }, } end created_cardholder = created_cardholder.get.not_nil! @@ -113,16 +111,16 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do respond_with 200, { total_pages: 1, total_items: 1, - count: 1, - type_name: "Lnl_Cardholder", - item_list: [{ + count: 1, + type_name: "Lnl_Cardholder", + item_list: [{ property_value_map: { - ID: 1, - EMAIL: "sales@vandelyindustries.com", + ID: 1, + EMAIL: "sales@vandelyindustries.com", FIRSTNAME: "Kel", - LASTNAME: "Varnsen" - } - }] + LASTNAME: "Varnsen", + }, + }], } end queried_cardholder = queried_cardholder.get.not_nil! @@ -151,10 +149,10 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do prop["id"].should eq(123) end respond_with 200, { - type_name: "Lnl_Badge", + type_name: "Lnl_Badge", property_value_map: { BADGEKEY: 1, - } + }, } end created_badge = created_badge.get.not_nil! From 9c162d9127eaa7e7e78ca0cbc5f61c90e58a8faa Mon Sep 17 00:00:00 2001 From: Caspian Baska Date: Mon, 12 Apr 2021 15:39:34 +1000 Subject: [PATCH 2/6] fix(nec:display): extend supported range of audio inputs --- drivers/nec/display.cr | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/drivers/nec/display.cr b/drivers/nec/display.cr index 9ea186086b8..5059f0cf11e 100644 --- a/drivers/nec/display.cr +++ b/drivers/nec/display.cr @@ -81,12 +81,17 @@ class Nec::Display < PlaceOS::Driver end enum Audio - Audio1 = 1 - Audio2 = 2 - Audio3 = 3 - Hdmi = 4 - Tv = 6 - DisplayPort = 7 + Audio1 = 1 + Audio2 = 2 + Audio3 = 3 + Hdmi1 = 4 + Tv = 6 + DisplayPort1 = 7 + DisplayPort2 = 8 + HDMI2 = 10 + HDMI3 = 11 + MultiPicture = 13 + ComputeModule = 14 end def switch_audio(input : Audio) From 73f80d0685872ff6f2fad41e70c19c324a1a9c11 Mon Sep 17 00:00:00 2001 From: Caspian Baska Date: Mon, 12 Apr 2021 16:04:32 +1000 Subject: [PATCH 3/6] revert: "style(lenel): crystal tool format" This reverts commit aa1737fa07b639a5388a0ab54cefa39f7369abcc. --- drivers/lenel/open_access.cr | 5 ++- drivers/lenel/open_access/client.cr | 32 ++++++++++------ drivers/lenel/open_access/error.cr | 7 +++- drivers/lenel/open_access_spec.cr | 58 +++++++++++++++-------------- 4 files changed, 59 insertions(+), 43 deletions(-) diff --git a/drivers/lenel/open_access.cr b/drivers/lenel/open_access.cr index 9d309ba13b4..d4ecbc62682 100644 --- a/drivers/lenel/open_access.cr +++ b/drivers/lenel/open_access.cr @@ -2,7 +2,6 @@ require "placeos-driver" require "time" class Lenel::OpenAccess < PlaceOS::Driver; end - require "./open_access/client" class Lenel::OpenAccess < PlaceOS::Driver @@ -19,6 +18,7 @@ class Lenel::OpenAccess < PlaceOS::Driver password: "", }) + private getter client : OpenAccess::Client do transport = PlaceOS::HTTPClient.new self app_id = setting String, :application_id @@ -150,7 +150,7 @@ class Lenel::OpenAccess < PlaceOS::Driver def create_cardholder( email : String, firstname : String, - lastname : String + lastname : String, ) logger.debug { "creating cardholder record for #{email}" } unless client.count(Cardholder, filter: %(email = "#{email}")).zero? @@ -167,6 +167,7 @@ class Lenel::OpenAccess < PlaceOS::Driver end end + ################################################################################ # # Warning: nasty hacks below. These are intended as a _temporary_ measure to diff --git a/drivers/lenel/open_access/client.cr b/drivers/lenel/open_access/client.cr index 3cf54303523..5665a55ffbc 100644 --- a/drivers/lenel/open_access/client.cr +++ b/drivers/lenel/open_access/client.cr @@ -21,11 +21,12 @@ class Lenel::OpenAccess::Client def initialize(@transport, @app_id) transport.before_request do |req| req.headers["Application-Id"] = app_id - req.headers["Content-Type"] = "application/json" - req.headers["Session-Token"] = token.not_nil! unless token.nil? + req.headers["Content-Type"] = "application/json" + req.headers["Session-Token"] = token.not_nil! unless token.nil? end end + Responsible.on_server_error do |response| raise OpenAccess::Error.from_response response end @@ -34,6 +35,7 @@ class Lenel::OpenAccess::Client raise OpenAccess::Error.from_response response end + # Gets the version of the attached OnGuard system. def version ~transport.get( @@ -51,7 +53,12 @@ class Lenel::OpenAccess::Client ) >> NamedTuple( total_items: Int32, item_list: Array(NamedTuple( - property_value_map: {ID: String, Name: String, directory_type: Int32})), + property_value_map: { + ID: String, + Name: String, + directory_type: Int32, + } + )), ))[:item_list].map { |item| item[:property_value_map] } end @@ -59,7 +66,7 @@ class Lenel::OpenAccess::Client def login( username user_name : String, password : String, - directory_id : String? + directory_id : String?, ) ~transport.post( path: "/authentication?version=1.0", @@ -95,8 +102,8 @@ class Lenel::OpenAccess::Client ~transport.post( path: "/instances?version=1.0", body: { - type_name: T.type_name, - property_value_map: T.partial(**props), + type_name: T.type_name, + property_value_map: T.partial(**props) }.to_json ) >> Models::Untyped end @@ -113,7 +120,7 @@ class Lenel::OpenAccess::Client filter : String? = nil, page_number : Int32? = nil, page_size : Int32? = nil, - order_by : String? = nil + order_by : String? = nil, ) : Array(T) forall T params = HTTP::Params.new args.merge(type_name: T.type_name).each do |key, val| @@ -139,7 +146,8 @@ class Lenel::OpenAccess::Client (~transport.get( path: "/count?version=1.0&#{params}" ) >> NamedTuple( - total_items: Int32))[:total_items] + total_items: Int32 + ))[:total_items] end # Updates a record of *entity*. Passed properties must include the types key and @@ -148,8 +156,8 @@ class Lenel::OpenAccess::Client ~transport.put( path: "/instances?version=1.0", body: { - type_name: T.type_name, - property_value_map: T.partial(**props), + type_name: T.type_name, + property_value_map: T.partial(**props) }.to_json ) >> T end @@ -159,8 +167,8 @@ class Lenel::OpenAccess::Client ~transport.delete( path: "/instances?version=1.0", body: { - type_name: T.type_name, - property_value_map: T.partial(**props), + type_name: T.type_name, + property_value_map: T.partial(**props) }.to_json ) end diff --git a/drivers/lenel/open_access/error.cr b/drivers/lenel/open_access/error.cr index aaa8d5d8adc..e088b1146ec 100644 --- a/drivers/lenel/open_access/error.cr +++ b/drivers/lenel/open_access/error.cr @@ -1,7 +1,12 @@ require "json" class Lenel::OpenAccess::Error < Exception - alias Info = {error: {code: String, message: String?}} + alias Info = { + error: { + code: String, + message: String? + } + } def self.from_response(response) # Although the API docs specify this is being in an "error" header, this diff --git a/drivers/lenel/open_access_spec.cr b/drivers/lenel/open_access_spec.cr index db2938753c6..add7873331a 100644 --- a/drivers/lenel/open_access_spec.cr +++ b/drivers/lenel/open_access_spec.cr @@ -10,17 +10,17 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do req.method.should eq("POST") req.path.should eq("/authentication") respond_with 200, { - session_token: "abc123", - token_expiration_time: "#{(Time.utc + 2.weeks).to_rfc3339}", + session_token: "abc123", + token_expiration_time: "#{(Time.utc + 2.weeks).to_rfc3339}" } end # Re-auth on creds update settings({ - username: "foo", - password: "bar", - directory_id: "baz", - application_id: "", + username: "foo", + password: "bar", + directory_id: "baz", + application_id: "" }) expect_http_request do |req, res| req.method.should eq("POST") @@ -30,8 +30,8 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do body["password"].should eq("bar") body["directory_id"].should eq("baz") respond_with 200, { - session_token: "abc123", - token_expiration_time: "#{(Time.utc + 2.weeks).to_rfc3339}", + session_token: "abc123", + token_expiration_time: "#{(Time.utc + 2.weeks).to_rfc3339}" } end @@ -42,14 +42,15 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do req.path.should eq("/version") req.headers["Session-Token"].should eq("abc123") respond_with 200, { - product_name: "OnGuard 7.6", + product_name: "OnGuard 7.6", product_version: "7.6.001", - version: "1.0", + version: "1.0" } end version = version.get.not_nil! version["product_version"].should eq("7.6.001") + # Error handling failing_request = exec(:version) expect_http_request do |req, res| @@ -57,21 +58,22 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do req.path.should eq("/version") respond_with 401, { error: { - code: "openaccess.general.invalidapplicationid", - message: "You are not licensed for OpenAccess.", - }, + code: "openaccess.general.invalidapplicationid", + message: "You are not licensed for OpenAccess." + } } end expect_raises(PlaceOS::Driver::RemoteException) do failing_request.get end + # Cardholder CRUD example_cardholder = { - email: "sales@vandelayindustries.com", + email: "sales@vandelayindustries.com", firstname: "Kel", - lastname: "Varnsen", + lastname: "Varnsen", } created_cardholder = exec(:create_cardholder, **example_cardholder) @@ -80,7 +82,7 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do req.path.should eq("/count") req.query_params["type_name"]?.should eq("Lnl_Cardholder") req.query_params["filter"]?.should eq(%(email = "sales@vandelayindustries.com")) - respond_with 200, {total_items: 0} + respond_with 200, { total_items: 0 } end expect_http_request do |req, res| req.method.should eq("POST") @@ -93,10 +95,10 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do prop["lastname"].should eq("Varnsen") end respond_with 200, { - type_name: "Lnl_Cardholder", + type_name: "Lnl_Cardholder", property_value_map: { ID: 1, - }, + } } end created_cardholder = created_cardholder.get.not_nil! @@ -111,16 +113,16 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do respond_with 200, { total_pages: 1, total_items: 1, - count: 1, - type_name: "Lnl_Cardholder", - item_list: [{ + count: 1, + type_name: "Lnl_Cardholder", + item_list: [{ property_value_map: { - ID: 1, - EMAIL: "sales@vandelyindustries.com", + ID: 1, + EMAIL: "sales@vandelyindustries.com", FIRSTNAME: "Kel", - LASTNAME: "Varnsen", - }, - }], + LASTNAME: "Varnsen" + } + }] } end queried_cardholder = queried_cardholder.get.not_nil! @@ -149,10 +151,10 @@ DriverSpecs.mock_driver "Lenel::OpenAccess" do prop["id"].should eq(123) end respond_with 200, { - type_name: "Lnl_Badge", + type_name: "Lnl_Badge", property_value_map: { BADGEKEY: 1, - }, + } } end created_badge = created_badge.get.not_nil! From 6a7dacf7ba940ce5efd38dbb1e5bf38f657d5414 Mon Sep 17 00:00:00 2001 From: Caspian Baska Date: Mon, 12 Apr 2021 16:35:19 +1000 Subject: [PATCH 4/6] Update drivers/nec/display.cr Co-authored-by: Kim Burgess --- drivers/nec/display.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nec/display.cr b/drivers/nec/display.cr index 5059f0cf11e..3caccba736f 100644 --- a/drivers/nec/display.cr +++ b/drivers/nec/display.cr @@ -84,7 +84,7 @@ class Nec::Display < PlaceOS::Driver Audio1 = 1 Audio2 = 2 Audio3 = 3 - Hdmi1 = 4 + Hdmi = 4 Tv = 6 DisplayPort1 = 7 DisplayPort2 = 8 From 09d78fc335f2c68e32000a0bf88642aee815685b Mon Sep 17 00:00:00 2001 From: Caspian Baska Date: Mon, 12 Apr 2021 16:35:26 +1000 Subject: [PATCH 5/6] Update drivers/nec/display.cr Co-authored-by: Kim Burgess --- drivers/nec/display.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nec/display.cr b/drivers/nec/display.cr index 3caccba736f..02319675126 100644 --- a/drivers/nec/display.cr +++ b/drivers/nec/display.cr @@ -89,7 +89,7 @@ class Nec::Display < PlaceOS::Driver DisplayPort1 = 7 DisplayPort2 = 8 HDMI2 = 10 - HDMI3 = 11 + Hdmi3 = 11 MultiPicture = 13 ComputeModule = 14 end From 7d0da0e1e118ea9586c23e24726ae1ec7f99c1b6 Mon Sep 17 00:00:00 2001 From: Caspian Baska Date: Mon, 12 Apr 2021 16:35:31 +1000 Subject: [PATCH 6/6] Update drivers/nec/display.cr Co-authored-by: Kim Burgess --- drivers/nec/display.cr | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/drivers/nec/display.cr b/drivers/nec/display.cr index 02319675126..642f6347b38 100644 --- a/drivers/nec/display.cr +++ b/drivers/nec/display.cr @@ -88,7 +88,7 @@ class Nec::Display < PlaceOS::Driver Tv = 6 DisplayPort1 = 7 DisplayPort2 = 8 - HDMI2 = 10 + Hdmi2 = 10 Hdmi3 = 11 MultiPicture = 13 ComputeModule = 14