Class: ComponentPaths
Overview
ComponentPaths gives an array of every folder where you find a component.
Instance Method Summary collapse
-
#app_folders ⇒ Object
Yield for every folder where we might find components.
-
#asset_folders ⇒ Object
Return every asset folder we need to serve from.
-
#component_path(name) ⇒ Object
Returns the path for a specific component.
-
#components ⇒ Object
returns an array of every folder that is a component.
-
#initialize(root = nil) ⇒ ComponentPaths
constructor
A new instance of ComponentPaths.
-
#require_in_components ⇒ Object
Makes each components classes available on the load path, require classes.
Constructor Details
#initialize(root = nil) ⇒ ComponentPaths
Returns a new instance of ComponentPaths.
3 4 5 |
# File 'lib/volt/server/rack/component_paths.rb', line 3 def initialize(root=nil) @root = root || Dir.pwd end |
Instance Method Details
#app_folders ⇒ Object
Yield for every folder where we might find components
8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
# File 'lib/volt/server/rack/component_paths.rb', line 8 def app_folders # Find all app folders @app_folders ||= begin volt_app = File.(File.join(File.dirname(__FILE__), "../../../../app")) app_folders = [volt_app, "#{@root}/app", "#{@root}/vendor/app"].map {|f| File.(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_folders ⇒ Object
Return every asset folder we need to serve from
87 88 89 90 91 92 93 94 95 96 |
# File 'lib/volt/server/rack/component_paths.rb', line 87 def asset_folders folders = [] app_folders do |app_folder| Dir["#{app_folder}/*/assets"].sort.each do |asset_folder| folders << yield(asset_folder) end end folders.flatten end |
#component_path(name) ⇒ Object
Returns the path for a specific component
76 77 78 79 80 81 82 83 84 |
# File 'lib/volt/server/rack/component_paths.rb', line 76 def component_path(name) folders = components[name] if folders return folders.first else return nil end end |
#components ⇒ Object
returns an array of every folder that is a component
33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 |
# File 'lib/volt/server/rack/component_paths.rb', line 33 def components return @components if @components @components = {} app_folders do |app_folder| Dir["#{app_folder}/*"].sort.each do |folder| if File.directory?(folder) folder_name = folder[/[^\/]+$/] @components[folder_name] ||= [] @components[folder_name] << folder end end end return @components end |
#require_in_components ⇒ Object
Makes each components classes available on the load path, require classes.
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 |
# File 'lib/volt/server/rack/component_paths.rb', line 52 def require_in_components if RUBY_PLATFORM == 'opal' else app_folders do |app_folder| $LOAD_PATH.unshift(app_folder) Dir["#{app_folder}/*/{controllers,models}/*.rb"].each do |ruby_file| path = ruby_file.gsub(/^#{app_folder}\//, '')[0..-4] require(path) end end end # add each tasks folder directly components.each do |name,component_folders| component_folders.each do |component_folder| Dir["#{component_folder}/tasks"].sort.each do |tasks_folder| $LOAD_PATH.unshift(tasks_folder) end end end end |