class NodeModule::Compiled

Public Class Methods

inherited(receiver) click to toggle source
# File lib/node_module/compiled.rb, line 6
def self.inherited(receiver)
  source = File.read(caller.first[/^[^:]+/])

  extract_class_definition(source) do |class_def|
    NodeModule.opal_js_context.compile(class_def)
  end

  receiver.extend NodeModule::ClassMethods

  NodeModule.compile_on_callback(receiver)
end

Private Class Methods

extract_class_definition(source) { |definition| ... } click to toggle source
# File lib/node_module/compiled.rb, line 20
def self.extract_class_definition(source)
  scanner = StringScanner.new(source)
  scanner.scan_until(/^\s+class/)

  indent = scanner.matched[/[^\n]\s+/].length
  scanner.pos = scanner.pos - scanner.matched_size

  definition = scanner.scan_until(/^\s{#{indent}}end/)
                      .sub('< NodeModule::Compiled', '')

  yield definition

ensure
  scanner.terminate
end