class VcrBetterBinary::Serializer
Constants
- BIN_KEY
Attributes
base_serializer[R]
Public Class Methods
new(base_serializer: VCR::Cassette::Serializers::YAML)
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 10 def initialize(base_serializer: VCR::Cassette::Serializers::YAML) @base_serializer = base_serializer end
Public Instance Methods
deserialize(string)
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 26 def deserialize(string) data = base_serializer.deserialize(string) yield_http_bodies(data) do |body| restore_binary_body_data(body) end data end
file_extension()
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 14 def file_extension base_serializer.file_extension end
prune_bin_data()
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 36 def prune_bin_data Pruner.new.prune_bin_data( bin_data_dir: bin_data_dir, cassette_http_bodies: all_cassette_http_bodies ) end
serialize(data)
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 18 def serialize(data) yield_http_bodies(data) do |body| stash_binary_body_data(body) end base_serializer.serialize(data) end
Private Instance Methods
all_cassette_http_bodies()
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 101 def all_cassette_http_bodies Enumerator::Lazy.new(cassette_paths) do |yielder, cassette_path| data = base_serializer.deserialize(File.read(cassette_path)) yield_http_bodies(data) do |body| yielder << body end end end
bin_data_dir()
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 79 def bin_data_dir File.expand_path("bin_data", cassette_dir).tap do |dir| FileUtils.mkdir_p(dir) end end
cassette_dir()
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 89 def cassette_dir VCR.configuration.cassette_library_dir end
cassette_paths()
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 111 def cassette_paths Dir.glob(File.expand_path("*.#{file_extension}", cassette_dir)) end
filename_safe_digest(content)
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 85 def filename_safe_digest(content) Digest::SHA256.bubblebabble(content) end
read_binary_data(path)
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 93 def read_binary_data(path) File.open(path, "rb") { |file| file.read } end
restore_binary_body_data(body)
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 71 def restore_binary_body_data(body) return unless body.key?(BIN_KEY) bin_storage_path = File.expand_path(body[BIN_KEY], bin_data_dir) body["string"] = read_binary_data(bin_storage_path) body.delete(BIN_KEY) end
stash_binary_body_data(body)
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 57 def stash_binary_body_data(body) return unless body["encoding"] == Encoding::BINARY.name return if body["string"].nil? || body["string"].empty? bin_key = filename_safe_digest(body["string"]) bin_storage_path = File.expand_path(bin_key, bin_data_dir) write_binary_data(bin_storage_path, body["string"]) body[BIN_KEY] = bin_key body.delete("string") bin_key end
write_binary_data(path, data)
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 97 def write_binary_data(path, data) File.open(path, "wb") { |file| file.write(data) } end
yield_http_bodies(data) { |request_body| ... }
click to toggle source
# File lib/vcr_better_binary/serializer.rb, line 47 def yield_http_bodies(data) data.fetch("http_interactions").each do |interaction| request_body = interaction.dig("request", "body") yield(request_body) unless request_body.nil? response_body = interaction.dig("response", "body") yield(response_body) unless response_body.nil? end end