schmooze 0.1.2 → 0.1.3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/lib/schmooze/version.rb +1 -1
- data/schmooze.gemspec +1 -1
- metadata +3 -108
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a8a15e7e0c0a0e850c397bcf9c6816112484aeb9
|
4
|
+
data.tar.gz: df29bca677de10648f809044bd405284721e94a5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7f1d9acbb36a475de6bad0176cd768354eea42b8ceb3247d8cc4a2da138d03ff0219a08e1ade100a4888744baad99d70561e785c41d3c987e748942c95b729cc
|
7
|
+
data.tar.gz: e3c3e83bec29386d52bdca384ec5b8ce98def024bc105afe944e841005f80e94a330f25c8239194cfcbb261fc5008279c08253fd345ae8c3b4365ca503e7e5ea
|
data/lib/schmooze/version.rb
CHANGED
data/schmooze.gemspec
CHANGED
@@ -11,8 +11,8 @@ Gem::Specification.new do |spec|
|
|
11
11
|
|
12
12
|
spec.license = "MIT"
|
13
13
|
spec.summary = %q{Schmooze lets Ruby and Node.js work together intimately.}
|
14
|
+
spec.description = %q{Schmooze allows a Ruby library writer to succintly interoperate between Ruby and JavaScript code. It has a clever DSL to make this possible.}
|
14
15
|
spec.files = `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
|
15
|
-
spec.description = File.read(File.join(__dir__, 'README.md'))
|
16
16
|
spec.homepage = 'https://github.com/Shopify/schmooze'
|
17
17
|
|
18
18
|
spec.require_paths = ['lib']
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schmooze
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.3
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Bouke van der Bijl
|
@@ -52,113 +52,8 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '5.0'
|
55
|
-
description:
|
56
|
-
|
57
|
-
|
58
|
-
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.
|
59
|
-
|
60
|
-
## Requirements
|
61
|
-
|
62
|
-
Schmooze requires that you have [nodejs](https://nodejs.org/en/) installed and in the `$PATH`.
|
63
|
-
|
64
|
-
## Gem Installation
|
65
|
-
|
66
|
-
Add this line to your application's Gemfile:
|
67
|
-
|
68
|
-
```ruby
|
69
|
-
gem 'schmooze'
|
70
|
-
```
|
71
|
-
|
72
|
-
And then execute:
|
73
|
-
|
74
|
-
$ bundle
|
75
|
-
|
76
|
-
## Usage
|
77
|
-
|
78
|
-
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/):
|
79
|
-
|
80
|
-
```ruby
|
81
|
-
require 'schmooze'
|
82
|
-
|
83
|
-
class BabelSchmoozer < Schmooze::Base
|
84
|
-
dependencies babel: 'babel-core'
|
85
|
-
|
86
|
-
method :transform, 'babel.transform'
|
87
|
-
method :version, 'function() { return [process.version, babel.version]; }'
|
88
|
-
end
|
89
|
-
```
|
90
|
-
|
91
|
-
Note that the `babel-core` package is available under the name `babel`, because that's how we requested it.
|
92
|
-
|
93
|
-
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!
|
94
|
-
|
95
|
-
First we need to make sure we install any needed packages.
|
96
|
-
|
97
|
-
`$ npm install babel-core babel-preset-es2015`
|
98
|
-
|
99
|
-
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)).
|
100
|
-
|
101
|
-
```ruby
|
102
|
-
$ pry
|
103
|
-
Ruby 2.2.2
|
104
|
-
pry> load './babel_schmoozer.rb'
|
105
|
-
pry> babel = BabelSchmoozer.new(__dir__)
|
106
|
-
pry> babel.version
|
107
|
-
=> ["v5.5.0", "6.5.2"]
|
108
|
-
pry> puts babel.transform('a = () => 1', ast: false, presets: ['es2015'])['code']
|
109
|
-
"use strict";
|
110
|
-
|
111
|
-
a = function a() {
|
112
|
-
return 1;
|
113
|
-
};
|
114
|
-
```
|
115
|
-
|
116
|
-
This could easily be turned into a Sprockets plugin.
|
117
|
-
|
118
|
-
## Error handling
|
119
|
-
|
120
|
-
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:
|
121
|
-
|
122
|
-
```ruby
|
123
|
-
class ErrorSchmoozer < Schmooze::Base
|
124
|
-
dependencies nonexistant: 'this-package-is-not-here'
|
125
|
-
end
|
126
|
-
ErrorSchmoozer.new(__dir__)
|
127
|
-
```
|
128
|
-
|
129
|
-
This will raise
|
130
|
-
|
131
|
-
```
|
132
|
-
Schmooze::DependencyError: Cannot find module 'this-package-is-not-here'.
|
133
|
-
You need to add it to '/Users/bouke/code/schmooze/test/fixtures/uninstalled_package/package.json' and run 'npm install'
|
134
|
-
```
|
135
|
-
|
136
|
-
Any JavaScript errors that happen get converted to Ruby errors under the `Schmooze::Javascript` namespace. For example (once again, from the tests):
|
137
|
-
|
138
|
-
```ruby
|
139
|
-
class CoffeeSchmoozer < Schmooze::Base
|
140
|
-
dependencies coffee: 'coffee-script'
|
141
|
-
method :compile, 'coffee.compile'
|
142
|
-
end
|
143
|
-
|
144
|
-
CoffeeSchmoozer.new(dir).compile('<=> 1')
|
145
|
-
```
|
146
|
-
|
147
|
-
This will raise
|
148
|
-
|
149
|
-
```
|
150
|
-
Schmooze::JavaScript::SyntaxError: [stdin]:1:1: error: unexpected <=
|
151
|
-
<=> 1
|
152
|
-
^^
|
153
|
-
```
|
154
|
-
|
155
|
-
## Caveats
|
156
|
-
|
157
|
-
* Because we serialize the return values from JavaScript to JSON, you can't return circular data structures (like the Babel AST).
|
158
|
-
|
159
|
-
## Contributing
|
160
|
-
|
161
|
-
Bug reports and pull requests are welcome on GitHub at https://github.com/Shopify/schmooze.
|
55
|
+
description: Schmooze allows a Ruby library writer to succintly interoperate between
|
56
|
+
Ruby and JavaScript code. It has a clever DSL to make this possible.
|
162
57
|
email:
|
163
58
|
- bouke@shopify.com
|
164
59
|
executables: []
|