Skip to content
Paul Götze edited this page Sep 22, 2015 · 1 revision

Examples

Blocks:

CodeBreaker.parse("5.times { |n| puts n }")
# => {
#      :block=>[
#        [Fixnum, :times], 
#        {:args=>[{:arg=>:n}]}, 
#        [:puts, {:lvar=>:n}]
#      ]
#    }

CodeBreaker.parse("[1, 2].reduce(0) { |sum, n| sum += n }")
# => {
#      :block=>[
#        [{:array=>[Fixnum, Fixnum]}, :reduce, Fixnum], 
#        {:args=>[{:arg=>:sum}, {:arg=>:n}]}, 
#        {:op_asgn=>[{:lvasgn=>[:sum]}, :+, {:lvar=>:n}]}
#      ]
#    }

Block passes:

CodeBreaker.parse("[1, 2].map &:to_s")
# => [{:array=>[Fixnum, Fixnum]}, :map, {:block_pass=>:to_s}]

Block arguments:

CodeBreaker.parse("def greet(name, &block)\n'hello!'\nend")
# => {:def=>[:greet, {:args=>[{:arg=>:name}, {:blockarg=>:block}]}, String]}

Rest arguments:

CodeBreaker.parse("def greet(name, *args)\n'hello!'\nend")
# => {:def=>[:greet, {:args=>[{:arg=>:name}, {:restarg=>:args}]}, String]}

Optional arguments:

CodeBreaker.parse("def greet(name, options = {a: 1})\n'hello!'\nend")
# => {
#      :def=>[
#        :greet, 
#        {
#          :args=>[
#            {:arg=>:name}, 
#            {:optarg=>[:options, {:hash=>[{Symbol=>Fixnum}]}]}
#          ]
#        }, 
#        String
#      ]
#    }

Keyword arguments:

CodeBreaker.parse("def greet(title:, name:)\n\nend")
# => {:def=>[:greet, {:args=>[{:kwarg=>:title}, {:kwarg=>:name}]}]}

Optional keyword arguments:

CodeBreaker.parse("def greet(title: 'Mr.')\n\nend")
# => {:def=>[:greet, {:args=>[{:kwoptarg=>[:title, String]}]}]}

Rest keyword arguments:

CodeBreaker.parse("def greet(name:, **opts)\n\nend")
# => {:def=>[:greet, {:args=>[{:kwarg=>:name}, {:kwrestarg=>:opts}]}]}

Splat operator:

CodeBreaker.parse("puts(*[1,2])")
# => [:puts, {:splat=>{:array=>[Fixnum, Fixnum]}}]

Clone this wiki locally