ruby2js 0.1.0 → 0.2.0

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 CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- MThiMDkwZGYwN2EwNTUzNmM3ODY3NGExMzcwMDllMTUzODJmNWQ2MQ==
4
+ YzA1Mzk5YzBmMWU5OWVhNTQ1MzdlODkwMmE0ZTAyMzhkYjkzZTQzOQ==
5
5
  data.tar.gz: !binary |-
6
- MzA3ODMzOWM1ZDcwMmI2YzhiNzFmZjdlNDE4NTU2ZGQ5OTkwZmIwNw==
6
+ NzA2YmI3ODFkM2I0Y2I0ZjY1MTFiOTBkNDIxMTE5ZTM5ODdiNzU3ZA==
7
7
  !binary "U0hBNTEy":
8
8
  metadata.gz: !binary |-
9
- ZWI1ODMwODg3YzgxODhhZDZjMjRmYzAxM2RmMDU5MGUzZmQ1OTUyNDY5NDdi
10
- NDgyODdkNjFlNjZmMWU3MDE1ZTYyZGY5YTJmM2NmN2Y3NjVhNDRmMjVkMjYw
11
- NmFhMDVjZWMwNGEwZDVhNWE3MzQyNmRlNjI2YjI4YmQ5MzgyNzY=
9
+ NzY0MjhhMzA5YTI0NzVkZWMzYTQxYzBlOTQ1ZjIyZmE5MTkwNmM3ZTViOTA4
10
+ OGE0ZDNhY2NjYjk3ZDliNDYxOGRmNWY5NDZjYzUyNjBjMmVjNjFkOGMxOWUz
11
+ NjA5ZDI5MmVlZGYyNzdlMmUwYmJkMDhlNmEyYjNhYTYzZTEyOWI=
12
12
  data.tar.gz: !binary |-
13
- NGU1YTAwOWZiODUyMWJmOTM3YTYyMjNmNTEwNzkwNDExNjBmZjAwMjI2ODky
14
- YzhmNmRhMjQxYjk0ZGJjZjZlODFkZDc1MjVjNzIzZTExMThkNDBlZTRhMjM3
15
- ZDgyZDBiZjQ2OGIxM2NmNmMwZmQ3ZjUyYWVmY2JjNzM3NzA3M2M=
13
+ YzAxMzRhMmY2NGRkMzZlYWNiYjIzZDkyMWM4ZGYyYWYzODRlZGUzMjdkMjQ1
14
+ ZTAyNzUxOTA4ZTViZmQyZGZiZTg2Y2U3NTk5NDU1NjA2OWVlN2M2YTEyOTQ5
15
+ ZGI1NTczNDhjNmJlZDNmNjRiMzg1YTljY2EzNmJkMTllZGE3Y2Q=
data/README.md CHANGED
@@ -20,11 +20,23 @@ an AST representation of the code.
20
20
  Synopsis
21
21
  ---
22
22
 
23
+ Basic:
24
+
25
+ ```ruby
26
+ require 'ruby2js'
27
+ puts Ruby2JS.convert("a={age:3}\na.age+=1")
28
+ ```
29
+
30
+ With filter:
31
+
23
32
  ```ruby
24
33
  require 'ruby2js/filter/functions'
25
- puts Ruby2JS.convert('"2A".to_i(16)', filters: [Ruby2JS::Filter::Functions])
34
+ puts Ruby2JS.convert('"2A".to_i(16)')
26
35
  ```
27
36
 
37
+ Conversions can be explored interactively using the
38
+ [demo](https://github.com/rubys/ruby2js/blob/master/demo/ruby2js.rb) provided.
39
+
28
40
  License
29
41
  ---
30
42
 
data/lib/ruby2js.rb CHANGED
@@ -2,6 +2,10 @@ require 'parser/current'
2
2
  require 'ruby2js/converter'
3
3
 
4
4
  module Ruby2JS
5
+ module Filter
6
+ DEFAULTS = []
7
+ end
8
+
5
9
  def self.convert(source, options={})
6
10
 
7
11
  if Proc === source
@@ -15,9 +19,11 @@ module Ruby2JS
15
19
  ast = parse( source )
16
20
  end
17
21
 
18
- if options[:filters]
22
+ filters = options[:filters] || Filter::DEFAULTS
23
+
24
+ unless filters.empty?
19
25
  filter = Parser::AST::Processor
20
- options[:filters].reverse.each do |mod|
26
+ filters.reverse.each do |mod|
21
27
  filter = Class.new(filter) {include mod}
22
28
  end
23
29
  ast = filter.new.process(ast)
@@ -231,6 +231,13 @@ module Ruby2JS
231
231
  condition, block = ast.children
232
232
  "while (#{ parse condition }) {#@nl#{ scope block }#@nl}"
233
233
 
234
+ when :for
235
+ var, expression, block = ast.children
236
+ parse s(:block,
237
+ s(:send, expression, :forEach),
238
+ s(:args, s(:arg, var.children.last)),
239
+ block);
240
+
234
241
  when :block
235
242
  call, args, block = ast.children
236
243
  block ||= s(:begin)
@@ -161,7 +161,8 @@ module Ruby2JS
161
161
  def s(type, *args)
162
162
  Parser::AST::Node.new type, args
163
163
  end
164
-
165
164
  end
165
+
166
+ DEFAULTS.push AngularRB
166
167
  end
167
168
  end
@@ -14,16 +14,29 @@ module Ruby2JS
14
14
  end
15
15
 
16
16
  def on_send(node)
17
+ target = process(node.children.first)
18
+ args = process_all(node.children[2..-1])
19
+
17
20
  if node.children[1] == :to_s
18
- s(:send, node.children[0], :toString, *node.children[2..-1])
21
+ s(:send, target, :toString, *args)
19
22
 
20
23
  elsif node.children[1] == :to_i
21
- node.updated nil, [nil, :parseInt, node.children[0],
22
- *node.children[2..-1]]
24
+ node.updated nil, [nil, :parseInt, target, *args]
23
25
 
24
26
  elsif node.children[1] == :to_f
25
- node.updated nil, [nil, :parseFloat, node.children[0],
26
- *node.children[2..-1]]
27
+ node.updated nil, [nil, :parseFloat, target, *args]
28
+
29
+ elsif node.children[1] == :each
30
+ if target.type == :gvar and target.children == ['$']
31
+ super
32
+ elsif target.type == :send and target.children == [nil, :jQuery]
33
+ super
34
+ else
35
+ node.updated nil, [target, :forEach, *args]
36
+ end
37
+
38
+ elsif node.children[1] == :each_with_index
39
+ node.updated nil, [target, :forEach, *args]
27
40
 
28
41
  else
29
42
  super
@@ -37,5 +50,7 @@ module Ruby2JS
37
50
  Parser::AST::Node.new type, args
38
51
  end
39
52
  end
53
+
54
+ DEFAULTS.push Functions
40
55
  end
41
56
  end
@@ -16,8 +16,6 @@ module Ruby2JS
16
16
 
17
17
  if EXPRESSIONS.include? block.last.type
18
18
  block.push s(:return, block.pop)
19
- else
20
- p block.last.type
21
19
  end
22
20
 
23
21
  if block.length == 1
@@ -59,5 +57,7 @@ p block.last.type
59
57
  Parser::AST::Node.new type, args
60
58
  end
61
59
  end
60
+
61
+ DEFAULTS.push Return
62
62
  end
63
63
  end
@@ -1,7 +1,7 @@
1
1
  module Ruby2JS
2
2
  module VERSION #:nodoc:
3
3
  MAJOR = 0
4
- MINOR = 1
4
+ MINOR = 2
5
5
  TINY = 0
6
6
 
7
7
  STRING = [MAJOR, MINOR, TINY].join('.')
data/ruby2js.gemspec CHANGED
@@ -2,15 +2,16 @@
2
2
 
3
3
  Gem::Specification.new do |s|
4
4
  s.name = "ruby2js"
5
- s.version = "0.1.0"
5
+ s.version = "0.2.0"
6
6
 
7
7
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
8
8
  s.authors = ["Sam Ruby"]
9
- s.date = "2013-11-11"
9
+ s.date = "2013-11-12"
10
10
  s.description = " The base package maps Ruby syntax to JavaScript semantics.\n Filters may be provided to add Ruby-specific or Framework specific\n behavior.\n"
11
11
  s.email = "rubys@intertwingly.net"
12
12
  s.files = ["ruby2js.gemspec", "README.md", "lib/ruby2js", "lib/ruby2js/version.rb", "lib/ruby2js/converter.rb", "lib/ruby2js/filter", "lib/ruby2js/filter/return.rb", "lib/ruby2js/filter/angularrb.rb", "lib/ruby2js/filter/functions.rb", "lib/ruby2js.rb"]
13
13
  s.homepage = "http://github.com/rubys/ruby2js"
14
+ s.licenses = ["MIT"]
14
15
  s.require_paths = ["lib"]
15
16
  s.rubygems_version = "2.0.7"
16
17
  s.summary = "Minimal yet extensible Ruby to JavaScript conversion."
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ruby2js
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Ruby
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2013-11-11 00:00:00.000000000 Z
11
+ date: 2013-11-12 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: parser
@@ -40,7 +40,8 @@ files:
40
40
  - lib/ruby2js/filter/functions.rb
41
41
  - lib/ruby2js.rb
42
42
  homepage: http://github.com/rubys/ruby2js
43
- licenses: []
43
+ licenses:
44
+ - MIT
44
45
  metadata: {}
45
46
  post_install_message:
46
47
  rdoc_options: []