Skip to content

Commit

Permalink
refactor import readers
Browse files Browse the repository at this point in the history
  • Loading branch information
ezekg committed Jul 11, 2024
1 parent abb4afc commit a662e88
Show file tree
Hide file tree
Showing 6 changed files with 22 additions and 8 deletions.
2 changes: 2 additions & 0 deletions lib/keygen/exporter/v1/writer.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# frozen_string_literal: true

require_relative '../writer'

module Keygen
module Exporter
module V1
Expand Down
7 changes: 4 additions & 3 deletions lib/keygen/importer.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
# frozen_string_literal: true

require_relative 'importer/reader'
require_relative 'importer/version_reader'
require_relative 'importer/v1/importer'

module Keygen
Expand All @@ -11,13 +12,13 @@ class InvalidSecretKeyError < StandardError; end
extend self

def import(from:, secret_key: nil)
reader = Reader.new(from)
version = reader.read_version
version_reader = VersionReader.new(from)
version = version_reader.read_version

importer_class = importer_class_for(version:)
importer = importer_class.new(secret_key:)

importer.import(reader:)
importer.import(from:)
rescue OpenSSL::Cipher::CipherError
raise InvalidSecretKeyError.new, 'Secret key is invalid'
end
Expand Down
2 changes: 0 additions & 2 deletions lib/keygen/importer/reader.rb
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,6 @@ module Importer
class Reader
def initialize(io) = @io = io
def read(n) = @io.read(n)
def read_version = read(1).unpack1('C') # first byte is the version
def read_chunk = raise NotImplementedError
end
end
end
6 changes: 3 additions & 3 deletions lib/keygen/importer/v1/importer.rb
Original file line number Diff line number Diff line change
Expand Up @@ -11,10 +11,10 @@ def initialize(secret_key: nil)
@deserializer = Deserializer.new(secret_key:)
end

def import(reader:)
v1_reader = Reader.new(reader)
def import(from:)
reader = Reader.new(from)

while chunk = v1_reader.read_chunk
while chunk = reader.read_chunk
process_chunk(chunk)
end
end
Expand Down
2 changes: 2 additions & 0 deletions lib/keygen/importer/v1/reader.rb
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# frozen_string_literal: true

require_relative '../reader'

module Keygen
module Importer
module V1
Expand Down
11 changes: 11 additions & 0 deletions lib/keygen/importer/version_reader.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
# frozen_string_literal: true

require_relative 'reader'

module Keygen
module Importer
class VersionReader < Reader
def read_version = read(1).unpack1('C') # first byte is the version
end
end
end

0 comments on commit a662e88

Please sign in to comment.