sorcerer 0.3.1 → 0.3.2

Sign up to get free protection for your applications and to get access to all the features.
data/lib/sorcerer.rb CHANGED
@@ -12,4 +12,5 @@ end
12
12
 
13
13
  require 'sorcerer/resource'
14
14
  require 'sorcerer/subexpression'
15
+ require 'sorcerer/version'
15
16
 
@@ -74,7 +74,6 @@ module Sorcerer
74
74
  end
75
75
 
76
76
  def resource(sexp)
77
- sexp = sexp.first if nested_sexp?(sexp)
78
77
  fail NotSexpError, "Not an S-EXPER: #{sexp.inspect}" unless sexp?(sexp)
79
78
  handler = HANDLERS[sexp.first]
80
79
  raise NoHandlerError.new(sexp.first) unless handler
@@ -492,7 +491,16 @@ module Sorcerer
492
491
  resource(sexp[1])
493
492
  emit(")")
494
493
  },
495
- :defs => NYI,
494
+ :defs => lambda { |sexp|
495
+ emit("def ")
496
+ resource(sexp[1])
497
+ resource(sexp[2])
498
+ resource(sexp[3])
499
+ opt_parens(sexp[4])
500
+ newline
501
+ indent do resource(sexp[5]) end
502
+ emit("end")
503
+ },
496
504
  :do_block => lambda { |sexp|
497
505
  emit_block(sexp, "do", "end")
498
506
  },
@@ -903,7 +911,7 @@ module Sorcerer
903
911
  :@lparen => NYI,
904
912
  :@nl => NYI,
905
913
  :@op => EMIT1,
906
- :@period => NYI,
914
+ :@period => EMIT1,
907
915
  :@qwords_beg => NYI,
908
916
  :@rbrace => NYI,
909
917
  :@rbracket => NYI,
@@ -1,7 +1,7 @@
1
1
  module Sorcerer
2
2
  VERSION_MAJOR = 0
3
3
  VERSION_MINOR = 3
4
- VERSION_BUILD = 1
4
+ VERSION_BUILD = 2
5
5
  VERSION_BETA = 0
6
6
 
7
7
  VERSION_NUMBERS = [VERSION_MAJOR, VERSION_MINOR, VERSION_BUILD] +
@@ -33,9 +33,21 @@ class SourcerTest < Test::Unit::TestCase
33
33
  # string in single line and multi-line modes.
34
34
  #
35
35
  def assert_resource_lines(string, options={})
36
- assert_resource_for_mode(string, options.merge(multiline: false)) { |s| for_single_line(s) }
37
- assert_resource_for_mode(string, options.merge(multiline: true)) { |s| for_multi_line(s) }
38
- assert_resource_for_mode(string, options.merge(indent: true)) { |s| for_indented(s) }
36
+ assert_resource_for_mode(
37
+ string,
38
+ options.merge(multiline: false)) { |s|
39
+ for_single_line(s)
40
+ }
41
+ assert_resource_for_mode(
42
+ string,
43
+ options.merge(multiline: true)) { |s|
44
+ for_multi_line(s)
45
+ }
46
+ assert_resource_for_mode(
47
+ string,
48
+ options.merge(indent: true)) { |s|
49
+ for_indented(s)
50
+ }
39
51
  end
40
52
 
41
53
  # Assert the string is correctly resourced given the options and the
@@ -81,7 +93,13 @@ class SourcerTest < Test::Unit::TestCase
81
93
  puts
82
94
  puts "***************************** options: #{options.inspect}"
83
95
  end
84
- sexp = quietly { Ripper::SexpBuilder.new(string).parse }
96
+ sexp = quietly {
97
+ if options[:quick]
98
+ Ripper.sexp(string)
99
+ else
100
+ Ripper::SexpBuilder.new(string).parse
101
+ end
102
+ }
85
103
  fail "Failed to parts '#{string}'" if sexp.nil?
86
104
  Sorcerer.source(sexp, options)
87
105
  end
@@ -99,6 +117,12 @@ class SourcerTest < Test::Unit::TestCase
99
117
  assert_resource "Mod::NS::Y"
100
118
  end
101
119
 
120
+ def test_can_source_keywords
121
+ assert_resource "true"
122
+ assert_resource "false"
123
+ assert_resource "nil"
124
+ end
125
+
102
126
  def test_can_source_constant_definition
103
127
  assert_resource "X = 1"
104
128
  assert_resource "X::Y = 1"
@@ -583,6 +607,13 @@ class SourcerTest < Test::Unit::TestCase
583
607
  assert_resource_lines "def f(a); #x; #y; end"
584
608
  end
585
609
 
610
+ def test_can_source_def_self
611
+ assert_resource_lines "def self.f; end"
612
+ assert_resource_lines "def self.f(a, *args, &block); #x; #y; end"
613
+ assert_resource_lines "def Mod.f; end"
614
+ assert_resource_lines "def Mod.f(a, *args, &block); #x; #y; end"
615
+ end
616
+
586
617
  def test_can_source_class_without_parent
587
618
  assert_resource_lines "class X; end"
588
619
  assert_resource_lines "class X; #x; end"
@@ -630,11 +661,6 @@ class SourcerTest < Test::Unit::TestCase
630
661
  assert_resource_lines "Then {~#a == b; #x~}"
631
662
  end
632
663
 
633
- def test_can_use_ripper_sexp_output
634
- sexp = quietly { Ripper.sexp("a = 1") }
635
- assert_equal "a = 1", Sorcerer.source(sexp)
636
- end
637
-
638
664
  def test_can_handle_missing_statements
639
665
  sexp = [:bodystmt, [:stmts_add, [:stmts_new]], nil, nil, nil]
640
666
  assert_equal "", Sorcerer.source(sexp)
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sorcerer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.1
4
+ version: 0.3.2
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-09 00:00:00.000000000 Z
12
+ date: 2012-07-14 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: Generate the original Ruby source from a Ripper-style abstract syntax
15
15
  tree.