Class: Rails::Paths::Root

Inherits:
Object 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 enumerable and allows you to easily add extra paths:

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

path << "lib/controllers"
path.to_ary.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

Constructor Details

#initialize(path) ⇒ Root

Returns a new instance of Root.



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

def initialize(path)
  @current = nil
  @path = path
  @root = {}
end

Instance Attribute Details

#pathObject

Returns the value of attribute path



45
46
47
# File 'railties/lib/rails/paths.rb', line 45

def path
  @path
end

Instance Method Details

#[](path) ⇒ Object



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

def [](path)
  @root[path]
end

#[]=(path, value) ⇒ Object



53
54
55
56
# File 'railties/lib/rails/paths.rb', line 53

def []=(path, value)
  glob = self[path] ? self[path].glob : nil
  add(path, with: value, glob: glob)
end

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



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

def add(path, options = {})
  with = Array(options.fetch(:with, path))
  @root[path] = Path.new(self, path, with, options)
end

#all_pathsObject



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

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

#autoload_onceObject



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

def autoload_once
  filter_by { |p| p.autoload_once? }
end

#autoload_pathsObject



91
92
93
# File 'railties/lib/rails/paths.rb', line 91

def autoload_paths
  filter_by { |p| p.autoload? }
end

#eager_loadObject



87
88
89
# File 'railties/lib/rails/paths.rb', line 87

def eager_load
  filter_by { |p| p.eager_load? }
end

#keysObject



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

def keys
  @root.keys
end

#load_pathsObject



95
96
97
# File 'railties/lib/rails/paths.rb', line 95

def load_paths
  filter_by { |p| p.load_path? }
end

#valuesObject



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

def values
  @root.values
end

#values_at(*list) ⇒ Object



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

def values_at(*list)
  @root.values_at(*list)
end