Class: Opal::Processor

Inherits:
Tilt::Template
  • Object
show all
Defined in:
opal/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



44
45
46
# File 'opal/lib/opal/sprockets/processor.rb', line 44

def arity_check_enabled
  @arity_check_enabled
end

.const_missing_enabledObject

Returns the value of attribute const_missing_enabled



45
46
47
# File 'opal/lib/opal/sprockets/processor.rb', line 45

def const_missing_enabled
  @const_missing_enabled
end

.dynamic_require_severityObject

Returns the value of attribute dynamic_require_severity



46
47
48
# File 'opal/lib/opal/sprockets/processor.rb', line 46

def dynamic_require_severity
  @dynamic_require_severity
end

.irb_enabledObject

Returns the value of attribute irb_enabled



48
49
50
# File 'opal/lib/opal/sprockets/processor.rb', line 48

def irb_enabled
  @irb_enabled
end

.method_missing_enabledObject

Returns the value of attribute method_missing_enabled



43
44
45
# File 'opal/lib/opal/sprockets/processor.rb', line 43

def method_missing_enabled
  @method_missing_enabled
end

.source_map_enabledObject

Returns the value of attribute source_map_enabled



47
48
49
# File 'opal/lib/opal/sprockets/processor.rb', line 47

def source_map_enabled
  @source_map_enabled
end

Class Method Details

.engine_initialized?Boolean

Returns:

  • (Boolean)


25
26
27
# File 'opal/lib/opal/sprockets/processor.rb', line 25

def self.engine_initialized?
  true
end

.stub_file(name) ⇒ Object



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

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

.stubbed_filesObject



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

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

.versionObject



29
30
31
# File 'opal/lib/opal/sprockets/processor.rb', line 29

def self.version
  ::Opal::VERSION
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 'opal/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 'opal/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



33
34
35
# File 'opal/lib/opal/sprockets/processor.rb', line 33

def initialize_engine
  require_template_library 'opal'
end

#prefixObject



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

def prefix
  "/__opal_source_maps__"
end

#prepareObject



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

def prepare
end

#source_file_url(context) ⇒ Object



97
98
99
# File 'opal/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 'opal/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 'opal/lib/opal/sprockets/processor.rb', line 105

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