Class: Volt::OpalFiles

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(builder, app_path, component_paths) ⇒ OpalFiles

Returns a new instance of OpalFiles.



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
# File 'lib/volt/server/rack/opal_files.rb', line 15

def initialize(builder, app_path, component_paths)
  Opal::Processor.source_map_enabled = Volt.source_maps?
  Opal::Processor.const_missing_enabled = true

  # Setup Opal paths

  # Add the lib directory to the load path
  Opal.append_path(Volt.root + '/app')
  Opal.append_path(Volt.root + '/lib')

  Gem.loaded_specs.values.select {|gem| gem.name =~ /^(volt|ejson_ext)/ }
  .each do |gem|
    ['app', 'lib'].each do |folder|
      path = gem.full_gem_path + "/#{folder}"

      Opal.append_path(path) if Dir.exist?(path)
    end
  end

  # Don't run arity checks in production
  # Opal::Processor.arity_check_enabled = !Volt.env.production?
  # Opal::Processor.dynamic_require_severity = :raise

  server = Opal::Server.new(prefix: '/')

  @component_paths                   = component_paths
  # @environment                       = Opal::Environment.new
  @environment                       = server.sprockets

  # Since the scope changes in builder blocks, we need to capture
  # environment in closure
  environment                        = @environment

  environment.cache = Sprockets::Cache::FileStore.new('./tmp')

  # Compress in production
  if Volt.config.compress_javascript
    require 'uglifier'
    environment.js_compressor  = Sprockets::UglifierCompressor
  end

  if Volt.config.compress_css
    # Use csso for css compression by default.
    require 'volt/utils/csso_patch'
    require 'csso'
    Csso.install(environment)
  end

  server.append_path(app_path)

  volt_gem_lib_path = File.expand_path(File.join(File.dirname(__FILE__), '../../..'))
  server.append_path(volt_gem_lib_path)

  add_asset_folders(server)

  builder.map '/assets' do
    run server
  end

  # map server.source_maps.prefix do
  #   run server.source_maps
  # end

  # if Volt.source_maps?
  #   source_maps = SourceMapServer.new(environment)
  #
  #   builder.map(source_maps.prefix) do
  #     run source_maps
  #   end
  # end
end

Instance Attribute Details

#environmentObject (readonly)

Returns the value of attribute environment.



13
14
15
# File 'lib/volt/server/rack/opal_files.rb', line 13

def environment
  @environment
end

Instance Method Details

#add_asset_folders(environment) ⇒ Object



87
88
89
90
91
# File 'lib/volt/server/rack/opal_files.rb', line 87

def add_asset_folders(environment)
  @component_paths.asset_folders do |asset_folder|
    environment.append_path(asset_folder)
  end
end