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
14
15
16
17
# File 'lib/volt/server/rack/asset_files.rb', line 5

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

  # Include each of the default included components
  Volt.config.default_components.each do |def_comp_name|
    component(def_comp_name)
  end

  component(component_name)
end

Instance Method Details

#add_assets(path) ⇒ Object



72
73
74
75
76
77
# File 'lib/volt/server/rack/asset_files.rb', line 72

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

#component(name) ⇒ Object



33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
# File 'lib/volt/server/rack/asset_files.rb', line 33

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

    # Get the path to the component
    component_path = @component_paths.component_paths(name)

    unless component_path
      fail "Unable to find component '#{name}', make sure the gem is included in your Gemfile"
    end

    component_path.each do |path|
      # Load the dependencies
      load_dependencies(path)

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

#component_pathsObject



68
69
70
# File 'lib/volt/server/rack/asset_files.rb', line 68

def component_paths
  @components
end

#componentsObject



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

def components
  @included_components.keys
end

#css_file(url) ⇒ Object



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

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

#css_filesObject



103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
# File 'lib/volt/server/rack/asset_files.rb', line 103

def css_files
  css_files = []
  @assets.each do |type, path|
    case type
      when :folder
        # Don't import any css/scss files that start with an underscore, so scss partials
        # aren't imported by default:
        #  http://sass-lang.com/guide
        css_files += Dir["#{path}/**/[^_]*.{css,scss}"].sort.map do |folder|
          '/assets' + folder[path.size..-1].gsub(/[.]scss$/, '')
        end
      when :css_file
        css_files << path
    end
  end

  css_files.uniq
end

#javascript_file(url) ⇒ Object



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

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

#javascript_files(opal_files) ⇒ Object



79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
# File 'lib/volt/server/rack/asset_files.rb', line 79

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



19
20
21
22
23
24
25
26
27
28
29
30
31
# File 'lib/volt/server/rack/asset_files.rb', line 19

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, dependencies_file, 0)
  end
end