drg 0.15.3 → 0.15.4
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 +4 -4
- data/lib/drg/decorators/sexp_decorator.rb +10 -3
- data/lib/drg/ruby/condition.rb +53 -24
- data/lib/drg/spec.rb +20 -6
- data/lib/drg/version.rb +1 -1
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0d1cc344f3f40558e3ff0b5b1b4e8cb121b28f33
|
4
|
+
data.tar.gz: 725395f9526ee8371ccd781be7062aab12415342
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: ecd79de1e5d14e24502a38492bd154140c7beebcfbab0210152aa0ea4b47662ba03533c044ba10e6ce65bf5fbc130a4e1091326bd0487cf4f3bd9a11a7f396b5
|
7
|
+
data.tar.gz: d7670cfd5996e9cc0314088d8d09f89b9aeb006173b7f670f3e80361673062b445f5e8401188963fc087d2318170e945ab2dcb5f25bce768971b791920dd54bf
|
@@ -1,12 +1,19 @@
|
|
1
1
|
class DRG::Decorators::SexpDecorator < DelegateClass(Sexp)
|
2
2
|
def each_sexp_condition
|
3
3
|
return enum_for(__method__) unless block_given?
|
4
|
+
yielded = []
|
4
5
|
each_sexp do |exp|
|
5
|
-
next unless exp.is_a?(Sexp)
|
6
6
|
if exp.first == :if
|
7
7
|
yield exp
|
8
|
-
|
9
|
-
|
8
|
+
yielded << exp
|
9
|
+
else
|
10
|
+
nested_sexp = exp.enum_for(:deep_each).select { |s| s.first == :if }
|
11
|
+
nested_sexp.each do |sexp|
|
12
|
+
if yielded.find { |x| x.object_id == sexp.object_id or x.enum_for(:deep_each).find { |xx| xx.object_id == sexp.object_id } }.nil?
|
13
|
+
yield sexp
|
14
|
+
yielded << sexp
|
15
|
+
end
|
16
|
+
end
|
10
17
|
end
|
11
18
|
end
|
12
19
|
end
|
data/lib/drg/ruby/condition.rb
CHANGED
@@ -2,37 +2,67 @@ require 'ruby2ruby'
|
|
2
2
|
|
3
3
|
class DRG::Ruby::Condition
|
4
4
|
|
5
|
-
|
5
|
+
module SetComparison
|
6
|
+
def eql?(other)
|
7
|
+
hash == other.hash
|
8
|
+
end
|
9
|
+
|
10
|
+
def hash
|
11
|
+
sexp.object_id
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
include SetComparison
|
16
|
+
|
17
|
+
attr_reader :statement, :nested_conditions, :sexp, :parts, :unless_found
|
6
18
|
|
7
19
|
def initialize(sexp)
|
8
20
|
@sexp = sexp
|
9
21
|
@statement = Ruby2Ruby.new.process(sexp.deep_clone)
|
10
22
|
@nested_conditions = create_nested_conditions
|
23
|
+
@parts = load_parts
|
11
24
|
end
|
12
25
|
|
13
26
|
def short_statement
|
14
|
-
|
15
|
-
($1 << $2).strip
|
16
|
-
elsif @statement =~ /(.*?)\s+\?\s+/
|
17
|
-
$1.strip
|
18
|
-
end
|
27
|
+
"#{'unless ' if sexp[2].nil?}#{Ruby2Ruby.new.process(sexp[1].clone!)}"
|
19
28
|
end
|
20
29
|
|
21
30
|
def return_value
|
22
|
-
edit
|
31
|
+
edit Ruby2Ruby.new.process(if_return_value.clone!)
|
32
|
+
end
|
33
|
+
|
34
|
+
def else_return_value
|
35
|
+
edit Ruby2Ruby.new.process(find_else_return_val.clone!)
|
36
|
+
end
|
37
|
+
|
38
|
+
def if_return_value
|
39
|
+
if sexp[2].nil?
|
40
|
+
sexp.last
|
41
|
+
elsif sexp[2].first == :if
|
42
|
+
nil
|
43
|
+
elsif sexp[2].first == :block
|
44
|
+
sexp[2].last
|
45
|
+
elsif sexp[2].first == :rescue
|
46
|
+
sexp[2][1].last
|
47
|
+
else
|
48
|
+
sexp[2]
|
49
|
+
end
|
23
50
|
end
|
24
51
|
|
25
|
-
def
|
26
|
-
if
|
27
|
-
|
28
|
-
elsif
|
29
|
-
|
52
|
+
def find_else_return_val
|
53
|
+
if sexp.compact[3].nil?
|
54
|
+
nil
|
55
|
+
elsif sexp[3].first == :block
|
56
|
+
sexp[3].last
|
57
|
+
elsif sexp[3].first == :if
|
58
|
+
nil
|
30
59
|
else
|
31
|
-
|
60
|
+
sexp[3]
|
32
61
|
end
|
33
62
|
end
|
34
63
|
|
35
64
|
def edit(txt)
|
65
|
+
txt = txt.to_s
|
36
66
|
txt.sub! /^return\s*/, 'returns '
|
37
67
|
txt.sub! /^returns\s*$/, 'returns nil'
|
38
68
|
if txt.split(/\s/).length == 1
|
@@ -44,21 +74,20 @@ class DRG::Ruby::Condition
|
|
44
74
|
end
|
45
75
|
|
46
76
|
#
|
47
|
-
#
|
77
|
+
# Private
|
48
78
|
#
|
49
79
|
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
80
|
+
# @description handles elsif
|
81
|
+
def load_parts
|
82
|
+
condition_parts = Set.new
|
83
|
+
sexp.each_sexp do |s|
|
84
|
+
if s.first == :if
|
85
|
+
condition_parts << self.class.new(s)
|
86
|
+
end
|
87
|
+
end
|
88
|
+
condition_parts.to_a
|
56
89
|
end
|
57
90
|
|
58
|
-
#
|
59
|
-
# Private
|
60
|
-
#
|
61
|
-
|
62
91
|
def create_nested_conditions
|
63
92
|
nc = Set.new
|
64
93
|
s = sexp.drop(1)
|
data/lib/drg/spec.rb
CHANGED
@@ -12,14 +12,13 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
12
12
|
lines = [%Q(require "spec_helper"), %Q(), %Q(describe #{spec.const} do)]
|
13
13
|
if spec.class?
|
14
14
|
spec.initialization_args.each do |arg|
|
15
|
-
lines << %Q( let(:#{arg}) {})
|
15
|
+
lines << %Q( let(:#{arg.to_s.sub(/^[&*]/, '')}) {})
|
16
16
|
end
|
17
17
|
lines << %Q()
|
18
18
|
lines << %Q( subject { described_class.new #{spec.initialization_args.join(', ')} })
|
19
19
|
elsif spec.module?
|
20
20
|
lines << %Q( subject { Class.new { include #{spec.const} }.new })
|
21
21
|
end
|
22
|
-
|
23
22
|
lines << %Q()
|
24
23
|
spec.funcs.reject(&:private?).each do |func|
|
25
24
|
lines << %Q( describe #{spec.quote("#{func.class? ? '.' : '#'}#{func.name}")} do)
|
@@ -48,7 +47,7 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
48
47
|
end
|
49
48
|
|
50
49
|
def collect_contexts(condition, indent = '', contexts = [])
|
51
|
-
new_indent = indent + (' ' *
|
50
|
+
new_indent = indent + (' ' * self.class.default_indent_size)
|
52
51
|
contexts << %Q(#{indent}context #{quote(tr(condition.short_statement))} do) << %Q(#{new_indent}before {})
|
53
52
|
unless condition.return_value.empty?
|
54
53
|
contexts << %Q(#{new_indent}it #{quote(condition.return_value)} do) << %Q(#{new_indent}end)
|
@@ -57,15 +56,30 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
57
56
|
condition.nested_conditions.each { |nc| collect_contexts(nc, new_indent, contexts) }
|
58
57
|
end
|
59
58
|
contexts << %Q(#{indent}end) << %Q() # /context
|
60
|
-
|
61
|
-
|
59
|
+
if condition.parts.empty?
|
60
|
+
contexts << %Q(#{indent}context #{quote(tr(negate(condition.short_statement)))} do) << %Q(#{new_indent}before {})
|
61
|
+
unless condition.else_return_value.empty?
|
62
|
+
contexts << %Q(#{new_indent}it #{quote(condition.else_return_value)} do) << %Q(#{new_indent}end)
|
63
|
+
end
|
64
|
+
contexts << %Q(#{indent}end)
|
65
|
+
end
|
66
|
+
condition.parts.each do |condition_part|
|
67
|
+
contexts << %Q(#{indent}context #{quote(tr(condition_part.short_statement))} do) << %Q(#{new_indent}before {})
|
68
|
+
contexts << %Q(#{new_indent}it #{quote(condition_part.return_value)} do) << %Q(#{new_indent}end)
|
69
|
+
contexts << %Q(#{indent}end)
|
70
|
+
unless condition_part.else_return_value.empty?
|
71
|
+
contexts << %Q(#{indent}context #{quote(tr(negate(condition_part.short_statement)))} do) << %Q(#{new_indent}before {})
|
72
|
+
contexts << %Q(#{new_indent}it #{quote(condition_part.else_return_value)} do) << %Q(#{new_indent}end)
|
73
|
+
contexts << %Q(#{indent}end)
|
74
|
+
end
|
75
|
+
end
|
62
76
|
contexts
|
63
77
|
end
|
64
78
|
|
65
79
|
def quote(txt)
|
66
80
|
txt.strip!
|
67
81
|
if txt =~ /"/
|
68
|
-
"%Q[#{txt.gsub(/\#\{(.*?)\}/m, '
|
82
|
+
"%Q[#{txt.gsub(/\#\{(.*?)\}/m, '\#{\1}')}]"
|
69
83
|
else
|
70
84
|
%Q("#{txt}")
|
71
85
|
end
|
data/lib/drg/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: drg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.15.
|
4
|
+
version: 0.15.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Buckley
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-11-
|
11
|
+
date: 2015-11-27 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: ruby_parser
|