Class: AssetFiles

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

Overview

Used to get a list of the assets from the dependencies files.

Instance Method Summary collapse

Constructor Details

#initialize(component_name, component_paths) ⇒ AssetFiles

Returns a new instance of AssetFiles.



3
4
5
6
7
8
9
10
11
# File 'lib/volt/server/rack/asset_files.rb', line 3

def initialize(component_name, component_paths)
  @component_paths = component_paths
  @assets = []
  @included_components = {}
  @components = []
  
  component('volt')
  component(component_name)
end

Instance Method Details

#add_assets(path) ⇒ Object



60
61
62
63
64
65
# File 'lib/volt/server/rack/asset_files.rb', line 60

def add_assets(path)
  asset_folder = File.join(path, 'assets')
  if File.directory?(asset_folder)
    @assets << [:folder, asset_folder]
  end
end

#component(name) ⇒ Object



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

def component(name)
  unless @included_components[name]
    # Get the path to the component
    path = @component_paths.component_path(name)

    # Track that we added
    @included_components[name] = true

    # Load the dependencies
    load_dependencies(path)
    
    # Add any assets
    add_assets(path)
    @components << [path, name]
  end
end

#component_pathsObject



56
57
58
# File 'lib/volt/server/rack/asset_files.rb', line 56

def component_paths
  return @components
end

#componentsObject



44
45
46
# File 'lib/volt/server/rack/asset_files.rb', line 44

def components
  @included_components.keys
end

#css_file(url) ⇒ Object



52
53
54
# File 'lib/volt/server/rack/asset_files.rb', line 52

def css_file(url)
  @assets << [:css_file, url]
end

#css_filesObject



92
93
94
95
96
97
98
99
100
101
102
103
104
# File 'lib/volt/server/rack/asset_files.rb', line 92

def css_files
  css_files = []
  @assets.each do |type, path|
    case type
    when :folder
      css_files += Dir["#{path}/**/*.{css,scss}"].sort.map {|folder| '/assets' + folder[path.size..-1].gsub(/[.]scss$/, '') }
    when :css_file
      css_files << path
    end
  end
  
  return css_files
end

#javascript_file(url) ⇒ Object



48
49
50
# File 'lib/volt/server/rack/asset_files.rb', line 48

def javascript_file(url)
  @assets << [:javascript_file, url]
end

#javascript_files(opal_files) ⇒ Object



68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
# File 'lib/volt/server/rack/asset_files.rb', line 68

def javascript_files(opal_files)
  javascript_files = []
  @assets.each do |type, path|
    case type
    when :folder
      javascript_files += Dir["#{path}/**/*.js"].sort.map {|folder| '/assets' + folder[path.size..-1] }
    when :javascript_file
      javascript_files << path
    end
  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 += opal_js_files
  
  return javascript_files
end

#load_dependencies(path) ⇒ Object



13
14
15
16
17
18
19
20
21
22
23
24
25
# File 'lib/volt/server/rack/asset_files.rb', line 13

def load_dependencies(path)
  if path
    dependencies_file = File.join(path, "config/dependencies.rb")
  else
    raise "Unable to find component #{component_name.inspect}"
  end
  
  if File.exists?(dependencies_file)
    # Run the dependencies file in this asset files context
    code = File.read(dependencies_file)
    instance_eval(code)
  end
end