drg 0.14.0 → 0.14.1

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 8b762ca2893927b7c8daa8f20f406b94cc9aad2f
4
- data.tar.gz: ccd11fadf6b920aabf92352cdf326a913a6de90c
3
+ metadata.gz: 8088ff21bcf344deaf9426041abe5010e50323b1
4
+ data.tar.gz: a1b79e42fcd4f995d4b50c7ae5cbe37e2082579f
5
5
  SHA512:
6
- metadata.gz: 27a26be99bed739f410282a8f161713d7c3066b8a50a04902b783e33b667dbfa1654bee482aab0d0b4c4359bf4441e714c15fb86d3249225bf7a8ba16fb5fd53
7
- data.tar.gz: 984f714b1a1371c4e71420c11cfa61b6a98e2c5fa119872bf1d3c94de4c536b7567bc386540ce7e0240e1af66035660734cbf6b3447bf81031b13e665ba9dae4
6
+ metadata.gz: b70bb0f245de6a2f573ab681277a3059406c41361d3913b54c09416546b88d1c2f0ff111d9533b30c7211c7922647adfc8ebaf432160aacf36db76e5c6102f7f
7
+ data.tar.gz: 3fd5f8dd60e0557065bcec396d66633ca53ae3f1f57c652d57b3908f3165855603d2a21fb6be43f9fec278d88f33377e759e308041a0ce814c8514a08c5559f3
data/README.md CHANGED
@@ -77,11 +77,11 @@ describe Ability do
77
77
  subject { described_class.new user }
78
78
 
79
79
  describe "#initialize" do
80
- context "when user.luna?" do
80
+ context "when user.admin?" do
81
81
  before {}
82
82
  end
83
83
 
84
- context "unless user.luna?" do
84
+ context "unless user.admin?" do
85
85
  before {}
86
86
  end
87
87
  end
data/bin/console CHANGED
@@ -2,36 +2,9 @@
2
2
 
3
3
  require 'bundler/setup'
4
4
  require 'pp'
5
-
6
- # require 'ruby2ruby'
7
- # require 'ruby_parser'
8
-
9
5
  require 'rspec'
6
+ require 'irb'
10
7
  require 'object_tracker'
11
8
  require_relative '../spec/spec_helper'
12
9
 
13
- # You can add fixtures and/or initialization code here to make experimenting
14
- # with your gem easier. You can also use a different console, if you like.
15
-
16
- # (If you use this, don't forget to add pry to your Gemfile!)
17
- # require 'pry'
18
- # Pry.start
19
- require 'irb'
20
-
21
- def sexp
22
- ruby = File.readlines(FIXTURE_ROOT.join 'report.rb').join
23
- parser = RubyParser.new
24
- ruby2ruby = Ruby2Ruby.new
25
- parser.process(ruby)
26
- # ruby2ruby.process(sexp)
27
- end
28
-
29
- def sexp_spec
30
- ruby = File.readlines(FIXTURE_ROOT.join 'report_spec.rb').join
31
- parser = RubyParser.new
32
- ruby2ruby = Ruby2Ruby.new
33
- parser.process(ruby)
34
- # ruby2ruby.process(sexp)
35
- end
36
-
37
10
  IRB.start
@@ -7,13 +7,7 @@ class DRG::Ruby::Condition
7
7
  def initialize(sexp)
8
8
  @sexp = sexp
9
9
  @statement = Ruby2Ruby.new.process(sexp.deep_clone)
10
- @nested_conditions = Set.new
11
- sexp.drop(1).flatten.include?(:if) && sexp.drop(1).deep_each do |exp|
12
- DRG::Decorators::SexpDecorator.new(exp).each_sexp_condition do |node|
13
- @nested_conditions << self.class.new(node)
14
- end
15
- end
16
- @nested_conditions = @nested_conditions.to_a
10
+ @nested_conditions = create_nested_conditions
17
11
  end
18
12
 
19
13
  def short_statement
@@ -49,4 +43,19 @@ class DRG::Ruby::Condition
49
43
  def hash
50
44
  sexp.object_id
51
45
  end
46
+
47
+ #
48
+ # Private
49
+ #
50
+
51
+ def create_nested_conditions
52
+ nc = Set.new
53
+ s = sexp.drop(1)
54
+ s.flatten.include?(:if) && s.deep_each do |exp|
55
+ DRG::Decorators::SexpDecorator.new(exp).each_sexp_condition do |node|
56
+ nc << self.class.new(node)
57
+ end
58
+ end
59
+ nc.to_a
60
+ end
52
61
  end
@@ -1,13 +1,13 @@
1
1
  require 'ruby_parser'
2
2
 
3
3
  class DRG::Ruby::Const
4
- CONSTANT_DEFS = { :class => :class, :module => :module, :cdecl => :class }
4
+ CONSTANT_DEFS = { class: :class, module: :module, cdecl: :class }
5
5
 
6
6
  attr_reader :sexp
7
7
 
8
8
  # @param [Sexp] sexp
9
9
  def initialize(sexp)
10
- sexp = sexp.select { |x| x.is_a?(Array) }.last if sexp[0] == :block
10
+ sexp = sexp[2] if sexp[0] == :block
11
11
  @sexp = sexp
12
12
  end
13
13
 
data/lib/drg/ruby.rb CHANGED
@@ -11,7 +11,7 @@ module DRG
11
11
 
12
12
  attr_reader :sexp, :const
13
13
 
14
- # @param [Pathname] file
14
+ # @param [Pathname, String] file
15
15
  def initialize(file)
16
16
  @sexp = RubyParser.new.parse File.read(file)
17
17
  @const = DRG::Ruby::Const.new(sexp)
data/lib/drg/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module DRG
2
- VERSION = '0.14.0'.freeze
2
+ VERSION = '0.14.1'.freeze
3
3
  end
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.14.0
4
+ version: 0.14.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan Buckley
@@ -147,17 +147,12 @@ files:
147
147
  - lib/drg.rb
148
148
  - lib/drg/decorators.rb
149
149
  - lib/drg/decorators/sexp_decorator.rb
150
- - lib/drg/file_context.rb
151
- - lib/drg/file_reader.rb
152
- - lib/drg/judge.rb
153
- - lib/drg/let.rb
154
150
  - lib/drg/ruby.rb
155
151
  - lib/drg/ruby/class_func.rb
156
152
  - lib/drg/ruby/condition.rb
157
153
  - lib/drg/ruby/const.rb
158
154
  - lib/drg/ruby/func.rb
159
155
  - lib/drg/ruby/instance_func.rb
160
- - lib/drg/scanner.rb
161
156
  - lib/drg/spec.rb
162
157
  - lib/drg/tasks.rb
163
158
  - lib/drg/tasks/active_pinner.rb
@@ -1,205 +0,0 @@
1
- module DRG
2
- class FileContext
3
- # = Class
4
- # First attempt at reading ruby files. It was a pipe dream. See DRG::Ruby for the real stuff ;)
5
- #
6
-
7
- attr_writer :lines
8
-
9
- def initialize
10
- @lines = Set.new
11
- @is_private = false
12
- end
13
-
14
- def add(raw_line, index = 0)
15
- line_number = index + 1
16
- line = parse_line(raw_line, line_number)
17
- @lines << line
18
- line
19
- end
20
-
21
- def inspect
22
- %Q(#<DRG::FileContext:#{object_id} @lines=#{@lines.count}>, @is_private=false, @is_protected=false>)
23
- end
24
-
25
- def lines
26
- @lines.to_a
27
- end
28
-
29
- =begin
30
-
31
- def set_name *args
32
- def get_name
33
- def [](other)
34
- def +
35
- def -
36
- def <=>
37
- def /
38
- def eql?
39
-
40
- =end
41
- def parse_line(line, line_number)
42
- case line.to_s.chomp.strip
43
- when /\A(=begin|=end)/
44
- nil
45
- when /class\s+([A-Z]+\w*)/
46
- return ClassDef.new($1, line_number)
47
- when /module\s+([A-Z]+\w*)/
48
- return ModuleDef.new($1, line_number)
49
- when /def self\.([a-z0-9\[\]_+-<=>?]+)\s*\(?/
50
- # @todo check if within class << self
51
- return ClassMethodDef.new($1, line_number, current_class_or_module, @is_private)
52
- when /def ([a-z0-9\[\]_+-<=>?]+)\s*\(?/
53
- return InstanceMethodDef.new($1, line_number, current_class_or_module, @is_private)
54
- when /(.+)\s*(do|\{)(.*)(\}|end)/
55
- return BlockDef.new($1, $2, $3, line_number, $4)
56
- when /(.+)\s*(do|\{)(.*)/
57
- return BlockDef.new($1, $2, $3, line_number)
58
- when /#*\s*(private|protected)\b/i
59
- @is_private = true
60
- when /#*\s*public[\s\n]+/i
61
- @is_private = false
62
- when /\A(end|\})\b/i
63
- close_current_definition unless current_definition.method?
64
- else
65
- nil
66
- end
67
- NullLine.new(line)
68
- end
69
-
70
- def current_definition
71
- lines.reverse.detect { |line| line.open? } || Definition.new
72
- end
73
-
74
- def close_current_definition
75
- current_definition.close
76
- end
77
-
78
- def current_class_or_module
79
- current_definition = lines.reverse.detect { |line| line.open? && (line.class? || line.mod?) }
80
- current_definition && current_definition.name
81
- end
82
-
83
- def classes
84
- lines.select { |line| line.class? }
85
- end
86
-
87
- def modules
88
- lines.select { |line| line.mod? }
89
- end
90
-
91
- def blocks
92
- lines.select { |line| line.block? }
93
- end
94
-
95
- def methods
96
- lines.select { |line| line.method? }
97
- end
98
-
99
- def last_method
100
- lines.reverse.detect { |line| line.method? }
101
- end
102
-
103
- def last_class
104
- lines.reverse.detect { |line| line.class? }
105
- end
106
-
107
- module NullDefinition
108
- def class?
109
- false
110
- end
111
-
112
- def mod?
113
- false
114
- end
115
-
116
- def method?
117
- false
118
- end
119
-
120
- def block?
121
- false
122
- end
123
- end
124
-
125
- class NullLine < DelegateClass(String)
126
- include NullDefinition
127
-
128
- def eql?(*)
129
- false
130
- end
131
-
132
- def open?
133
- false
134
- end
135
- end
136
-
137
- class Definition < Object
138
- include NullDefinition
139
- attr_accessor :open, :name, :line_number
140
-
141
- def initialize(name = nil, line_number = nil, open = true)
142
- @name, @line_number, @open = name, line_number.to_i, open
143
- end
144
-
145
- def inspect
146
- %Q(#<#{self.class.name} #{instance_variables.map { |i| %Q(#{i}="#{instance_variable_get(i)}") }.join(', ')}>)
147
- end
148
-
149
- alias to_s inspect
150
-
151
- def eql?(other)
152
- @name == other.name && @line_number == other.line_number
153
- end
154
-
155
- def close
156
- @open = false
157
- end
158
-
159
- alias open? open
160
- alias hash line_number
161
- end
162
-
163
- class MethodDefinition < Definition
164
- attr_accessor :class_name, :is_private
165
-
166
- def initialize(name, line_number, class_name, is_private)
167
- super(name, line_number, false)
168
- @class_name, @is_private = class_name, is_private
169
- end
170
-
171
- def method?
172
- true
173
- end
174
- end
175
-
176
- class ClassDef < Definition
177
- def class?
178
- true
179
- end
180
- end
181
-
182
- class ModuleDef < Definition
183
- def mod?
184
- true
185
- end
186
- end
187
-
188
- class ClassMethodDef < MethodDefinition
189
- end
190
-
191
- class InstanceMethodDef < MethodDefinition
192
- end
193
-
194
- class BlockDef < Definition
195
- def initialize(name, body, opener, line_number, closer = nil)
196
- super(name, line_number, !!closer) # not open if closer present (single line block)
197
- @body, @opener, @closer, = body, opener, closer
198
- end
199
-
200
- def block?
201
- true
202
- end
203
- end
204
- end
205
- end
@@ -1,44 +0,0 @@
1
- module DRG
2
- class FileReader
3
- # = Class
4
- # Needs to keep track of the context of the file as we scan each line (e.g. what class the
5
- # current method is defined). As well as an efficient way to loop through the lines
6
- # @todo add SpecReader
7
- #
8
-
9
- include Enumerable
10
-
11
- def initialize(file_path)
12
- @file_path = file_path
13
- end
14
-
15
- def each
16
- return to_enum unless block_given?
17
- File.open(@file_path) do |f|
18
- while line = f.gets
19
- yield line
20
- end
21
- end
22
- end
23
-
24
- def each_with_context
25
- return enum_for __method__ unless block_given?
26
- @context = nil
27
- each_with_index do |line, i|
28
- current_line = context.add(line, i)
29
- yield current_line, context
30
- end
31
- end
32
-
33
- def read
34
- @context = nil
35
- each_with_index do |line, i|
36
- context.add(line, i)
37
- end
38
- end
39
-
40
- def context
41
- @context ||= FileContext.new
42
- end
43
- end
44
- end
data/lib/drg/judge.rb DELETED
@@ -1,19 +0,0 @@
1
- module DRG
2
- class Judge
3
- attr_reader :spec, :file
4
-
5
- def initialize(file, spec)
6
- @file, @spec = file, spec
7
- end
8
-
9
- def missing_methods
10
- describes = DRG::Scanner.new(spec).describes
11
- DRG::Scanner.new(file).methods.select { |method_name|
12
- describes.detect { |describe_name|
13
- # turn Report.name or Report#name into .name and #name
14
- describe_name[/#{Regexp.escape(method_name.sub(/^\w+(\.|#)/, '\1'))}/i]
15
- }.nil?
16
- }
17
- end
18
- end
19
- end
data/lib/drg/let.rb DELETED
@@ -1,4 +0,0 @@
1
- module DRG
2
- class Let < Struct.new(:name, :value)
3
- end
4
- end
data/lib/drg/scanner.rb DELETED
@@ -1,69 +0,0 @@
1
- module DRG
2
- autoload :Let, 'drg/let'
3
-
4
- class Scanner
5
- attr_reader :file
6
-
7
- def initialize(file)
8
- @file = file
9
- end
10
-
11
- def lets
12
- _lets = []
13
- continuation = false
14
- File.readlines(file).each do |line|
15
- if continuation && continuation = line.strip != 'end'
16
- _lets[-1].value << line
17
- elsif line =~ /\A\s+let\(?:(\w+)\)?\s*do\s*\n/
18
- continuation = true
19
- _lets << Let.new($1.strip, '')
20
- elsif line =~ /\A\s+let\(?:(\w+)\)?\s*\{(.+)\}/m
21
- _lets << Let.new($1.strip, $2.strip)
22
- end
23
- end
24
- _lets
25
- end
26
-
27
- def indentation
28
- line = nil
29
- File.open(file) do |f|
30
- previous_line = nil
31
- until indent_size(previous_line) != indent_size(line = f.gets)
32
- previous_line = line
33
- end
34
- end
35
- indent_size(line)
36
- end
37
-
38
- def methods
39
- items = []
40
- klasses = Set.new
41
- File.readlines(file).each do |line|
42
- if line =~ /class (\w+)/
43
- klasses << $1
44
- end
45
- case line.to_s.chomp.strip
46
- when /#?\s*private/i
47
- break
48
- when /def (self)?(\.?[a-z0-9_]+)/
49
- method_name = $2
50
- if method_name !~ /\A\./
51
- method_name = "##{method_name}"
52
- end
53
- items << "#{klasses.to_a.join('::')}#{method_name}"
54
- else
55
- nil
56
- end
57
- end
58
- items
59
- end
60
-
61
- def describes
62
- File.readlines(file).map { |line| $2 if line =~ /(describe|context)\s*['"%](.+)\s*['"%]/ }.compact
63
- end
64
-
65
- def indent_size(line)
66
- line.to_s.chomp.rstrip[/\s{0,}/].size.to_i
67
- end
68
- end
69
- end