diff --git a/lib/linguist/file_blob.rb b/lib/linguist/file_blob.rb new file mode 100644 index 00000000..b0053daf --- /dev/null +++ b/lib/linguist/file_blob.rb @@ -0,0 +1,21 @@ +require 'linguist/blob_helper' + +module Linguist + class FileBlob + include BlobHelper + + def initialize(path, name = path) + @path, @name = path, name + end + + attr_reader :name + + def data + File.read(@path) + end + + def size + File.size(@path) + end + end +end diff --git a/lib/linguist/repository.rb b/lib/linguist/repository.rb index f4a3e689..2306e42b 100644 --- a/lib/linguist/repository.rb +++ b/lib/linguist/repository.rb @@ -1,5 +1,23 @@ +require 'linguist/file_blob' + module Linguist class Repository + # Public: Initialize a new Repository from a File directory + # + # base_path - A path String + # + # Returns a Repository + def self.from_directory(base_path) + paths = Dir["#{base_path}/**/*"].inject({}) do |h, path| + if File.file?(path) + name = path.sub("#{base_path}/", '') + h[name] = FileBlob.new(path, name) + end + h + end + new(paths) + end + # Public: Initialize a new Repository # # paths - A Hash of String path keys and Blob values. diff --git a/test/test_blob.rb b/test/test_blob.rb index e5ebb80b..55ace58d 100644 --- a/test/test_blob.rb +++ b/test/test_blob.rb @@ -1,4 +1,4 @@ -require 'linguist/blob' +require 'linguist/file_blob' require 'test/unit' require 'mime/types' @@ -6,27 +6,9 @@ require 'mime/types' class TestBlob < Test::Unit::TestCase include Linguist - class FixtureBlob - def initialize(name) - @name = name - @path = File.expand_path("../fixtures/blob/#{name}", __FILE__) - end - - def name - @name - end - - def data - File.read(@path) - end - - def size - File.size(@path) - end - end - def blob(name) - Blob.new(FixtureBlob.new(name)) + path = File.expand_path("../fixtures/blob/#{name}", __FILE__) + FileBlob.new(path, name) end def test_name diff --git a/test/test_repository.rb b/test/test_repository.rb index eceba1bd..13639eb2 100644 --- a/test/test_repository.rb +++ b/test/test_repository.rb @@ -5,34 +5,8 @@ require 'test/unit' class TestRepository < Test::Unit::TestCase include Linguist - class FixtureBlob - def initialize(name, path) - @name = name - @path = path - end - - def name - @name - end - - def data - File.read(@path) - end - - def size - File.size(@path) - end - end - def repo(base_path) - paths = Dir["#{base_path}/**/*"].inject({}) do |h, path| - if File.file?(path) - name = path.sub("#{base_path}/", '') - h[name] = Blob.new(FixtureBlob.new(name, path)) - end - h - end - Repository.new(paths) + Repository.from_directory(base_path) end def linguist_repo