drg 0.15.4 → 0.15.5
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/ruby/assignment.rb +25 -0
- data/lib/drg/ruby/func.rb +14 -2
- data/lib/drg/ruby.rb +1 -0
- data/lib/drg/spec.rb +13 -4
- data/lib/drg/version.rb +1 -1
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 63f814a01fc0fbe0162746f51d58f4fd4f761b74
|
4
|
+
data.tar.gz: 51c609488f4b8f9fc82f8e71898da822f71c0f36
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4f95bdc5018996bcec997689a04b9d42e550007512858b5c895ee0078fe2c92a0bd21af92dcb21a22423eb83cf93f88ad7a8778a0a9427ca20ada802f4634cb4
|
7
|
+
data.tar.gz: 7790f3fc153247b4e3426452ff2d180d8651fdaef949fd1764aa34e5370c0db97a2e592e315380bc069d62d125637d2f9cc25a9976fdd9d8767b97455e6d9cde
|
@@ -0,0 +1,25 @@
|
|
1
|
+
module DRG
|
2
|
+
class Ruby
|
3
|
+
class Assignment
|
4
|
+
attr_reader :sexp
|
5
|
+
|
6
|
+
def initialize(sexp)
|
7
|
+
@sexp = sexp
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_s
|
11
|
+
"assigns #{ivar_name}"
|
12
|
+
end
|
13
|
+
|
14
|
+
# @example s(:iasgn, :@duder, s(:if, ...)
|
15
|
+
# @example s(:op_asgn_or, s(:ivar, :@report), ...)
|
16
|
+
def ivar_name
|
17
|
+
if sexp.first == :iasgn
|
18
|
+
sexp[1]
|
19
|
+
elsif sexp.first == :op_asgn_or
|
20
|
+
sexp[1][1]
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/drg/ruby/func.rb
CHANGED
@@ -2,12 +2,24 @@ class DRG::Ruby::Func < Struct.new(:sexp, :_private)
|
|
2
2
|
alias private? _private
|
3
3
|
|
4
4
|
def conditions
|
5
|
-
DRG::Decorators::SexpDecorator.new(sexp).each_sexp_condition.map
|
6
|
-
|
5
|
+
DRG::Decorators::SexpDecorator.new(sexp).each_sexp_condition.map &DRG::Ruby::Condition.method(:new)
|
6
|
+
end
|
7
|
+
|
8
|
+
def assignments
|
9
|
+
nodes = find_assignments(sexp)
|
10
|
+
sexp.find_nodes(:rescue).each do |node|
|
11
|
+
node = node[1] if node[1].first == :block
|
12
|
+
nodes.concat find_assignments(node)
|
7
13
|
end
|
14
|
+
nodes.map &DRG::Ruby::Assignment.method(:new)
|
15
|
+
end
|
16
|
+
|
17
|
+
def find_assignments(s_expression)
|
18
|
+
s_expression.find_nodes(:op_asgn_or) + s_expression.find_nodes(:iasgn)
|
8
19
|
end
|
9
20
|
|
10
21
|
# @note we drop(1) to get rid of :args (which should be the first item in the sexp)
|
22
|
+
# @note called from subclasses
|
11
23
|
def map_args(_sexp = sexp, list = [])
|
12
24
|
val = _sexp.first
|
13
25
|
return list.drop(1) unless val
|
data/lib/drg/ruby.rb
CHANGED
data/lib/drg/spec.rb
CHANGED
@@ -7,7 +7,7 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
7
7
|
end
|
8
8
|
|
9
9
|
def self.generate(file)
|
10
|
-
spec =
|
10
|
+
spec = new(file)
|
11
11
|
return if spec.funcs.empty? # nothing to do
|
12
12
|
lines = [%Q(require "spec_helper"), %Q(), %Q(describe #{spec.const} do)]
|
13
13
|
if spec.class?
|
@@ -22,6 +22,9 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
22
22
|
lines << %Q()
|
23
23
|
spec.funcs.reject(&:private?).each do |func|
|
24
24
|
lines << %Q( describe #{spec.quote("#{func.class? ? '.' : '#'}#{func.name}")} do)
|
25
|
+
func.assignments.each do |assignment|
|
26
|
+
lines << %Q( it #{spec.quote(assignment)} do) << %Q( end)
|
27
|
+
end
|
25
28
|
func.conditions.each do |condition|
|
26
29
|
lines.concat spec.collect_contexts(condition, ' ')
|
27
30
|
end
|
@@ -49,7 +52,7 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
49
52
|
def collect_contexts(condition, indent = '', contexts = [])
|
50
53
|
new_indent = indent + (' ' * self.class.default_indent_size)
|
51
54
|
contexts << %Q(#{indent}context #{quote(tr(condition.short_statement))} do) << %Q(#{new_indent}before {})
|
52
|
-
|
55
|
+
if should_print? condition.return_value
|
53
56
|
contexts << %Q(#{new_indent}it #{quote(condition.return_value)} do) << %Q(#{new_indent}end)
|
54
57
|
end
|
55
58
|
if condition.nested_conditions.any?
|
@@ -58,7 +61,7 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
58
61
|
contexts << %Q(#{indent}end) << %Q() # /context
|
59
62
|
if condition.parts.empty?
|
60
63
|
contexts << %Q(#{indent}context #{quote(tr(negate(condition.short_statement)))} do) << %Q(#{new_indent}before {})
|
61
|
-
|
64
|
+
if should_print? condition.else_return_value
|
62
65
|
contexts << %Q(#{new_indent}it #{quote(condition.else_return_value)} do) << %Q(#{new_indent}end)
|
63
66
|
end
|
64
67
|
contexts << %Q(#{indent}end)
|
@@ -67,7 +70,7 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
67
70
|
contexts << %Q(#{indent}context #{quote(tr(condition_part.short_statement))} do) << %Q(#{new_indent}before {})
|
68
71
|
contexts << %Q(#{new_indent}it #{quote(condition_part.return_value)} do) << %Q(#{new_indent}end)
|
69
72
|
contexts << %Q(#{indent}end)
|
70
|
-
|
73
|
+
if should_print? condition_part.else_return_value
|
71
74
|
contexts << %Q(#{indent}context #{quote(tr(negate(condition_part.short_statement)))} do) << %Q(#{new_indent}before {})
|
72
75
|
contexts << %Q(#{new_indent}it #{quote(condition_part.else_return_value)} do) << %Q(#{new_indent}end)
|
73
76
|
contexts << %Q(#{indent}end)
|
@@ -77,6 +80,7 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
77
80
|
end
|
78
81
|
|
79
82
|
def quote(txt)
|
83
|
+
txt = txt.to_s
|
80
84
|
txt.strip!
|
81
85
|
if txt =~ /"/
|
82
86
|
"%Q[#{txt.gsub(/\#\{(.*?)\}/m, '\#{\1}')}]"
|
@@ -103,4 +107,9 @@ class DRG::Spec < DelegateClass(DRG::Ruby::Const)
|
|
103
107
|
end
|
104
108
|
phrase
|
105
109
|
end
|
110
|
+
|
111
|
+
# @description reject multiline statements, which means we messed up somewhere else, so let's hide that
|
112
|
+
def should_print?(txt)
|
113
|
+
!txt.empty? and txt !~ /\n/
|
114
|
+
end
|
106
115
|
end
|
data/lib/drg/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
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.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan Buckley
|
@@ -148,6 +148,7 @@ files:
|
|
148
148
|
- lib/drg/decorators.rb
|
149
149
|
- lib/drg/decorators/sexp_decorator.rb
|
150
150
|
- lib/drg/ruby.rb
|
151
|
+
- lib/drg/ruby/assignment.rb
|
151
152
|
- lib/drg/ruby/class_func.rb
|
152
153
|
- lib/drg/ruby/condition.rb
|
153
154
|
- lib/drg/ruby/const.rb
|