rubyjs-vite 1.0.0b

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: aea8b3a56de6a56a42441b2ff4b1dd674bd9c2d0fb575362ea41577f0451f94a
4
+ data.tar.gz: e53b300f84563d99df1a379de6c1b2893dfe96587366415a3a50d5686317c42c
5
+ SHA512:
6
+ metadata.gz: facec2d7bd59c7d634d63d9cc29536495105d9e75eac52208fd4dde3bd96fd165853200cf266645c0c623801e9cc8fc5435793f8c2fa7caecab4eb3eca6bec97
7
+ data.tar.gz: a524d66c09b1d04d6a6f28403d62abb851c529cc3174e6c10ab1a58f8964e104ebd15849b64c3ba5ef6655a1c675f4062fdd3b9d93b4fd565c4c2d32484b1bcb
data/app/arguments.rb ADDED
@@ -0,0 +1,49 @@
1
+ require "option_parser"
2
+
3
+ @options = {
4
+ compile: false,
5
+ watch: false,
6
+ output: Dir.pwd,
7
+ source: Dir.pwd,
8
+ eslevel: "2021".to_i
9
+ }
10
+
11
+ OptionParser.parse do |parser|
12
+ parser.banner(
13
+ "Converts the syntax of ruby into javascript.\n" +
14
+ "Usage: #{RubyJS::Constants::APP_NAME} [options]\n" +
15
+ "\nOptions:"
16
+ )
17
+ parser.on( "-h", "--help", "Show help" ) do
18
+ puts parser
19
+ exit
20
+ end
21
+ parser.on( "-v", "--version", "Show version" ) do
22
+ puts "Version is #{RubyJS::VERSION}"
23
+ exit
24
+ end
25
+ parser.on( "-c", "--compile", "Compile to JavaScript and save as .js files." ) do
26
+ @options[:compile] = true
27
+ end
28
+ parser.on( "-w", "--watch", "Watch scripts for changes and rerun commands." ) do
29
+ @options[:watch] = true
30
+ end
31
+ parser.on("-o DIR", "--output DIR", "Set the output path or path/filename\n" +
32
+ "for compiled JavaScript." ) do |dir|
33
+ @options[:output] = dir
34
+ end
35
+ parser.on("-s DIR", "--source DIR", "Set the source path or path/filename\n" +
36
+ "for RubyJS." ) do |dir|
37
+ @options[:source] = dir
38
+ end
39
+ parser.on("-es LEVEL", "--eslevel LEVEL", "ECMAScript versions for compilation.\n" +
40
+ "The default: #{@options[:eslevel]}\n" +
41
+ "(Accepted level ranges 2015...2022.)") do |level|
42
+
43
+ @options[:eslevel] = level.to_i
44
+ end
45
+ parser.on("--create PROJECT", nil, "Creates a new project using scaffolding." ) do |project|
46
+ RubyJS::Scaffold.create project
47
+ exit
48
+ end
49
+ end
data/app/main.rb ADDED
@@ -0,0 +1,48 @@
1
+ require "ruby_js"
2
+ require_relative "arguments"
3
+ require_relative "signals"
4
+
5
+ def compile_fun path_f
6
+ RubyJS.compile path_f, {
7
+ eslevel: @options[:eslevel],
8
+ path_s: @options[:source],
9
+ path_o: @options[:output]
10
+ }
11
+ end
12
+
13
+ def compile path_f
14
+ if @options[:compile]
15
+ compile_fun(path_f)
16
+ else
17
+ puts "This '#{path_f}' file was edited, but it wasn't made into a js file."
18
+ end
19
+ end
20
+
21
+ if @options[:compile]
22
+ RubyJS.get_files(@options[:source]).each do |path_f|
23
+ compile_fun(path_f)
24
+ end
25
+ end
26
+
27
+ if @options[:watch]
28
+ puts "There is now a watch for edited files."
29
+ path_s = @options[:source]
30
+
31
+ RubyJS::Helper.create_dir(path_s)
32
+ RubyJS.watch path_s do |modified, added, removed|
33
+ unless added.empty?
34
+ compile(added.last)
35
+ end
36
+
37
+ unless modified.empty?
38
+ compile(modified.last)
39
+ end
40
+
41
+ unless removed.empty?
42
+ RubyJS.free removed.last, {
43
+ path_s: @options[:source],
44
+ path_o: @options[:output]
45
+ }
46
+ end
47
+ end
48
+ end
data/app/signals.rb ADDED
@@ -0,0 +1,4 @@
1
+ Signal.trap("INT") do
2
+ puts "\nExiting"
3
+ exit
4
+ end
data/bin/rjsv ADDED
@@ -0,0 +1,5 @@
1
+ #!/usr/bin/env ruby
2
+ $: << File.expand_path("../lib", __dir__)
3
+
4
+ ROOT = File.expand_path("..", __dir__)
5
+ require_relative "../app/main"
@@ -0,0 +1,96 @@
1
+ require "json"
2
+ require 'fileutils'
3
+
4
+ class JsonParser
5
+ attr_reader :db
6
+
7
+ def initialize path, auto_write = true
8
+ @path = path
9
+ @db = open @path
10
+ @auto_write = auto_write
11
+ end
12
+
13
+ def on symbol, value
14
+ if exist?
15
+ parse symbol, value
16
+ end
17
+ end
18
+
19
+ def parse symbols, value = nil, delete = nil
20
+ symbols_join = ""
21
+ if symbols.class.name == "Array"
22
+ symbols_join = symbols.join("\"][\"")
23
+ else
24
+ symbols_join = symbols.to_s
25
+ end
26
+ symbols_join = "[\"#{symbols_join}\"]"
27
+
28
+ unless delete
29
+ unless value
30
+ eval "@db#{ symbols_join }"
31
+ else
32
+ eval "@db#{ symbols_join } = value"
33
+
34
+ if @auto_write
35
+ write @path, @db
36
+ end
37
+ end
38
+ else
39
+ if symbols
40
+ eval "@db#{ symbols_join }.delete('#{delete}')"
41
+ else
42
+ eval "@db.delete('#{delete}')"
43
+ end
44
+
45
+ if @auto_write
46
+ write @path, @db
47
+ end
48
+ end
49
+ end
50
+
51
+ def exist?
52
+ @db.empty?
53
+ end
54
+
55
+ def delete key, symbols = nil
56
+ parse(symbols, nil, key)
57
+ end
58
+
59
+ private
60
+ def open path
61
+ begin
62
+ result = String.new
63
+ File.open path do |f|
64
+ result = JSON.parse f.read
65
+ end
66
+
67
+ return result
68
+ rescue
69
+ return Hash.new
70
+ end
71
+ end
72
+
73
+ def write path, db
74
+ begin
75
+ create_dir path do
76
+
77
+ f = File.new path, "w"
78
+ f.write JSON.pretty_generate db
79
+ f.close
80
+ end
81
+ end
82
+ end
83
+
84
+ def create_dir path, &callback
85
+ begin
86
+ dir_path = File.dirname path
87
+ unless Dir.exist? dir_path
88
+ FileUtils.mkpath dir_path
89
+ end
90
+
91
+ callback.call
92
+ rescue
93
+
94
+ end
95
+ end
96
+ end
@@ -0,0 +1,91 @@
1
+ class OptionParser
2
+
3
+ LEFT = 2
4
+ MIDDLE = 28
5
+
6
+ attr_reader :args
7
+
8
+ def self.parse(args = ARGV)
9
+ parser = OptionParser.new
10
+ yield parser
11
+ parser.process args
12
+ parser
13
+ end
14
+
15
+ def self.last_arg(args = ARGV)
16
+ args.length >= 1 ? args[args.length - 1] : nil
17
+ end
18
+
19
+ def initialize(args = ARGV)
20
+ @args = args
21
+ @banner = nil
22
+ @flags = Array.new
23
+ end
24
+
25
+ def banner(banner)
26
+ @banner = banner
27
+ end
28
+
29
+ def on(short_flag, long_flag, description, &block)
30
+ @flags << { short_flag: short_flag || '', long_flag: long_flag || '',
31
+ description: description || '', block: block }
32
+ end
33
+
34
+ def process( args = ARGV )
35
+ unless args.length == 0
36
+ args.each_with_index do |arg, i|
37
+ @flags.each do |flag|
38
+ name = -> (type_flag) do
39
+ flag[type_flag].gsub( /[a-z -]/, '' )
40
+ end
41
+
42
+ flag_strip = -> (type_flag) do
43
+ flag[type_flag].sub( name.(type_flag), '' ).strip()
44
+ end
45
+ has_flag = -> (type_flag) { arg == flag_strip.(type_flag) }
46
+
47
+ if has_flag.(:short_flag) or
48
+ has_flag.(:long_flag)
49
+
50
+ has_name = -> (type_flag) do
51
+ name.(type_flag) != ""
52
+ end
53
+ value = nil
54
+
55
+ if has_name.(:short_flag) or
56
+ has_name.(:long_flag)
57
+ value = args[i + 1]
58
+ end
59
+
60
+ flag[:block].call( value )
61
+ end
62
+ end
63
+ end
64
+ else
65
+ flag = @flags[0]
66
+ flag[:block].call
67
+ end
68
+ end
69
+
70
+ def self.get_empty_spaces
71
+ " " * (MIDDLE + LEFT)
72
+ end
73
+
74
+ def to_s()
75
+ io = Array.new
76
+ if banner = @banner
77
+ io << banner
78
+ io << "\n"
79
+ end
80
+
81
+ @flags.each do |flag|
82
+ l_flag = !flag[:long_flag].empty? ? ", #{flag[:long_flag]}" : ""
83
+ flags = "#{flag[:short_flag]}#{l_flag}".ljust(MIDDLE)
84
+ desc = flag[:description].gsub("\n", "\n#{OptionParser.get_empty_spaces}")
85
+ io << "".ljust(LEFT) + flags + desc
86
+ io << "\n"
87
+ end
88
+
89
+ io.join
90
+ end
91
+ end
@@ -0,0 +1,6 @@
1
+ module RubyJS
2
+ module Constants
3
+ FILE_TYPE = 'rjs'
4
+ APP_NAME = 'rjsv'
5
+ end
6
+ end
@@ -0,0 +1,46 @@
1
+ module RubyJS
2
+ module Helper
3
+ require 'fileutils'
4
+
5
+ def self.open path
6
+ result = ""
7
+
8
+ if File.exist? path
9
+ File.open path do |f|
10
+ result = f.read
11
+ end
12
+ end
13
+
14
+ result
15
+ end
16
+
17
+ def self.write path_o, content
18
+ path_od = File.dirname(path_o)
19
+ create_dir(path_od)
20
+
21
+ file = File.new(path_o, "w+")
22
+ file.write content
23
+ file.close
24
+ end
25
+
26
+ def self.free path_o
27
+ File.delete(path_o) if File.exists? path_o
28
+ end
29
+
30
+ def self.event_p event, path_f
31
+ "#{Time.now.strftime("%l:%M:%S %p").lstrip} [#{Constants::APP_NAME}] #{event} #{path_f}"
32
+ end
33
+
34
+ def self.absolute_path path_f, path_options, prefix = "js"
35
+ path_ffr = path_f.sub("#{Dir.pwd}/", '').sub(path_options[:path_s], '').sub(Constants::FILE_TYPE, prefix)
36
+ path_ffa = File.join(path_options[:path_o], path_ffr)
37
+ path_ffa
38
+ end
39
+
40
+ def self.create_dir path
41
+ unless Dir.exist? path
42
+ FileUtils.mkdir_p path
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,39 @@
1
+ module RubyJS
2
+ module Scaffold
3
+ require "json_parser"
4
+
5
+ def self.create project
6
+ path_as = File.expand_path("./share/template", ROOT)
7
+ path_ao = File.join(Dir.pwd, project)
8
+
9
+ puts "Scaffolding project in #{path_ao}..."
10
+ FileUtils.copy_entry path_as, path_ao
11
+
12
+ json_oc = JsonParser.new File.join(path_ao, "package.json")
13
+ json_oc.parse :name, project.downcase
14
+
15
+ change_server_f(path_ao)
16
+ install_vite(project, path_ao)
17
+ end
18
+
19
+ def self.change_server_f path_ao
20
+ path_bin_ao = "#{path_ao}/bin/server"
21
+ content = Helper.open(path_bin_ao)
22
+ content_ch = content.sub("APP_NAME", Constants::APP_NAME)
23
+ Helper.write(path_bin_ao, content_ch)
24
+ end
25
+
26
+ def self.install_vite project, path_ao
27
+ is_done = system("cd #{path_ao} && npm install -D vite")
28
+ if is_done
29
+ puts "\nDone. Now run:\n\n cd #{project}\n bin/server\n\n"
30
+ else
31
+ puts "\nThe Vite library installation encountered an issue.\n" +
32
+ "NPM is probably not installed on your machine.\n\n" +
33
+ "Please rerun the Vite installation after installing NodeJS.\n" +
34
+ "In your project, use the following command:\n\n" +
35
+ "#{' '*2}npm install -D vite"
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,3 @@
1
+ module RubyJS
2
+ VERSION = "1.0.0b"
3
+ end
data/lib/ruby_js.rb ADDED
@@ -0,0 +1,46 @@
1
+ require 'ruby2js'
2
+ require "ruby2js/filter/esm"
3
+ require "listen"
4
+ require "option_parser"
5
+
6
+ module RubyJS
7
+ require "ruby_js/version"
8
+ require "ruby_js/helper"
9
+ require "ruby_js/constants"
10
+ require "ruby_js/scaffold"
11
+
12
+ def self.watch path
13
+ listener = Listen.to(path, only: /\.#{Constants::FILE_TYPE}$/) do |modified, added, removed|
14
+ yield modified, added, removed
15
+ end
16
+ listener.start
17
+ sleep
18
+ end
19
+
20
+ def self.compile path_f, options
21
+ path_o = Helper.absolute_path path_f, { path_s: options[:path_s], path_o: options[:path_o] }
22
+
23
+ begin
24
+ content_rb = Helper.open(path_f)
25
+ content_js = Ruby2JS.convert(content_rb, eslevel: options[:eslevel]) unless content_rb.empty?
26
+
27
+ path_write = Helper.write(path_o, content_js)
28
+ puts Helper.event_p("compiled", path_o)
29
+ rescue => exception
30
+ # p exception.inspect
31
+ puts Helper.event_p("error", "#{path_o} #{exception}")
32
+ end
33
+ end
34
+
35
+ def self.free path_f, options
36
+ path_o = Helper.absolute_path path_f, options
37
+ Helper.free path_o
38
+
39
+ puts Helper.event_p("deleted", path_o)
40
+ end
41
+
42
+ def self.get_files(path_s)
43
+ path = "#{path_s}/**/*.#{Constants::FILE_TYPE}"
44
+ Dir.glob(path)
45
+ end
46
+ end
@@ -0,0 +1,4 @@
1
+ #!/bin/bash
2
+
3
+ APP_NAME -c -w -s src/rjs -o src/.js &
4
+ npm run dev
@@ -0,0 +1,13 @@
1
+ <!DOCTYPE html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="UTF-8" />
5
+ <link rel="icon" type="image/svg+xml" href="/vite.svg" />
6
+ <meta name="viewport" content="width=device-width, initial-scale=1.0" />
7
+ <title>Vite App</title>
8
+ </head>
9
+ <body>
10
+ <div id="app"></div>
11
+ <script type="module" src="/src/.js/main.js"></script>
12
+ </body>
13
+ </html>
@@ -0,0 +1,11 @@
1
+ {
2
+ "name": "template",
3
+ "private": true,
4
+ "version": "0.0.0",
5
+ "type": "module",
6
+ "scripts": {
7
+ "dev": "vite",
8
+ "build": "vite build",
9
+ "preview": "vite preview"
10
+ }
11
+ }
@@ -0,0 +1 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" aria-hidden="true" role="img" class="iconify iconify--logos" width="31.88" height="32" preserveAspectRatio="xMidYMid meet" viewBox="0 0 256 257"><defs><linearGradient id="IconifyId1813088fe1fbc01fb466" x1="-.828%" x2="57.636%" y1="7.652%" y2="78.411%"><stop offset="0%" stop-color="#41D1FF"></stop><stop offset="100%" stop-color="#BD34FE"></stop></linearGradient><linearGradient id="IconifyId1813088fe1fbc01fb467" x1="43.376%" x2="50.316%" y1="2.242%" y2="89.03%"><stop offset="0%" stop-color="#FFEA83"></stop><stop offset="8.333%" stop-color="#FFDD35"></stop><stop offset="100%" stop-color="#FFA800"></stop></linearGradient></defs><path fill="url(#IconifyId1813088fe1fbc01fb466)" d="M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z"></path><path fill="url(#IconifyId1813088fe1fbc01fb467)" d="M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z"></path></svg>
File without changes
@@ -0,0 +1,3 @@
1
+ import '../css/style.css'
2
+
3
+ document.querySelector('#app').innerHTML = "<h1>Hello RubyJS</h1>"
metadata ADDED
@@ -0,0 +1,109 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rubyjs-vite
3
+ version: !ruby/object:Gem::Version
4
+ version: 1.0.0b
5
+ platform: ruby
6
+ authors:
7
+ - Filip Vrba
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2022-11-04 00:00:00.000000000 Z
12
+ dependencies: []
13
+ description: "# RubyJS Vite\nWeb applications may be made with the help of RubyJS
14
+ Vite. The programmer can avoid using JS syntax, which is helpful. Everything is
15
+ done automatically; all you have to do is start the server and build a project using
16
+ scaffolding.\n\nWrite your code using the JS api and Ruby syntax, and the server
17
+ will automatically translate it. It then stores it in a file with the extension
18
+ \".js\". You will then be able to publish the project to [Vercel](https://vercel.com/)
19
+ or directly to the [NPM package](https://www.npmjs.com/), and you will have a website
20
+ that is written in the native JS language.\n\n### Content\n- [1 Installation](#1-installation)\n-
21
+ [2 Usage](#2-usage)\n - [2.1 Scaffold](#21-scaffold)\n - [2.2 More parameters](#22-more-parameters)\n-
22
+ [3 Development](#3-development)\n- [4 Unexpected errors](#4-unexpected-errors)\n
23
+ \ - [4.1 Third-party libraries](#41-third-party-libraries)\n - [4.2 NPM](#42-npm)\n-
24
+ [5 Examples](#5-examples)\n- [6 Contributors](#6-contributors)\n\n## 1 Installation\nThe
25
+ executable application and libraries are installed using the ruby gem during installation.\n\n```bash\ngem
26
+ install rubyjs-vite\n```\n\n## 2 Usage\nRubyJS Vite has a unique command that can
27
+ be used at the terminal called **rjsv**.\n\n### 2.1 Scaffold\nThe **—create** parameter
28
+ should be followed by the project name if you want to create your own project.\n\n*Use
29
+ this command as an example, then follow the instructions the terminal gives you:*\n```bash\nrjsv
30
+ --create hello\n```\n\n![rjsv-scaffold](./public/rjsv_scaffold.gif)\n\n### 2.2 More
31
+ parameters\nIf you only need to convert files to *.js* format rather than build
32
+ scaffolding.\nTherefore, there is an argument for this function called **-c** or
33
+ **—compile**.\n\nYou must include an additional parameter called **-w** or **—watch**
34
+ so that the compilation always happens after saving the *.rjs* file.\n\nOther choices
35
+ include which directory will be searched for updated files and which directory will
36
+ house all transformed code. The code can also be converted into the chosen EC level,
37
+ with 2021 as the default level. Enter **rjsv -h** in the terminal for more details.\n\n*Example
38
+ for compiling and tracking files:*\n```bash\nrjsv -c -w -s src/rjs -o src/js\n```\n\n![rjsv-compile-watch](./public/rjsv_cw.gif)\n\n##
39
+ 3 Development\nLook in the *'lib'* folder if you want to edit this RubyJS Vite project.
40
+ Everything you require for file transformation and change tracking is available.
41
+ The console portion is under the *'app'* subdirectory. Everything that needs to
42
+ be executed with various arguments is available here. \n\n*The following third-party
43
+ libraries are employed:*\n- [ruby2js](https://rubygems.org/gems/ruby2js)\n- [listen](https://rubygems.org/gems/listen)\n\n##
44
+ 4 Unexpected errors\nWhen using this utility, some problems could happen.\n\n###
45
+ 4.1 Third-party libraries\nCertain library dependencies must be installed for the
46
+ program to function as a whole. (The section on [development](#3-development) has
47
+ more details regarding libraries.)\n\n*Use this command if the software indicates
48
+ that the library was not found:*\n```bash\ngem install ruby2js &&\ngem install listen\n```\n\n###
49
+ 4.2 NPM\nThe process of constructing a project could go wrong. This is because Vite
50
+ is attempting to be installed using the NPM tool during the scaffolding phase. This
51
+ indicates that your machine does not have NodeJS installed. [Installing it is necessary!](https://nodejs.org)
52
+ Run a command in your project to install the Vite library after you've finished
53
+ the installation.\n\n*Vite installation command:*\n```bash\nnpm install -D vite\n```\n\nYou
54
+ can launch the server and begin developing your project after the installation has
55
+ been successfully completed.\n\n*An order to launch the server:*\n```bash\nbin/server\n```\n\n##
56
+ 5 Examples\nHere, I'll outline a few projects where RubyJS Vite was applied to alter
57
+ code.\n\n- [adb2-weapon-rjs](https://github.com/filipvrba/adb2-weapon-rjs) - Here,
58
+ a web application was built with scaffolding and uploaded to Vercel.\n- [suitescript-generator](https://github.com/filipvrba/suitescript-generator)
59
+ - It is a console program that utilizes npm. Here, the file tracking and compilation
60
+ command is employed. \n\n## 6 Contributors\n- [Filip Vrba](https://github.com/filipvrba)
61
+ - creator and maintainer\n"
62
+ email: filipvrbaxi@gmail.com
63
+ executables:
64
+ - rjsv
65
+ extensions: []
66
+ extra_rdoc_files: []
67
+ files:
68
+ - app/arguments.rb
69
+ - app/main.rb
70
+ - app/signals.rb
71
+ - bin/rjsv
72
+ - lib/json_parser.rb
73
+ - lib/option_parser.rb
74
+ - lib/ruby_js.rb
75
+ - lib/ruby_js/constants.rb
76
+ - lib/ruby_js/helper.rb
77
+ - lib/ruby_js/scaffold.rb
78
+ - lib/ruby_js/version.rb
79
+ - share/template/bin/server
80
+ - share/template/index.html
81
+ - share/template/package.json
82
+ - share/template/public/vite.svg
83
+ - share/template/src/css/style.css
84
+ - share/template/src/rjs/main.rjs
85
+ homepage: https://rubygems.org/gems/rubyjs-vite
86
+ licenses:
87
+ - MIT
88
+ metadata:
89
+ source_code_uri: https://github.com/filipvrba/ruby-js
90
+ post_install_message:
91
+ rdoc_options: []
92
+ require_paths:
93
+ - lib
94
+ required_ruby_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ required_rubygems_version: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">"
102
+ - !ruby/object:Gem::Version
103
+ version: 1.3.1
104
+ requirements: []
105
+ rubygems_version: 3.4.0.dev
106
+ signing_key:
107
+ specification_version: 4
108
+ summary: Converts the syntax of ruby into javascript.
109
+ test_files: []