lint_fu 0.5.0 → 0.5.3
Sign up to get free protection for your applications and to get access to all the features.
- data/README.rdoc +4 -2
- data/bin/lint_fu +2 -86
- data/lib/lint_fu/blessing.rb +40 -0
- data/lib/lint_fu/checker.rb +49 -3
- data/lib/lint_fu/cli/command.rb +48 -0
- data/lib/lint_fu/cli/prune.rb +78 -0
- data/lib/lint_fu/cli/scan.rb +78 -0
- data/lib/lint_fu/cli.rb +52 -0
- data/lib/lint_fu/eidos.rb +35 -0
- data/lib/lint_fu/{model_element_builder.rb → eidos_builder.rb} +8 -3
- data/lib/lint_fu/eidos_container.rb +25 -0
- data/lib/lint_fu/file_range.rb +43 -0
- data/lib/lint_fu/mixins/sexp_instance_methods.rb +57 -9
- data/lib/lint_fu/parser.rb +1 -2
- data/lib/lint_fu/plugins/action_pack/controller_eidos.rb +7 -0
- data/lib/lint_fu/{action_pack/model_controller_builder.rb → plugins/action_pack/controller_eidos_builder.rb} +6 -6
- data/lib/lint_fu/plugins/action_pack.rb +2 -0
- data/lib/lint_fu/{active_record/model_model.rb → plugins/active_record/model_eidos.rb} +3 -3
- data/lib/lint_fu/{active_record/model_model_builder.rb → plugins/active_record/model_eidos_builder.rb} +17 -11
- data/lib/lint_fu/plugins/active_record.rb +2 -0
- data/lib/lint_fu/{rails → plugins/rails}/buggy_eager_load_checker.rb +6 -5
- data/lib/lint_fu/{rails/scan_builder.rb → plugins/rails/issue_builder.rb} +9 -16
- data/lib/lint_fu/plugins/rails/model_application.rb +21 -0
- data/lib/lint_fu/plugins/rails/model_application_factory.rb +31 -0
- data/lib/lint_fu/{rails → plugins/rails}/sql_injection_checker.rb +9 -5
- data/lib/lint_fu/{rails → plugins/rails}/unsafe_find_checker.rb +17 -30
- data/lib/lint_fu/plugins/rails.rb +29 -0
- data/lib/lint_fu/plugins.rb +11 -0
- data/lib/lint_fu/scan.rb +1 -49
- data/lib/lint_fu.rb +13 -8
- data/lint_fu.gemspec +10 -7
- metadata +140 -24
- data/lib/lint_fu/action_pack/model_controller.rb +0 -7
- data/lib/lint_fu/action_pack.rb +0 -2
- data/lib/lint_fu/active_record.rb +0 -2
- data/lib/lint_fu/model_element.rb +0 -48
- data/lib/lint_fu/rails/model_application.rb +0 -16
- data/lib/lint_fu/rails/model_application_builder.rb +0 -32
- data/lib/lint_fu/rails.rb +0 -6
data/lib/lint_fu/action_pack.rb
DELETED
@@ -1,48 +0,0 @@
|
|
1
|
-
module LintFu
|
2
|
-
# An element of a static analysis model that contains, or consists of, submodels. For instance,
|
3
|
-
# an Application might consists of Models, Controllers and Views.
|
4
|
-
module SuperModel
|
5
|
-
def submodels
|
6
|
-
return [].freeze unless @submodels
|
7
|
-
@submodels.dup.freeze
|
8
|
-
end
|
9
|
-
|
10
|
-
def each_submodel(&block)
|
11
|
-
@submodels ||= Set.new()
|
12
|
-
@submodels.each(&block)
|
13
|
-
end
|
14
|
-
|
15
|
-
def add_submodel(sub)
|
16
|
-
@submodels ||= Set.new()
|
17
|
-
@submodels << sub
|
18
|
-
end
|
19
|
-
|
20
|
-
def remove_submodel(sub)
|
21
|
-
@submodels ||= Set.new()
|
22
|
-
@submodels.delete sub
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
# An element of the static analysis model being created; generally corresponds to a
|
27
|
-
# class (e.g. model, controller or view) within the application being scanned.
|
28
|
-
module ModelElement
|
29
|
-
attr_accessor :supermodel
|
30
|
-
attr_reader :modeled_class_name, :modeled_class_superclass_name, :parse_tree
|
31
|
-
|
32
|
-
#sexp:: [:class, <classname>, <superclass|nil>, <CLASS DEFS>]
|
33
|
-
#namespace:: Array of enclosing module names for this class
|
34
|
-
def initialize(sexp, namespace=nil)
|
35
|
-
@parse_tree = sexp
|
36
|
-
if namespace
|
37
|
-
@modeled_class_name = namespace.join('::') + (namespace.empty? ? '' : '::') + sexp[1].to_s
|
38
|
-
else
|
39
|
-
@modeled_class_name = sexp[1]
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
#Have a pretty string representation
|
44
|
-
def to_s
|
45
|
-
"<<model of #{modeled_class_name}>>"
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
@@ -1,16 +0,0 @@
|
|
1
|
-
module LintFu
|
2
|
-
module Rails
|
3
|
-
class ModelApplication
|
4
|
-
include LintFu::ModelElement
|
5
|
-
include LintFu::SuperModel
|
6
|
-
|
7
|
-
def controllers
|
8
|
-
submodels.select { |m| m.kind_of?(LintFu::ActionPack::ModelController) }
|
9
|
-
end
|
10
|
-
|
11
|
-
def models
|
12
|
-
submodels.select { |m| m.kind_of?(LintFu::ActiveRecord::ModelModel) }
|
13
|
-
end
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
@@ -1,32 +0,0 @@
|
|
1
|
-
module LintFu
|
2
|
-
module Rails
|
3
|
-
class ModelApplicationBuilder < ModelElementBuilder
|
4
|
-
def initialize(fs_root)
|
5
|
-
super()
|
6
|
-
|
7
|
-
application = ModelApplication.new(fs_root)
|
8
|
-
|
9
|
-
models_dir = File.join(fs_root, 'app', 'models')
|
10
|
-
builder = ActiveRecord::ModelModelBuilder.new
|
11
|
-
#TODO ensure the Rails app is using ActiveRecord
|
12
|
-
Dir.glob(File.join(models_dir, '**', '*.rb')).each do |f|
|
13
|
-
sexp = Parser.parse_ruby(f)
|
14
|
-
builder.process(sexp)
|
15
|
-
end
|
16
|
-
builder.model_elements.each { |elem| application.add_submodel(elem) }
|
17
|
-
|
18
|
-
controllers_dir = File.join(fs_root, 'app', 'controllers')
|
19
|
-
builder = ActionPack::ModelControllerBuilder.new
|
20
|
-
Dir.glob(File.join(controllers_dir, '**', '*.rb')).each do |f|
|
21
|
-
contents = File.read(f)
|
22
|
-
sexp = RubyParser.new.parse(contents)
|
23
|
-
sexp.file = f
|
24
|
-
builder.process(sexp)
|
25
|
-
end
|
26
|
-
builder.model_elements.each { |elem| application.add_submodel(elem) }
|
27
|
-
|
28
|
-
self.model_elements << application
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
data/lib/lint_fu/rails.rb
DELETED
@@ -1,6 +0,0 @@
|
|
1
|
-
require 'lint_fu/rails/model_application'
|
2
|
-
require 'lint_fu/rails/model_application_builder'
|
3
|
-
require 'lint_fu/rails/buggy_eager_load_checker'
|
4
|
-
require 'lint_fu/rails/sql_injection_checker'
|
5
|
-
require 'lint_fu/rails/unsafe_find_checker'
|
6
|
-
require 'lint_fu/rails/scan_builder'
|