RubyGems Navigation menu

schmooze 0.1.2

# Schmooze Schmooze lets Ruby and Node.js work together intimately. It has a DSL that allows you to define what methods you need, and it executes code by spawning a Node.js process and sending messages back and forth. ## Requirements Schmooze requires that you have [nodejs](https://nodejs.org/en/) installed and in the `$PATH`. ## Gem Installation Add this line to your application's Gemfile: ```ruby gem 'schmooze' ``` And then execute: $ bundle ## Usage To use Schmooze, you first need to create a sublcass of `Schmooze::Base`. Your subclass needs to list all of the package dependencies, and methods that you want to have available. For example, here is a Schmooze class that interfaces with [Babel](https://babeljs.io/): ```ruby require 'schmooze' class BabelSchmoozer < Schmooze::Base dependencies babel: 'babel-core' method :transform, 'babel.transform' method :version, 'function() { return [process.version, babel.version]; }' end ``` Note that the `babel-core` package is available under the name `babel`, because that's how we requested it. To define a method, you simply give it a name and pass in a JavaScript string that should resolve to a function. Let's put this class to use! First we need to make sure we install any needed packages. `$ npm install babel-core babel-preset-es2015` All we need to do next is to instantiate the class with a path to where the node modules are installed, and then we can call the methods! (Note that we need to pass in `ast: false` because of a [caveat](#caveats)). ```ruby $ pry Ruby 2.2.2 pry> load './babel_schmoozer.rb' pry> babel = BabelSchmoozer.new(__dir__) pry> babel.version => ["v5.5.0", "6.5.2"] pry> puts babel.transform('a = () => 1', ast: false, presets: ['es2015'])['code'] "use strict"; a = function a() { return 1; }; ``` This could easily be turned into a Sprockets plugin. ## Error handling Errors happen, and Schmooze tries to make them as painless as possible to handle. If there is a dependency missing, Schmooze will throw a helpful Error when you try to initialize the class. Here is an example from the tests: ```ruby class ErrorSchmoozer < Schmooze::Base dependencies nonexistant: 'this-package-is-not-here' end ErrorSchmoozer.new(__dir__) ``` This will raise ``` Schmooze::DependencyError: Cannot find module 'this-package-is-not-here'. You need to add it to '/Users/bouke/code/schmooze/test/fixtures/uninstalled_package/package.json' and run 'npm install' ``` Any JavaScript errors that happen get converted to Ruby errors under the `Schmooze::Javascript` namespace. For example (once again, from the tests): ```ruby class CoffeeSchmoozer < Schmooze::Base dependencies coffee: 'coffee-script' method :compile, 'coffee.compile' end CoffeeSchmoozer.new(dir).compile('<=> 1') ``` This will raise ``` Schmooze::JavaScript::SyntaxError: [stdin]:1:1: error: unexpected <= <=> 1 ^^ ``` ## Caveats * Because we serialize the return values from JavaScript to JSON, you can't return circular data structures (like the Babel AST). ## Contributing Bug reports and pull requests are welcome on GitHub at https://github.com/Shopify/schmooze.

Gemfile:
=

install:
=

Versions:

  1. 0.2.0 December 18, 2017 (9.5 KB)
  2. 0.1.6 May 12, 2016 (9.5 KB)
  3. 0.1.5 March 23, 2016 (9 KB)
  4. 0.1.4 March 17, 2016 (9 KB)
  5. 0.1.3 March 02, 2016 (9 KB)
  6. 0.1.2 March 02, 2016 (10.5 KB)
Show all versions (8 total)

Development Dependencies (3):

bundler ~> 1.11
minitest ~> 5.0
rake ~> 10.0

Owners:

Authors:

  • Bouke van der Bijl

SHA 256 checksum:

=

Total downloads 1,340,387

For this version 1,972

Version Released:

License:

MIT

Required Ruby Version: >= 0

Links: