From 39b171c011da0dcef351b81d8cf029f9af392ec0 Mon Sep 17 00:00:00 2001 From: SheetJS Date: Tue, 14 Feb 2023 03:22:31 -0500 Subject: [PATCH] ruby --- docz/docs/03-demos/31-engines/09_rb.md | 100 +++++++++++++++++++++++++ docz/docusaurus.config.js | 2 +- docz/static/execjs/ExecSheetJS.rb | 24 ++++++ 3 files changed, 125 insertions(+), 1 deletion(-) create mode 100644 docz/docs/03-demos/31-engines/09_rb.md create mode 100644 docz/static/execjs/ExecSheetJS.rb diff --git a/docz/docs/03-demos/31-engines/09_rb.md b/docz/docs/03-demos/31-engines/09_rb.md new file mode 100644 index 0000000..4c1b6df --- /dev/null +++ b/docz/docs/03-demos/31-engines/09_rb.md @@ -0,0 +1,100 @@ +--- +title: Ruby Bindings +pagination_prev: demos/cli +pagination_next: demos/clipboard +--- + +ExecJS is a Ruby abstraction over a number of JS runtimes including V8. + +The [Standalone scripts](/docs/getting-started/installation/standalone) can be +parsed and evaluated in every supported runtime. + +## Integration Details + +_Load SheetJS Scripts_ + +The main library can be loaded and compiled in a new context: + +```rb +require "execjs" + +source = File.open("xlsx.full.min.js").read; +context = ExecJS.compile(source); +``` + +To confirm the library is loaded, `XLSX.version` can be inspected: + +```rb +puts context.eval("XLSX.version"); +``` + +_Reading and Writing Files_ + +The architecture of ExecJS forces users to combine reading and writing in one +function step. Base64 strings should be used for interchange. For example, +the following snippet reads data from `pres.numbers`, generates an XLSB file, +and writes to `sheetjsw.xlsb`: + +```rb +require "base64" + +# read and encode data to Base64 +data = Base64.strict_encode64(File.open("pres.numbers").read); + +# define function and call with the data +xlsb = context.call(< +
  • xlsx.full.min.js
  • +
  • pres.numbers
  • + + +```bash +curl -LO https://cdn.sheetjs.com/xlsx-latest/package/dist/xlsx.full.min.js +curl -LO https://sheetjs.com/pres.numbers +``` + +2) Download [`ExecSheetJS.rb`](pathname:///execjs/ExecSheetJS.rb): + +```bash +curl -LO https://docs.sheetjs.com/execjs/ExecSheetJS.rb +``` + +3) Run the demo: + +```bash +ruby ExecSheetJS.rb pres.numbers +``` + +If the program succeeded, the CSV contents will be printed to console and the +file `sheetjsw.xlsb` will be created. That file can be opened with Excel. diff --git a/docz/docusaurus.config.js b/docz/docusaurus.config.js index 805868a..033be83 100644 --- a/docz/docusaurus.config.js +++ b/docz/docusaurus.config.js @@ -142,7 +142,7 @@ const config = { prism: { theme: lightCodeTheme, darkTheme: darkCodeTheme, - additionalLanguages: [ "swift", "java", "csharp", "perl" ], + additionalLanguages: [ "swift", "java", "csharp", "perl", "ruby" ], }, liveCodeBlock: { playgroundPosition: 'top' diff --git a/docz/static/execjs/ExecSheetJS.rb b/docz/static/execjs/ExecSheetJS.rb new file mode 100644 index 0000000..62150ec --- /dev/null +++ b/docz/static/execjs/ExecSheetJS.rb @@ -0,0 +1,24 @@ +#!/usr/bin/env ruby +# ExecSheetJS.rb (c) SheetJS LLC -- https://sheetjs.com +require "execjs" +require "base64" + +source = File.open("xlsx.full.min.js").read; +context = ExecJS.compile(source); +puts context.eval("XLSX.version"); + +data = Base64.strict_encode64(File.open(ARGV[0]).read); +result = context.call(<