Class: Volt::ComponentPaths
- Defined in:
- lib/volt/server/rack/component_paths.rb
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_paths(name) ⇒ Object
Returns all paths 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.
4 5 6 |
# File 'lib/volt/server/rack/component_paths.rb', line 4 def initialize(root = nil) @root = root || Dir.pwd end |
Instance Method Details
#app_folders ⇒ Object
Yield for every folder where we might find components
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
# File 'lib/volt/server/rack/component_paths.rb', line 9 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(&: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 files.flatten end |
#asset_folders ⇒ Object
Return every asset folder we need to serve from
91 92 93 94 95 96 97 98 99 100 |
# File 'lib/volt/server/rack/component_paths.rb', line 91 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_paths(name) ⇒ Object
Returns all paths for a specific component
80 81 82 83 84 85 86 87 88 |
# File 'lib/volt/server/rack/component_paths.rb', line 80 def component_paths(name) folders = components[name] if folders return folders else return nil end end |
#components ⇒ Object
returns an array of every folder that is a component
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/volt/server/rack/component_paths.rb', line 34 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[/[^\/]+$/] # Add in the folder if it's not alreay in there folders = (@components[folder_name] ||= []) unless folders.include?(folder) folders << folder end end end end @components end |
#require_in_components ⇒ Object
Makes each components classes available on the load path, require classes.
56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 |
# File 'lib/volt/server/rack/component_paths.rb', line 56 def require_in_components if RUBY_PLATFORM == 'opal' else app_folders do |app_folder| $LOAD_PATH.unshift(app_folder) # Sort so we get consistent load order across platforms Dir["#{app_folder}/*/{controllers,models,tasks}/*.rb"].each do |ruby_file| path = ruby_file.gsub(/^#{app_folder}\//, '')[0..-4] require(path) end if Volt.server? # Add models to page Dir["#{app_folder}/*/models/*.rb"].each do |ruby_file| class_name = File.basename(ruby_file).gsub(/[.]rb$/, '') $page.add_model(class_name) end end end end end |