Class: ComponentFiles
Overview
Takes in the path to a component and gets all other components required from this one
Instance Method Summary collapse
- #add_asset_folder(component_name) ⇒ Object
-
#asset_folders ⇒ Object
Returns every asset folder that is included from this component.
- #component(name) ⇒ Object
- #component_paths ⇒ Object
- #components ⇒ Object
- #css_files ⇒ Object
-
#initialize(component_name, component_paths, main_component = false) ⇒ ComponentFiles
constructor
A new instance of ComponentFiles.
- #javascript_files ⇒ Object
- #load_child_components ⇒ Object
- #path_to_component(name = nil) ⇒ Object
Constructor Details
#initialize(component_name, component_paths, main_component = false) ⇒ ComponentFiles
Returns a new instance of ComponentFiles.
7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
# File 'lib/volt/server/rack/component_files.rb', line 7 def initialize(component_name, component_paths, main_component=false) @component_name = component_name @component_paths = component_paths @asset_folders = [] @components = [component_name] @main_component = main_component if @main_component # Add in volt's JS files first component('volt') end load_child_components add_asset_folder(component_name) end |
Instance Method Details
#add_asset_folder(component_name) ⇒ Object
41 42 43 44 45 46 47 48 |
# File 'lib/volt/server/rack/component_files.rb', line 41 def add_asset_folder(component_name) path = path_to_component(component_name) asset_folder = File.join(path, 'assets') if File.directory?(asset_folder) @asset_folders << asset_folder end end |
#asset_folders ⇒ Object
Returns every asset folder that is included from this component. This means this components assets folder and any in the dependency chain.
75 76 77 78 79 80 81 82 |
# File 'lib/volt/server/rack/component_files.rb', line 75 def asset_folders files = [] @asset_folders.each do |asset_folder| files << yield(asset_folder) end return files.flatten end |
#component(name) ⇒ Object
27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/volt/server/rack/component_files.rb', line 27 def component(name) # Load any sub-requires child_files = ComponentFiles.new(name, @component_paths) new_components = child_files.components # remove any we already have new_components = new_components - @components new_components.each {|nc| add_asset_folder(nc) } @components += new_components return @components end |
#component_paths ⇒ Object
54 55 56 |
# File 'lib/volt/server/rack/component_files.rb', line 54 def component_paths @components.map {|c| [path_to_component(c), c] } end |
#components ⇒ Object
23 24 25 |
# File 'lib/volt/server/rack/component_files.rb', line 23 def components @components end |
#css_files ⇒ Object
103 104 105 106 107 |
# File 'lib/volt/server/rack/component_files.rb', line 103 def css_files asset_folders do |asset_folder| Dir["#{asset_folder}/**/*.{css,scss}"].map {|path| '/assets' + path[asset_folder.size..-1].gsub(/[.]scss$/, '') } end end |
#javascript_files ⇒ Object
85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 |
# File 'lib/volt/server/rack/component_files.rb', line 85 def javascript_files javascript_files = asset_folders do |asset_folder| Dir["#{asset_folder}/**/*.js"].map {|path| '/assets' + path[asset_folder.size..-1] } end opal_js_files = [] if Volt.source_maps? opal_js_files << environment['volt/templates/page'].to_a.map {|v| '/assets/' + v.logical_path + '?body=1' } else opal_js_files << '/assets/volt/templates/page.js' end opal_js_files << '/components/home.js' javascript_files.insert(2, *opal_js_files) return javascript_files end |
#load_child_components ⇒ Object
58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'lib/volt/server/rack/component_files.rb', line 58 def load_child_components path = path_to_component if path dependencies_file = File.join(path_to_component, "config/dependencies.rb") else raise "Unable to find component #{@component_name.inspect}" end if File.exists?(dependencies_file) # Run the dependencies file in this ComponentFiles context code = File.read(dependencies_file) instance_eval(code) end end |
#path_to_component(name = nil) ⇒ Object
50 51 52 |
# File 'lib/volt/server/rack/component_files.rb', line 50 def path_to_component(name=nil) @component_paths.component_path(name || @component_name) end |