Class: Opal::Processor

Inherits:
Tilt::Template
  • Object
show all
Defined in:
lib/opal/sprockets/processor.rb

Overview

The Processor class is used to make ruby files (with rb or opal extensions) available to any sprockets based server. Processor will then get passed any ruby source file to build. There are some options you can override globally which effect how certain ruby features are handled:

* method_missing_enabled      [true by default]
* optimized_operators_enabled [true by default]
* arity_check_enabled         [false by default]
* const_missing_enabled       [true by default]
* dynamic_require_severity    [true by default]
* source_map_enabled          [true by default]
* irb_enabled                 [false by default]

Class Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Class Attribute Details

.arity_check_enabledObject

Returns the value of attribute arity_check_enabled.



37
38
39
# File 'lib/opal/sprockets/processor.rb', line 37

def arity_check_enabled
  @arity_check_enabled
end

.const_missing_enabledObject

Returns the value of attribute const_missing_enabled.



38
39
40
# File 'lib/opal/sprockets/processor.rb', line 38

def const_missing_enabled
  @const_missing_enabled
end

.dynamic_require_severityObject

Returns the value of attribute dynamic_require_severity.



39
40
41
# File 'lib/opal/sprockets/processor.rb', line 39

def dynamic_require_severity
  @dynamic_require_severity
end

.irb_enabledObject

Returns the value of attribute irb_enabled.



41
42
43
# File 'lib/opal/sprockets/processor.rb', line 41

def irb_enabled
  @irb_enabled
end

.method_missing_enabledObject

Returns the value of attribute method_missing_enabled.



36
37
38
# File 'lib/opal/sprockets/processor.rb', line 36

def method_missing_enabled
  @method_missing_enabled
end

.source_map_enabledObject

Returns the value of attribute source_map_enabled.



40
41
42
# File 'lib/opal/sprockets/processor.rb', line 40

def source_map_enabled
  @source_map_enabled
end

Class Method Details

.engine_initialized?Boolean

Returns:

  • (Boolean)


31
32
33
# File 'lib/opal/sprockets/processor.rb', line 31

def self.engine_initialized?
  true
end

.stub_file(name) ⇒ Object



51
52
53
# File 'lib/opal/sprockets/processor.rb', line 51

def self.stub_file(name)
  stubbed_files << name.to_s
end

.stubbed_filesObject



55
56
57
# File 'lib/opal/sprockets/processor.rb', line 55

def self.stubbed_files
  @stubbed_files ||= Set.new
end

Instance Method Details

#evaluate(context, locals, &block) ⇒ Object



66
67
68
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/opal/sprockets/processor.rb', line 66

def evaluate(context, locals, &block)
  options = {
    :method_missing           => self.class.method_missing_enabled,
    :arity_check              => self.class.arity_check_enabled,
    :const_missing            => self.class.const_missing_enabled,
    :dynamic_require_severity => self.class.dynamic_require_severity,
    :irb                      => self.class.irb_enabled,
    :file                     => context.logical_path,
  }

  compiler = Opal::Compiler.new
  result = compiler.compile data, options

  compiler.requires.each do |r|
    next if stubbed_file? r
    path = find_opal_require context.environment, r
    context.require_asset path
  end

  if self.class.source_map_enabled
    $OPAL_SOURCE_MAPS[context.pathname] = compiler.source_map(source_file_url(context)).to_s
    "#{result}\n//@ sourceMappingURL=#{source_map_url(context)}\n"
  else
    result
  end
end

#find_opal_require(environment, r) ⇒ Object



109
110
111
112
113
114
115
# File 'lib/opal/sprockets/processor.rb', line 109

def find_opal_require(environment, r)
  path = environment.paths.find do |p|
    File.exist?(File.join(p, "#{r}.rb"))
  end

  path ? File.join(path, "#{r}.rb") : r
end

#initialize_engineObject



59
60
61
# File 'lib/opal/sprockets/processor.rb', line 59

def initialize_engine
  require_template_library 'opal'
end

#prefixObject



101
102
103
# File 'lib/opal/sprockets/processor.rb', line 101

def prefix
  "/__opal_source_maps__"
end

#prepareObject



63
64
# File 'lib/opal/sprockets/processor.rb', line 63

def prepare
end

#source_file_url(context) ⇒ Object



97
98
99
# File 'lib/opal/sprockets/processor.rb', line 97

def source_file_url(context)
  "#{prefix}/#{context.logical_path.to_s}"
end

#source_map_url(context) ⇒ Object



93
94
95
# File 'lib/opal/sprockets/processor.rb', line 93

def source_map_url(context)
  "#{prefix}/#{context.logical_path}.js.map"
end

#stubbed_file?(name) ⇒ Boolean

Returns:

  • (Boolean)


105
106
107
# File 'lib/opal/sprockets/processor.rb', line 105

def stubbed_file?(name)
  self.class.stubbed_files.include? name
end