From 2203163e8b91ee37e9c719a9898b0222f7175e3a Mon Sep 17 00:00:00 2001
From: Jeffrey Phillips Freeman <the@jeffreyfreeman.me>
Date: Wed, 16 Aug 2023 13:38:52 -0400
Subject: [PATCH] Added Encoder interface

---
 lib/apex/encoder.rb           |  1 +
 lib/apex/encoder/aprs_kiss.rb | 10 ++++++++--
 lib/apex/encoder/encoder.rb   |  9 +++++++++
 lib/apex/encoder/igate_tcp.rb |  2 ++
 4 files changed, 20 insertions(+), 2 deletions(-)
 create mode 100644 lib/apex/encoder/encoder.rb

diff --git a/lib/apex/encoder.rb b/lib/apex/encoder.rb
index 089aa09..b158581 100644
--- a/lib/apex/encoder.rb
+++ b/lib/apex/encoder.rb
@@ -1,2 +1,3 @@
 require 'apex/encoder/aprs_kiss'
 require 'apex/encoder/igate_tcp'
+require 'apex/encoder/encoder'
diff --git a/lib/apex/encoder/aprs_kiss.rb b/lib/apex/encoder/aprs_kiss.rb
index fa4ec7e..d1114ce 100644
--- a/lib/apex/encoder/aprs_kiss.rb
+++ b/lib/apex/encoder/aprs_kiss.rb
@@ -1,15 +1,21 @@
 require 'apex/frame'
+require 'kiss'
+require 'apex/encoder/encoder'
 
 module Apex
     class AprsKiss
+        include Encoder
 
         ##
         # Creates a new AprsKiss encoder
         #
-        # @param data_stream [Kiss::KissAbstract] The underlying data stream
-        #    frames are written to.
+        # @param data_stream [Kiss::Kiss] The underlying data stream frames are
+        #     written to.
         protected
         def initialize(data_stream)
+            raise ArgumentError.new("data_stream can not be nil") if data_stream.nil?
+            raise ArgumentError.new("data_stream must be a Kiss class: #{data_stream.to_s}") unless data_stream.kind_of? Kiss::Kiss
+
             @data_stream = data_stream
         end
 
diff --git a/lib/apex/encoder/encoder.rb b/lib/apex/encoder/encoder.rb
new file mode 100644
index 0000000..0ac4396
--- /dev/null
+++ b/lib/apex/encoder/encoder.rb
@@ -0,0 +1,9 @@
+require 'abstractify'
+
+module Apex
+  module Encoder
+    include Abstractify::Abstract
+
+    abstract :write_interface, :read_interface, :connect, :close
+  end
+end
diff --git a/lib/apex/encoder/igate_tcp.rb b/lib/apex/encoder/igate_tcp.rb
index 3217872..beff68b 100644
--- a/lib/apex/encoder/igate_tcp.rb
+++ b/lib/apex/encoder/igate_tcp.rb
@@ -2,6 +2,8 @@ require 'apex/app_info'
 
 module Apex
     class IGateTcp
+        include Encoder
+
         DEFAULT_APRSIS_URL = 'http://srvr.aprs-is.net:8080'
         DEFAULT_APRSIS_SERVER = 'rotate.aprs.net'
         DEFAULT_APRSIS_FILTER_PORT = 14580
-- 
GitLab