Class: Rails::Paths::Root

Inherits:
Hash show all
Defined in:
railties/lib/rails/paths.rb

Overview

This object is an extended hash that behaves as root of the Rails::Paths system. It allows you to collect information about how you want to structure your application paths by a Hash like API. It requires you to give a physical path on initialization.

root = Root.new "/rails"
root.add "app/controllers", :eager_load => true

The command above creates a new root object and add “app/controllers” as a path. This means we can get a Rails::Paths::Path object back like below:

path = root["app/controllers"]
path.eager_load?               # => true
path.is_a?(Rails::Paths::Path) # => true

The Path object is simply an array and allows you to easily add extra paths:

path.is_a?(Array) # => true
path.inspect      # => ["app/controllers"]

path << "lib/controllers"
path.inspect      # => ["app/controllers", "lib/controllers"]

Notice that when you add a path using add, the path object created already contains the path with the same path value given to add. In some situations, you may not want this behavior, so you can give :with as option.

root.add "config/routes", :with => "config/routes.rb"
root["config/routes"].inspect # => ["config/routes.rb"]

The add method accepts the following options as arguments: eager_load, autoload, autoload_once and glob.

Finally, the Path object also provides a few helpers:

root = Root.new "/rails"
root.add "app/controllers"

root["app/controllers"].expanded # => ["/rails/app/controllers"]
root["app/controllers"].existent # => ["/rails/app/controllers"]

Check the Rails::Paths::Path documentation for more information.

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods inherited from Hash

#as_json, #assert_valid_keys, #deep_dup, #deep_merge, #deep_merge!, #diff, #encode_json, #except, #except!, #extract!, #extractable_options?, from_xml, #reverse_merge, #reverse_merge!, #slice, #slice!, #stringify_keys, #stringify_keys!, #symbolize_keys, #symbolize_keys!, #to_param, #to_xml, #with_indifferent_access

Constructor Details

#initialize(path) ⇒ Root

Returns a new instance of Root.



49
50
51
52
53
54
55
# File 'railties/lib/rails/paths.rb', line 49

def initialize(path)
  raise "Argument should be a String of the physical root path" if path.is_a?(Array)
  @current = nil
  @path = path
  @root = self
  super()
end

Instance Attribute Details

#pathObject

Returns the value of attribute path



47
48
49
# File 'railties/lib/rails/paths.rb', line 47

def path
  @path
end

Instance Method Details

#[]=(path, value) ⇒ Object



57
58
59
60
# File 'railties/lib/rails/paths.rb', line 57

def []=(path, value)
  value = Path.new(self, path, value) unless value.is_a?(Path)
  super(path, value)
end

#add(path, options = {}) ⇒ Object



62
63
64
65
# File 'railties/lib/rails/paths.rb', line 62

def add(path, options={})
  with = options[:with] || path
  self[path] = Path.new(self, path, with, options)
end

#all_pathsObject



67
68
69
# File 'railties/lib/rails/paths.rb', line 67

def all_paths
  values.tap { |v| v.uniq! }
end

#autoload_onceObject



71
72
73
# File 'railties/lib/rails/paths.rb', line 71

def autoload_once
  filter_by(:autoload_once?)
end

#autoload_pathsObject



79
80
81
# File 'railties/lib/rails/paths.rb', line 79

def autoload_paths
  filter_by(:autoload?)
end

#eager_loadObject



75
76
77
# File 'railties/lib/rails/paths.rb', line 75

def eager_load
  filter_by(:eager_load?)
end

#load_pathsObject



83
84
85
# File 'railties/lib/rails/paths.rb', line 83

def load_paths
  filter_by(:load_path?)
end