sorcerer 0.3.10 → 0.3.11

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: f65acc7f174926768d7515c943f2895106a79f80
4
+ data.tar.gz: 79dce6386aa13cef261f88b20be6594406f325d9
5
+ SHA512:
6
+ metadata.gz: 471a9b64f1487826f2f7ee8b3844d655004765b338686debdab40c3a173bf8b0ad5b36bd544eab9adf2eb0901acd480261c5761b233e51a0d76221efdb2d1e15
7
+ data.tar.gz: 67d2541e79034a1172be87e26eeddb02bfa9346a607d82d578531f1883f0919a9ba436c9687ae2062f8fd225ada3661fcbc3de68247ebf29852f074ce3d63d64
data/README.md CHANGED
@@ -11,7 +11,7 @@ Sorcerer is targetted mainly at small snippets of Ruby code,
11
11
  expressable in a single line. Longer examples may be re-sourced, but
12
12
  they will be rendered in a single line format.
13
13
 
14
- **Version: 0.3.10**
14
+ **Version: 0.3.11**
15
15
 
16
16
  ## Limitations
17
17
 
@@ -123,6 +123,11 @@ output emitted, then use the debug option:
123
123
  puts Sorcerer.source(sexp, debug: true)
124
124
  ```
125
125
 
126
+ ## License
127
+
128
+ Sorcerer is available under the terms of the MIT license. See the
129
+ MIT-LICENSE file for details.
130
+
126
131
  ## History
127
132
 
128
133
  * 0.3.9 - Support %i{} and %I{}.
@@ -34,18 +34,30 @@ module Sorcerer
34
34
  case sexp.first
35
35
  when :var_ref
36
36
  list_sexp(sexp)
37
- when :vcall, :binary, :array, :hash, :unary, :defined
37
+ when :vcall # [:vcall, target]
38
+ @result << sexp
39
+ when :fcall # [:fcall, target]
40
+ # ignore
41
+ when :call # [:call, target, ".", meth]
42
+ @result << sexp
43
+ recur(sexp[3])
44
+ recur(sexp[1])
45
+ when :method_add_arg # [:method_add_arg, call, args]
46
+ @result << sexp
47
+ recur(sexp[2])
48
+ within_method_sexp(sexp[1])
49
+ when :method_add_block # [:method_add_block, call, block]
50
+ @result << sexp
51
+ within_method_sexp(sexp[1])
52
+ when :binary, :array, :hash, :unary, :defined
38
53
  @result << sexp
39
54
  list_sexp(sexp)
40
55
  when :aref
41
56
  @result << sexp
42
57
  recur(sexp[1])
43
58
  recur(sexp[2])
44
- when :brace_block
59
+ when :brace_block # [:brace_block, nil, statments]
45
60
  # ignore
46
- when :call, :method_add_block, :method_add_arg
47
- @result << sexp
48
- method_sexp(sexp)
49
61
  when :const_path_ref
50
62
  @result << sexp
51
63
  recur(sexp[1])
@@ -61,15 +73,17 @@ module Sorcerer
61
73
  end
62
74
  end
63
75
 
64
- def method_sexp(sexp)
76
+ # When already handling a method call, we don't need to recur on
77
+ # some items.
78
+ def within_method_sexp(sexp)
65
79
  case sexp.first
66
- when :call
80
+ when :call # [:call, target, ".", meth]
67
81
  recur(sexp[1])
68
- when :method_add_block
69
- method_sexp(sexp[1])
70
- when :method_add_arg
82
+ when :method_add_block # [:method_add_block, call, block]
83
+ within_method_sexp(sexp[1])
84
+ when :method_add_arg # [:method_add_arg, call, args]
71
85
  recur(sexp[2])
72
- method_sexp(sexp[1])
86
+ within_method_sexp(sexp[1])
73
87
  else
74
88
  recur(sexp)
75
89
  end
@@ -2,7 +2,7 @@ module Sorcerer
2
2
  VERSION_NUMBERS = [
3
3
  VERSION_MAJOR = 0,
4
4
  VERSION_MINOR = 3,
5
- VERSION_BUILD = 10,
5
+ VERSION_BUILD = 11,
6
6
  ]
7
7
 
8
8
  VERSION = VERSION_NUMBERS.join('.')
@@ -117,6 +117,7 @@ class ResourceTest < Test::Unit::TestCase
117
117
  # I don't think we get enough info to accurately resource these.
118
118
  # All these calls come back with a period rather than a double
119
119
  # colon.
120
+ skip "Can't resource methods calls with ::"
120
121
  assert_resource "Const::meth(a)"
121
122
  assert_resource "Const::meth(a, b)"
122
123
  assert_resource "Const::meth(a, *b)"
@@ -134,7 +135,14 @@ class ResourceTest < Test::Unit::TestCase
134
135
  assert_resource "meth(a, *args, &code)"
135
136
  end
136
137
 
137
- def test_can_source_method_without_explicit_poetry_mode
138
+ def test_can_source_capitalized_method_without_explicit_target
139
+ assert_resource "Meth()"
140
+ assert_resource "Meth a"
141
+ assert_resource "Meth(a)"
142
+ assert_resource "Meth { a }"
143
+ end
144
+
145
+ def test_can_source_method_without_explicit_target_in_poetry_mode
138
146
  assert_resource "meth a"
139
147
  assert_resource "meth a, b"
140
148
  assert_resource "meth a, b, c"
@@ -586,6 +594,10 @@ class ResourceTest < Test::Unit::TestCase
586
594
  assert_resource_lines "def f &block; end"
587
595
  end
588
596
 
597
+ def test_can_source_capitalized_def
598
+ assert_resource_lines "def F(); end"
599
+ end
600
+
589
601
  if RUBY_VERSION >= "2.0.0"
590
602
  def test_can_source_ruby2_defs
591
603
  assert_resource_lines "def f(a, b=1, *args, c: 2, **opts, &block); end"
@@ -4,9 +4,10 @@ require 'ripper'
4
4
  require 'pp'
5
5
 
6
6
  class SubexpressionTest < Test::Unit::TestCase
7
- def assert_subexpressions(code, subexpressions, debug=false)
7
+ def assert_subexpressions(code, subexpressions, options={})
8
8
  sexp = Ripper::SexpBuilder.new(code).parse
9
- if debug
9
+ if options[:debug]
10
+ puts "CODE: <#{code}>"
10
11
  pp sexp
11
12
  end
12
13
  subs = Sorcerer.subexpressions(sexp)
@@ -32,7 +33,9 @@ class SubexpressionTest < Test::Unit::TestCase
32
33
 
33
34
  def test_method_calls_without_args
34
35
  assert_subexpressions "o.f", ["o.f", "o"]
36
+ assert_subexpressions "f", ["f"]
35
37
  assert_subexpressions "f()", ["f()"]
38
+ assert_subexpressions "F()", ["F()"]
36
39
  end
37
40
 
38
41
  def test_method_calls_with_args
metadata CHANGED
@@ -1,15 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sorcerer
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.10
5
- prerelease:
4
+ version: 0.3.11
6
5
  platform: ruby
7
6
  authors:
8
7
  - Jim Weirich
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-02-06 00:00:00.000000000 Z
11
+ date: 2013-07-10 00:00:00.000000000 Z
13
12
  dependencies: []
14
13
  description: Generate the original Ruby source from a Ripper-style abstract syntax
15
14
  tree.
@@ -35,6 +34,7 @@ files:
35
34
  - test/sorcerer/subexpression_test.rb
36
35
  homepage: http://github.com/jimweirich/sorcerer
37
36
  licenses: []
37
+ metadata: {}
38
38
  post_install_message:
39
39
  rdoc_options:
40
40
  - --line-numbers
@@ -44,21 +44,19 @@ rdoc_options:
44
44
  require_paths:
45
45
  - lib
46
46
  required_ruby_version: !ruby/object:Gem::Requirement
47
- none: false
48
47
  requirements:
49
- - - ! '>='
48
+ - - '>='
50
49
  - !ruby/object:Gem::Version
51
50
  version: '0'
52
51
  required_rubygems_version: !ruby/object:Gem::Requirement
53
- none: false
54
52
  requirements:
55
- - - ! '>='
53
+ - - '>='
56
54
  - !ruby/object:Gem::Version
57
55
  version: '0'
58
56
  requirements: []
59
57
  rubyforge_project: sorcerer
60
- rubygems_version: 1.8.24
58
+ rubygems_version: 2.0.3
61
59
  signing_key:
62
- specification_version: 3
60
+ specification_version: 4
63
61
  summary: Generate Source from Ripper ASTs
64
62
  test_files: []