Class: Volt::AssetFiles

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

Instance Method Summary collapse

Constructor Details

#initialize(component_name, component_paths) ⇒ AssetFiles

Returns a new instance of AssetFiles.



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

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



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

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

#component(name) ⇒ Object



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

def component(name)
  unless @included_components[name]
    # Track that we added
    @included_components[name] = true

    # Get the path to the component
    @component_paths.component_paths(name).each do |path|

      # Load the dependencies
      load_dependencies(path)

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

#component_pathsObject



59
60
61
# File 'lib/volt/server/rack/asset_files.rb', line 59

def component_paths
  @components
end

#componentsObject



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

def components
  @included_components.keys
end

#css_file(url) ⇒ Object



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

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

#css_filesObject



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

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

  css_files.uniq
end

#javascript_file(url) ⇒ Object



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

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

#javascript_files(opal_files) ⇒ Object



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

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

  javascript_files.uniq
end

#load_dependencies(path) ⇒ Object



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

def load_dependencies(path)
  if path
    dependencies_file = File.join(path, 'config/dependencies.rb')
  else
    fail "Unable to find component #{component_name.inspect}"
  end

  if File.exist?(dependencies_file)
    # Run the dependencies file in this asset files context
    code = File.read(dependencies_file)
    instance_eval(code)
  end
end