Class: AssetFiles

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

Overview

Used to get a list of the assets and other included components from the dependencies.rb files.

Instance Method Summary collapse

Constructor Details

#initialize(component_name, component_paths) ⇒ AssetFiles

Returns a new instance of AssetFiles.



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

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



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

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

#component(name) ⇒ Object



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

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



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

def component_paths
  return @components
end

#componentsObject



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

def components
  @included_components.keys
end

#css_file(url) ⇒ Object



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

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

#css_filesObject



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

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



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

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

#javascript_files(opal_files) ⇒ Object



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

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/main.js'

  javascript_files += opal_js_files

  return javascript_files
end

#load_dependencies(path) ⇒ Object



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

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