pelusa 0.2.0 → 0.2.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/pelusa/lint.rb CHANGED
@@ -9,6 +9,7 @@ require 'pelusa/lint/collection_wrappers'
9
9
  require 'pelusa/lint/short_identifiers'
10
10
  require 'pelusa/lint/case_statements'
11
11
  require 'pelusa/lint/many_arguments'
12
+ require 'pelusa/lint/eval_usage'
12
13
 
13
14
  module Pelusa
14
15
  # Public: A Lint is a quality standard, applicable on a given piece of code to
@@ -25,7 +26,8 @@ module Pelusa
25
26
  Properties,
26
27
  CollectionWrappers,
27
28
  ShortIdentifiers,
28
- ManyArguments
29
+ ManyArguments,
30
+ EvalUsage
29
31
  ]
30
32
  end
31
33
  end
@@ -0,0 +1,42 @@
1
+ # encoding: utf-8
2
+
3
+ module Pelusa
4
+ module Lint
5
+ class EvalUsage
6
+
7
+ def initialize
8
+ @violations = Set.new
9
+ end
10
+
11
+ def check(klass)
12
+ iterate_lines!(klass)
13
+
14
+ if @violations.empty?
15
+ SuccessfulAnalysis.new(name)
16
+ else
17
+ FailedAnalysis.new(name, @violations) do |violations|
18
+ "There are #{violations.length} eval statement in lines #{violations.to_a.join(', ')}"
19
+ end
20
+ end
21
+ end
22
+
23
+ private
24
+
25
+ def name
26
+ "Doesn't use eval statement"
27
+ end
28
+
29
+ def iterate_lines!(klass)
30
+ iterator = Iterator.new do |node|
31
+ @violations << node.line if eval_violation?(node)
32
+ end
33
+ Array(klass).each(&iterator)
34
+ end
35
+
36
+ def eval_violation?(node)
37
+ node.is_a?(Rubinius::AST::SendWithArguments) && node.name == :eval && node.receiver.is_a?(Rubinius::AST::Self)
38
+ end
39
+
40
+ end
41
+ end
42
+ end
@@ -1,3 +1,3 @@
1
1
  module Pelusa
2
- VERSION = "0.2.0"
2
+ VERSION = "0.2.1"
3
3
  end
@@ -0,0 +1,58 @@
1
+ # encoding: utf-8
2
+ require 'test_helper'
3
+
4
+ module Pelusa
5
+ module Lint
6
+ describe EvalUsage do
7
+ before { @lint = EvalUsage.new }
8
+
9
+ describe '#check' do
10
+ describe 'when class does not use eval statement' do
11
+ it 'return successful analysis' do
12
+ klass_str = <<RUBY
13
+ class WithoutEval
14
+ def initialize
15
+ @good = true
16
+ end
17
+ end
18
+ RUBY
19
+ klass = klass_str.to_ast
20
+ analysis = @lint.check(klass)
21
+ analysis.successful?.must_equal true
22
+ end
23
+ end
24
+
25
+ describe 'when class use eval statement' do
26
+ it 'return failed analysis' do
27
+ klass_str = <<RUBY
28
+ class WithEval
29
+ def initialize
30
+ eval "@good = false"
31
+ end
32
+ end
33
+ RUBY
34
+ klass = klass_str.to_ast
35
+ analysis = @lint.check(klass)
36
+ analysis.failed?.must_equal true
37
+ end
38
+ end
39
+
40
+ describe 'when class define method named eval' do
41
+ it 'return successful analysis' do
42
+ klass_str = <<RUBY
43
+ class WithEvalUse
44
+ def initialize
45
+ @other_obj = Object.new
46
+ @other_obj.eval "boom"
47
+ end
48
+ end
49
+ RUBY
50
+ klass = klass_str.to_ast
51
+ analysis = @lint.check(klass)
52
+ analysis.successful?.must_equal true
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end
58
+ end
metadata CHANGED
@@ -1,46 +1,35 @@
1
- --- !ruby/object:Gem::Specification
1
+ --- !ruby/object:Gem::Specification
2
2
  name: pelusa
3
- version: !ruby/object:Gem::Version
4
- hash: 2380615109590600174
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.2.1
5
5
  prerelease:
6
- segments:
7
- - 0
8
- - 2
9
- - 0
10
- version: 0.2.0
11
6
  platform: ruby
12
- authors:
7
+ authors:
13
8
  - Josep M. Bach
14
9
  autorequire:
15
10
  bindir: bin
16
11
  cert_chain: []
17
-
18
- date: 2012-03-23 00:00:00 Z
19
- dependencies:
20
- - !ruby/object:Gem::Dependency
12
+ date: 2012-05-29 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ requirement: &7212 !ruby/object:Gem::Requirement
16
+ none: false
17
+ requirements:
18
+ - - ! '>='
19
+ - !ruby/object:Gem::Version
20
+ version: '0'
21
21
  name: mocha
22
+ version_requirements: *7212
22
23
  prerelease: false
23
- requirement: &id001 !ruby/object:Gem::Requirement
24
- none: false
25
- requirements:
26
- - - ">="
27
- - !ruby/object:Gem::Version
28
- hash: 2002549777813010636
29
- segments:
30
- - 0
31
- version: "0"
32
24
  type: :development
33
- version_requirements: *id001
34
25
  description: Static analysis Lint-type tool to improve your OO Ruby code
35
- email:
26
+ email:
36
27
  - josep.m.bach@gmail.com
37
- executables:
28
+ executables:
38
29
  - pelusa
39
30
  extensions: []
40
-
41
31
  extra_rdoc_files: []
42
-
43
- files:
32
+ files:
44
33
  - .gitignore
45
34
  - .pelusa.yml
46
35
  - .rvmrc
@@ -61,6 +50,7 @@ files:
61
50
  - lib/pelusa/lint/collection_wrappers.rb
62
51
  - lib/pelusa/lint/demeter_law.rb
63
52
  - lib/pelusa/lint/else_clauses.rb
53
+ - lib/pelusa/lint/eval_usage.rb
64
54
  - lib/pelusa/lint/indentation_level.rb
65
55
  - lib/pelusa/lint/instance_variables.rb
66
56
  - lib/pelusa/lint/line_restriction.rb
@@ -85,6 +75,7 @@ files:
85
75
  - test/pelusa/lint/collection_wrappers_test.rb
86
76
  - test/pelusa/lint/demeter_law_test.rb
87
77
  - test/pelusa/lint/else_clauses_test.rb
78
+ - test/pelusa/lint/eval_usage_test.rb
88
79
  - test/pelusa/lint/indentation_level_test.rb
89
80
  - test/pelusa/lint/instance_variables_test.rb
90
81
  - test/pelusa/lint/line_restriction_test.rb
@@ -97,38 +88,29 @@ files:
97
88
  - test/test_helper.rb
98
89
  homepage: http://github.com/codegram/pelusa
99
90
  licenses: []
100
-
101
91
  post_install_message:
102
92
  rdoc_options: []
103
-
104
- require_paths:
93
+ require_paths:
105
94
  - lib
106
- required_ruby_version: !ruby/object:Gem::Requirement
95
+ required_ruby_version: !ruby/object:Gem::Requirement
107
96
  none: false
108
- requirements:
109
- - - ">="
110
- - !ruby/object:Gem::Version
111
- hash: 2002549777813010636
112
- segments:
113
- - 0
114
- version: "0"
115
- required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ! '>='
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ required_rubygems_version: !ruby/object:Gem::Requirement
116
102
  none: false
117
- requirements:
118
- - - ">="
119
- - !ruby/object:Gem::Version
120
- hash: 2002549777813010636
121
- segments:
122
- - 0
123
- version: "0"
103
+ requirements:
104
+ - - ! '>='
105
+ - !ruby/object:Gem::Version
106
+ version: '0'
124
107
  requirements: []
125
-
126
108
  rubyforge_project: pelusa
127
109
  rubygems_version: 1.8.12
128
110
  signing_key:
129
111
  specification_version: 3
130
112
  summary: Static analysis Lint-type tool to improve your OO Ruby code
131
- test_files:
113
+ test_files:
132
114
  - test/pelusa_test.rb
133
115
  - test/test_helper.rb
134
116
  - test/pelusa/analysis_test.rb
@@ -142,6 +124,7 @@ test_files:
142
124
  - test/pelusa/lint/collection_wrappers_test.rb
143
125
  - test/pelusa/lint/demeter_law_test.rb
144
126
  - test/pelusa/lint/else_clauses_test.rb
127
+ - test/pelusa/lint/eval_usage_test.rb
145
128
  - test/pelusa/lint/indentation_level_test.rb
146
129
  - test/pelusa/lint/instance_variables_test.rb
147
130
  - test/pelusa/lint/line_restriction_test.rb