From d28e5b94a7ef90cd9e569f5c12485814fcadd70a Mon Sep 17 00:00:00 2001 From: Yves Senn Date: Fri, 23 Jan 2015 15:45:34 +0100 Subject: introduce `ActiveSupport::Testing::FileFixtures`. It's a thin layer to provide easy access to sample files throughout test-cases. This adds the directory `test/fixtures/files` to newly generated applications. --- .../lib/active_support/testing/file_fixtures.rb | 34 ++++++++++++++++++++++ 1 file changed, 34 insertions(+) create mode 100644 activesupport/lib/active_support/testing/file_fixtures.rb (limited to 'activesupport/lib/active_support/testing/file_fixtures.rb') diff --git a/activesupport/lib/active_support/testing/file_fixtures.rb b/activesupport/lib/active_support/testing/file_fixtures.rb new file mode 100644 index 0000000000..4c6a0801b8 --- /dev/null +++ b/activesupport/lib/active_support/testing/file_fixtures.rb @@ -0,0 +1,34 @@ +module ActiveSupport + module Testing + # Adds simple access to sample files called file fixtures. + # File fixtures are normal files stored in + # ActiveSupport::TestCase.file_fixture_path. + # + # File fixtures are represented as +Pathname+ objects. + # This makes it easy to extract specific information: + # + # file_fixture("example.txt").read # get the file's content + # file_fixture("example.mp3").size # get the file size + module FileFixtures + extend ActiveSupport::Concern + + included do + class_attribute :file_fixture_path, instance_writer: false + end + + # Returns a +Pathname+ to the fixture file named +fixture_name+. + # + # Raises ArgumentError if +fixture_name+ can't be found. + def file_fixture(fixture_name) + path = Pathname.new(File.join(file_fixture_path, fixture_name)) + + if path.exist? + path + else + msg = "the directory '%s' does not contain a file named '%s'" + raise ArgumentError, msg % [file_fixture_path, fixture_name] + end + end + end + end +end -- cgit v1.2.3