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.
Files changed (39) hide show
  1. data/README.rdoc +4 -2
  2. data/bin/lint_fu +2 -86
  3. data/lib/lint_fu/blessing.rb +40 -0
  4. data/lib/lint_fu/checker.rb +49 -3
  5. data/lib/lint_fu/cli/command.rb +48 -0
  6. data/lib/lint_fu/cli/prune.rb +78 -0
  7. data/lib/lint_fu/cli/scan.rb +78 -0
  8. data/lib/lint_fu/cli.rb +52 -0
  9. data/lib/lint_fu/eidos.rb +35 -0
  10. data/lib/lint_fu/{model_element_builder.rb → eidos_builder.rb} +8 -3
  11. data/lib/lint_fu/eidos_container.rb +25 -0
  12. data/lib/lint_fu/file_range.rb +43 -0
  13. data/lib/lint_fu/mixins/sexp_instance_methods.rb +57 -9
  14. data/lib/lint_fu/parser.rb +1 -2
  15. data/lib/lint_fu/plugins/action_pack/controller_eidos.rb +7 -0
  16. data/lib/lint_fu/{action_pack/model_controller_builder.rb → plugins/action_pack/controller_eidos_builder.rb} +6 -6
  17. data/lib/lint_fu/plugins/action_pack.rb +2 -0
  18. data/lib/lint_fu/{active_record/model_model.rb → plugins/active_record/model_eidos.rb} +3 -3
  19. data/lib/lint_fu/{active_record/model_model_builder.rb → plugins/active_record/model_eidos_builder.rb} +17 -11
  20. data/lib/lint_fu/plugins/active_record.rb +2 -0
  21. data/lib/lint_fu/{rails → plugins/rails}/buggy_eager_load_checker.rb +6 -5
  22. data/lib/lint_fu/{rails/scan_builder.rb → plugins/rails/issue_builder.rb} +9 -16
  23. data/lib/lint_fu/plugins/rails/model_application.rb +21 -0
  24. data/lib/lint_fu/plugins/rails/model_application_factory.rb +31 -0
  25. data/lib/lint_fu/{rails → plugins/rails}/sql_injection_checker.rb +9 -5
  26. data/lib/lint_fu/{rails → plugins/rails}/unsafe_find_checker.rb +17 -30
  27. data/lib/lint_fu/plugins/rails.rb +29 -0
  28. data/lib/lint_fu/plugins.rb +11 -0
  29. data/lib/lint_fu/scan.rb +1 -49
  30. data/lib/lint_fu.rb +13 -8
  31. data/lint_fu.gemspec +10 -7
  32. metadata +140 -24
  33. data/lib/lint_fu/action_pack/model_controller.rb +0 -7
  34. data/lib/lint_fu/action_pack.rb +0 -2
  35. data/lib/lint_fu/active_record.rb +0 -2
  36. data/lib/lint_fu/model_element.rb +0 -48
  37. data/lib/lint_fu/rails/model_application.rb +0 -16
  38. data/lib/lint_fu/rails/model_application_builder.rb +0 -32
  39. data/lib/lint_fu/rails.rb +0 -6
@@ -1,7 +0,0 @@
1
- module LintFu
2
- module ActionPack
3
- class ModelController
4
- include LintFu::ModelElement
5
- end
6
- end
7
- end
@@ -1,2 +0,0 @@
1
- require 'lint_fu/action_pack/model_controller'
2
- require 'lint_fu/action_pack/model_controller_builder'
@@ -1,2 +0,0 @@
1
- require 'lint_fu/active_record/model_model'
2
- require 'lint_fu/active_record/model_model_builder'
@@ -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'