Class: ComponentFiles

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

Overview

Takes in the path to a component and gets all other components required from this one

Instance Method Summary collapse

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
22
# 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
    # puts "ADD VOLT"
    # 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



42
43
44
45
46
47
48
49
# File 'lib/volt/server/rack/component_files.rb', line 42

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_foldersObject

Returns every asset folder that is included from this component. This means this components assets folder and any in the dependency chain.



76
77
78
79
80
81
82
83
# File 'lib/volt/server/rack/component_files.rb', line 76

def asset_folders
  files = []
  @asset_folders.each do |asset_folder|
    files << yield(asset_folder)
  end
  
  return files.flatten
end

#component(name) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
# File 'lib/volt/server/rack/component_files.rb', line 28

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_pathsObject



55
56
57
# File 'lib/volt/server/rack/component_files.rb', line 55

def component_paths
  @components.map {|c| [path_to_component(c), c] }
end

#componentsObject



24
25
26
# File 'lib/volt/server/rack/component_files.rb', line 24

def components
  @components
end

#css_filesObject



104
105
106
107
108
# File 'lib/volt/server/rack/component_files.rb', line 104

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(opal_files) ⇒ Object



86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
# File 'lib/volt/server/rack/component_files.rb', line 86

def javascript_files(opal_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 += opal_files.environment['volt/page/page'].to_a.map {|v| '/assets/' + v.logical_path + '?body=1' }
  else
    opal_js_files << '/assets/volt/page/page.js'
  end
  opal_js_files << '/components/home.js'

  javascript_files.insert(2, *opal_js_files)
  
  return javascript_files
end

#load_child_componentsObject



59
60
61
62
63
64
65
66
67
68
69
70
71
72
# File 'lib/volt/server/rack/component_files.rb', line 59

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



51
52
53
# File 'lib/volt/server/rack/component_files.rb', line 51

def path_to_component(name=nil)
  @component_paths.component_path(name || @component_name)
end