Class: WebpackRails::RequireDirectiveProcessor

Inherits:
Object
  • Object
show all
Defined in:
lib/webpack_rails/require_directive_processor.rb

Constant Summary collapse

DIRECTIVE_PATTERN =
/^.*?=\s*webpack_require\s+(.*?)\s*$/

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.cache_keyObject



25
26
27
28
# File 'lib/webpack_rails/require_directive_processor.rb', line 25

def self.cache_key
  config_serialized = @config ? @config.to_json : '{}'
  @cache_key ||= "RequireDirectiveProcessor:#{::WebpackRails::VERSION}:#{config_serialized}".freeze
end

.call(input) ⇒ Object



34
35
36
# File 'lib/webpack_rails/require_directive_processor.rb', line 34

def self.call(input)
  instance.call(input)
end

.configObject



21
22
23
# File 'lib/webpack_rails/require_directive_processor.rb', line 21

def self.config
  @config
end

.config=(new_config) ⇒ Object



15
16
17
18
19
# File 'lib/webpack_rails/require_directive_processor.rb', line 15

def self.config=(new_config)
  @cache_key = nil
  @instance = nil
  @config = new_config
end

.configure(webpack_task_config) ⇒ Object



9
10
11
12
13
# File 'lib/webpack_rails/require_directive_processor.rb', line 9

def self.configure(webpack_task_config)
  Class.new(RequireDirectiveProcessor) do
    self.config = webpack_task_config
  end
end

.instanceObject



30
31
32
# File 'lib/webpack_rails/require_directive_processor.rb', line 30

def self.instance
  @instance ||= new
end

Instance Method Details

#call(input) ⇒ Object



61
62
63
64
65
66
67
68
69
70
# File 'lib/webpack_rails/require_directive_processor.rb', line 61

def call(input)
  data     = input[:data]
  context  = input[:environment].context_class.new(input)

  output = data.gsub(DIRECTIVE_PATTERN) do |match_text|
    process_require(context, $1)
  end

  context..merge(data: output)
end

#configObject



38
39
40
# File 'lib/webpack_rails/require_directive_processor.rb', line 38

def config
  self.class.config
end

#dev_server_base_urlObject



42
43
44
# File 'lib/webpack_rails/require_directive_processor.rb', line 42

def dev_server_base_url
  "#{config[:protocol]}://#{config[:host]}:#{config[:port]}"
end

#process_require(context, bundle_filename) ⇒ Object



46
47
48
49
50
51
52
53
54
55
56
57
58
59
# File 'lib/webpack_rails/require_directive_processor.rb', line 46

def process_require(context, bundle_filename)
  if config[:dev_server]
    if bundle_filename.end_with? '.js'
      # emit a script tag pointing at the dev server js url
      return %{document.write('<script src="#{dev_server_base_url}/#{bundle_filename}"></script>');}
    end
    # probably a css file, contents will be included in js instead to enable hot module replacement
    return "\n"
  end

  # will be handled by normal sprockets require
  context.require_asset(bundle_filename)
  return "\n"
end