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
6 7 8 |
# File 'lib/volt/server/rack/component_paths.rb', line 6 def initialize(root = nil) @root = root || Dir.pwd end |
Instance Method Details
#app_folders ⇒ Object
Yield for every folder where we might find components
11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
# File 'lib/volt/server/rack/component_paths.rb', line 11 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.uniq 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
107 108 109 110 111 112 113 114 115 116 |
# File 'lib/volt/server/rack/component_paths.rb', line 107 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
96 97 98 99 100 101 102 103 104 |
# File 'lib/volt/server/rack/component_paths.rb', line 96 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
36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 |
# File 'lib/volt/server/rack/component_paths.rb', line 36 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.
58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 |
# File 'lib/volt/server/rack/component_paths.rb', line 58 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 # component_names = [] # app_folders do |app_folder| # Dir["#{app_folder}/*"].map {|cp| cp[/[^\/]+$/] }.each do |component_name| # component_names << component_name # end # end # # # Load in all views # component_names.uniq.each do |component_name| # code = Volt::ComponentCode.new(component_name, self).code # eval(code) # end end end |