Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -6,3 +6,4 @@
/pkg/
/spec/reports/
/tmp/
file_cache_test.yaml
5 changes: 3 additions & 2 deletions lib/ruber/configuration.rb
Original file line number Diff line number Diff line change
@@ -1,13 +1,14 @@
# frozen_string_literal: true

require_relative "configuration/null_cache"
require_relative "configuration/file_cache"

module Ruber
class Configuration
attr_accessor :customer_id, :client_id, :client_secret
attr_accessor :customer_id, :client_id, :client_secret, :file_cache_path

def cache
@cache ||= NullCache.new
@cache ||= FileCache.new
end

def cache=(store)
Expand Down
22 changes: 22 additions & 0 deletions lib/ruber/configuration/file_cache.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
# frozen_string_literal: true

require "yaml/store"

module Ruber
class FileCache
def initialize
raise "FileCache requires a file path" unless Ruber.configuration.file_cache_path

@store = YAML::Store.new(Ruber.configuration.file_cache_path)
end

def read(key) = @store.transaction { @store[key] }
def write(key, value) = @store.transaction { @store[key] = value }

def clear
File.delete(Ruber.configuration.file_cache_path) if File.exist?(Ruber.configuration.file_cache_path)
end

def delete(key) = @store.transaction { @store.delete(key) }
end
end
2 changes: 1 addition & 1 deletion test/ruber/authenticator_test.rb
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# frozen_string_literal: true

require "test_helper"
require File.expand_path("../test_helper", __dir__)
require "webmock/minitest"

module Ruber
Expand Down
63 changes: 63 additions & 0 deletions test/ruber/configuration/file_cache_test.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,63 @@
# frozen_string_literal: true

require File.expand_path("../../test_helper", __dir__)
require "yaml/store"
require "fileutils"

module Ruber
class FileCacheTest < Minitest::Test
def setup
File.delete(Ruber.configuration.file_cache_path) if File.exist?(Ruber.configuration.file_cache_path)

@cache = FileCache.new
end

def teardown
@cache.clear
end

def test_initialize_raises_error_if_no_file_path
Ruber.configuration.stub :file_cache_path, nil do
assert_raises(RuntimeError, "FileCache requires a file path") do
FileCache.new
end
end
end

def test_write_and_read
@cache.write("foo", "bar")
assert_equal "bar", @cache.read("foo")
end

def test_write_and_read_complex_object
@cache.write("foo", { foo: "bar", bar: "baz" })
assert_equal "bar", @cache.read("foo")[:foo]
assert_equal "baz", @cache.read("foo")[:bar]
end

def test_delete
@cache.write("key", "value")
@cache.delete("key")
assert_nil @cache.read("key")
end

def test_clear
@cache.write("key1", "value1")
@cache.write("key2", "value2")

@cache.clear
assert_nil @cache.read("key1")
assert_nil @cache.read("key2")
end
Comment on lines +44 to +51
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Tengo una duda respecto a este test.

¿Qué pasa si volvés a escribir la caché después de hacer .clear? se vuelve a crear el archivo? tal vez se puede agregar al test ese caso para que quede claro.

Porque veo que el archivo se borra y no logro ver si se vuelve a crear.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Sí, lo vuelve a crear. Ahí agrego un test más.


def test_clear_and_write_again
@cache.write("key1", "value1")
@cache.write("key2", "value1")
@cache.clear
@cache.write("key1", "value2")

assert "value2", @cache.read("key1")
assert_nil @cache.read("key2")
end
end
end
11 changes: 10 additions & 1 deletion test/test_helper.rb
Original file line number Diff line number Diff line change
@@ -1,7 +1,16 @@
# frozen_string_literal: true

$LOAD_PATH.unshift File.expand_path("../lib", __dir__)
require "ruber"

require "minitest/autorun"
require "webmock/minitest"

require "ruber"

class Minitest::Test # rubocop:disable Style/ClassAndModuleChildren
def before_setup
super

Ruber.configuration.file_cache_path = "file_cache_test.yaml"
end
end