Sha256: 7165f8009d133ebc15f8cfcdc1d0477f7fda84876b066471cc4639077a9b0dfd

Contents?: true

Size: 1.79 KB

Versions: 5

Compression:

Stored size: 1.79 KB

Contents

require 'sprockets'

module BPM

  # A processor that will invoke a JavaScript-based plugin provided by a
  # package in the system.  The passed method name will be invoked on the
  # plugin.
  class PluginProcessor < Tilt::Template

    def self.with_plugin(plugin_opts, method_name)
      ret = Class.new(self)
      ret.instance_eval do
        @method_name  = method_name
        @plugin_opts  = plugin_opts
      end
      ret
    end

    def self.method_name
      @method_name
    end

    def self.plugin_name
      @plugin_opts["main"]
    end

    def prepare
    end

    def evaluate(context, locals, &block)
      plugin_ctx = context.environment.plugin_js_for self.class.plugin_name
      project = context.environment.project
      pkg, module_id = project.package_and_module_from_path file

      filepath   = file.to_s

      # MEGAHAX!!!
      # This issue that we specifically target only appears when a format
      # is re-provided twice and the re-provider has a transport.
      # This prevents the format from being inappropriately wrapped in
      # the transport.
      if self.class.method_name == 'compileTransport'
        plugin = pkg.find_transport_plugins(project).first
        if !plugin || plugin['main'] != self.class.plugin_name
          return data
        end
      end

      plugin_context = BPM::PluginContext.new(pkg, module_id);
      minifier_js = plugin_context.minify_as_js;

      # CTX.additionalContext is the minifier's execution environment
      plugin_ctx += <<-end_eval
          ; // Safety
          CTX = #{plugin_context.to_json};
          DATA = #{data.to_json};
          CTX.additionalContext=#{minifier_js};
      end_eval

      ctx = BPM.compile_js(plugin_ctx)
      ctx.eval("BPM_PLUGIN.#{self.class.method_name}(DATA, CTX, '#{filepath}')")

    end

  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
bpm-1.0.0 lib/bpm/pipeline/plugin_processor.rb
bpm-1.0.0.rc.4 lib/bpm/pipeline/plugin_processor.rb
bpm-1.0.0.rc.3 lib/bpm/pipeline/plugin_processor.rb
bpm-1.0.0.rc.2 lib/bpm/pipeline/plugin_processor.rb
bpm-1.0.0.rc.1 lib/bpm/pipeline/plugin_processor.rb