Class: Rails::Paths::Path

Inherits:
Object show all
Includes:
Enumerable
Defined in:
railties/lib/rails/paths.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Enumerable

#as_json, #compact_blank, #exclude?, #excluding, #including, #index_by, #index_with, #many?, #pluck, #sum, #without

Constructor Details

#initialize(root, current, paths, options = {}) ⇒ Path

Returns a new instance of Path.



116
117
118
119
120
121
122
123
124
125
126
127
# File 'railties/lib/rails/paths.rb', line 116

def initialize(root, current, paths, options = {})
  @paths   = paths
  @current = current
  @root    = root
  @glob    = options[:glob]
  @exclude = options[:exclude]

  options[:autoload_once] ? autoload_once! : skip_autoload_once!
  options[:eager_load]    ? eager_load!    : skip_eager_load!
  options[:autoload]      ? autoload!      : skip_autoload!
  options[:load_path]     ? load_path!     : skip_load_path!
end

Instance Attribute Details

#globObject

Returns the value of attribute glob



114
115
116
# File 'railties/lib/rails/paths.rb', line 114

def glob
  @glob
end

Instance Method Details

#<<(path) ⇒ Object Also known as: push



168
169
170
# File 'railties/lib/rails/paths.rb', line 168

def <<(path)
  @paths << path
end

#absolute_currentObject

:nodoc:



129
130
131
# File 'railties/lib/rails/paths.rb', line 129

def absolute_current # :nodoc:
  File.expand_path(@current, @root.path)
end

#childrenObject



133
134
135
136
137
138
# File 'railties/lib/rails/paths.rb', line 133

def children
  keys = @root.keys.find_all { |k|
    k.start_with?(@current) && k != @current
  }
  @root.values_at(*keys.sort)
end

#concat(paths) ⇒ Object



173
174
175
# File 'railties/lib/rails/paths.rb', line 173

def concat(paths)
  @paths.concat paths
end

#each(&block) ⇒ Object



164
165
166
# File 'railties/lib/rails/paths.rb', line 164

def each(&block)
  @paths.each(&block)
end

#existentObject

Returns all expanded paths but only if they exist in the filesystem.



217
218
219
220
221
222
223
224
225
226
# File 'railties/lib/rails/paths.rb', line 217

def existent
  expanded.select do |f|
    does_exist = File.exist?(f)

    if !does_exist && File.symlink?(f)
      raise "File #{f.inspect} is a symlink that does not point to a valid file"
    end
    does_exist
  end
end

#existent_directoriesObject



228
229
230
# File 'railties/lib/rails/paths.rb', line 228

def existent_directories
  expanded.select { |d| File.directory?(d) }
end

#expandedObject Also known as: to_a

Expands all paths against the root and return all unique values.



198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'railties/lib/rails/paths.rb', line 198

def expanded
  raise "You need to set a path root" unless @root.path
  result = []

  each do |path|
    path = File.expand_path(path, @root.path)

    if @glob && File.directory?(path)
      result.concat files_in(path)
    else
      result << path
    end
  end

  result.uniq!
  result
end

#extensionsObject

:nodoc:



193
194
195
# File 'railties/lib/rails/paths.rb', line 193

def extensions # :nodoc:
  $1.split(",") if @glob =~ /\{([\S]+)\}/
end

#firstObject



140
141
142
# File 'railties/lib/rails/paths.rb', line 140

def first
  expanded.first
end

#lastObject



144
145
146
# File 'railties/lib/rails/paths.rb', line 144

def last
  expanded.last
end

#pathsObject



185
186
187
188
189
190
191
# File 'railties/lib/rails/paths.rb', line 185

def paths
  raise "You need to set a path root" unless @root.path

  map do |p|
    Pathname.new(@root.path).join(p)
  end
end

#to_aryObject



181
182
183
# File 'railties/lib/rails/paths.rb', line 181

def to_ary
  @paths
end

#unshift(*paths) ⇒ Object



177
178
179
# File 'railties/lib/rails/paths.rb', line 177

def unshift(*paths)
  @paths.unshift(*paths)
end