aboutsummaryrefslogtreecommitdiffstats
path: root/railties/test/paths_test.rb
diff options
context:
space:
mode:
authorYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-06-26 12:12:20 -0700
committerYehuda Katz + Carl Lerche <ykatz+clerche@engineyard.com>2009-06-26 15:37:52 -0700
commitb0774281ef4008f2c249b1e85bbdb1f28629d18f (patch)
treeaba986e7bc2c43656cc2dcec7acf6ff0653f062e /railties/test/paths_test.rb
parent728e3b4047a55ead0f5fbb3bc57095b2b273352b (diff)
downloadrails-b0774281ef4008f2c249b1e85bbdb1f28629d18f.tar.gz
rails-b0774281ef4008f2c249b1e85bbdb1f28629d18f.tar.bz2
rails-b0774281ef4008f2c249b1e85bbdb1f28629d18f.zip
Update paths to support an explicit root and multiple paths per category
Diffstat (limited to 'railties/test/paths_test.rb')
-rw-r--r--railties/test/paths_test.rb120
1 files changed, 91 insertions, 29 deletions
diff --git a/railties/test/paths_test.rb b/railties/test/paths_test.rb
index 0da31b467a..1fad324015 100644
--- a/railties/test/paths_test.rb
+++ b/railties/test/paths_test.rb
@@ -2,18 +2,10 @@ require 'abstract_unit'
module Rails
class Application
- class Path
- attr_accessor :path, :root #, :glob, :load_once, :eager
-
- def initialize(path, root = nil)
- @children = {}
- @path = path
- @root = root || self
- end
-
+ module PathParent
def method_missing(id, *args)
name = id.to_s
-
+
if name =~ /^(.*)=$/
@children[$1] = Path.new(args.first, @root)
elsif path = @children[name]
@@ -22,47 +14,117 @@ module Rails
super
end
end
-
- def path
- @path.index('/') == 0 ? @path : File.join(@root.path, @path)
+ end
+
+ class Root
+ include PathParent
+
+ attr_reader :path
+ def initialize(path)
+ raise unless path.is_a?(String)
+
+ @children = {}
+
+ # TODO: Move logic from set_root_path initializer
+ @path = File.expand_path(path)
+ @root = self
+ end
+ end
+
+ class Path
+ include PathParent
+
+ attr_reader :path #, :glob, :load_once, :eager
+
+ def initialize(path, root)
+ @children = {}
+ @root = root
+ @paths = [path].flatten
+ end
+
+ def push(path)
+ @paths.push path
+ end
+
+ alias << push
+
+ def unshift(path)
+ @paths.unshift path
+ end
+
+
+ def paths
+ @paths.map do |path|
+ path.index('/') == 0 ? path : File.join(@root.path, path)
+ end
end
-
- alias to_s path
+
+ alias to_a paths
end
end
end
class PathsTest < ActiveSupport::TestCase
-
+
def setup
- @root = Rails::Application::Path.new("/foo/bar")
+ @root = Rails::Application::Root.new("/foo/bar")
end
-
+
test "the paths object is initialized with the root path" do
- root = Rails::Application::Path.new("/fiz/baz")
- assert_equal "/fiz/baz", root.to_s
+ root = Rails::Application::Root.new("/fiz/baz")
+ assert_equal "/fiz/baz", root.path
end
-
+
test "creating a root level path" do
@root.app = "/foo/bar"
- assert_equal "/foo/bar", @root.app.to_s
+ assert_equal ["/foo/bar"], @root.app.to_a
end
-
+
test "relative paths are relative to the paths root" do
@root.app = "app"
- assert_equal "/foo/bar/app", @root.app.to_s
+ assert_equal ["/foo/bar/app"], @root.app.to_a
end
-
+
test "creating a child level path" do
@root.app = "/foo/bar"
@root.app.models = "/foo/bar/baz"
- assert_equal "/foo/bar/baz", @root.app.models.to_s
+ assert_equal ["/foo/bar/baz"], @root.app.models.to_a
end
-
+
test "child level paths are relative from the root" do
@root.app = "/app"
@root.app.models = "baz"
-
- assert_equal "/foo/bar/baz", @root.app.models.to_s
+
+ assert_equal ["/foo/bar/baz"], @root.app.models.to_a
+ end
+
+ test "adding multiple physical paths as an array" do
+ @root.app = ["/app", "/app2"]
+ assert_equal ["/app", "/app2"], @root.app.to_a
+ end
+
+ test "adding multiple physical paths using #push" do
+ @root.app = "/app"
+ @root.app.push "/app2"
+ assert_equal ["/app", "/app2"], @root.app.to_a
+ end
+
+ test "adding multiple physical paths using <<" do
+ @root.app = "/app"
+ @root.app << "/app2"
+ assert_equal ["/app", "/app2"], @root.app.to_a
+ end
+
+ test "adding multiple physical paths using #unshift" do
+ @root.app = "/app"
+ @root.app.unshift "/app2"
+ assert_equal ["/app2", "/app"], @root.app.to_a
+ end
+
+ test "the root can only have one physical path" do
+ assert_raise(RuntimeError) { Rails::Application::Root.new(["/fiz", "/biz"]) }
+ assert_raise(NoMethodError) { @root.push "/biz" }
+ assert_raise(NoMethodError) { @root.unshift "/biz" }
+ assert_raise(NoMethodError) { @root << "/biz" }
end
end \ No newline at end of file