Class: ComponentPaths

Inherits:
Object show all
Defined in:
lib/volt/server/rack/component_paths.rb

Instance Method Summary collapse

Constructor Details

#initialize(root = nil) ⇒ ComponentPaths

Returns a new instance of ComponentPaths.



2
3
4
# File 'lib/volt/server/rack/component_paths.rb', line 2

def initialize(root=nil)
  @root = root || Dir.pwd
end

Instance Method Details

#app_foldersObject

Yield for every folder where we might find components



7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# File 'lib/volt/server/rack/component_paths.rb', line 7

def app_folders
  # Find all app folders
  @app_folders ||= begin
    app_folders = ["#{@root}/app", "#{@root}/vendor/app"].map {|f| File.expand_path(f) }
    
    # Gem folders with volt in them
    # TODO: we should probably qualify this a bit more
    app_folders += Gem.loaded_specs.values.map { |g| g.full_gem_path }.reject {|g| g !~ /volt/ }.map {|f| f + '/app' }

    app_folders
  end
  
  # Yield each app folder and return a flattened array with
  # the results
  
  files = []
  @app_folders.each do |app_folder|
    files << yield(app_folder)
  end
  
  return files.flatten
end

#asset_foldersObject

Return every asset folder we need to serve from



59
60
61
62
63
64
65
66
67
68
# File 'lib/volt/server/rack/component_paths.rb', line 59

def asset_folders
  folders = []
  app_folders do |app_folder|
    Dir["#{app_folder}/*/assets"].each do |asset_folder|
      folders << yield(asset_folder)
    end
  end
  
  folders.flatten
end

#component_path(name) ⇒ Object



48
49
50
51
52
53
54
55
56
# File 'lib/volt/server/rack/component_paths.rb', line 48

def component_path(name)
  folders = components[name]
  
  if folders
    return folders.first
  else
    return nil
  end
end

#componentsObject



30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
# File 'lib/volt/server/rack/component_paths.rb', line 30

def components
  return @components if @components
  
  @components = {}
  app_folders do |app_folder|
    Dir["#{app_folder}/*"].each do |folder|
      if File.directory?(folder)
        folder_name = folder[/[^\/]+$/]
        
        @components[folder_name] ||= []
        @components[folder_name] << folder
      end
    end
  end
  
  return @components
end