Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Ruby Code Analisis

Ruby Code Analisis

Tools and practices make your ruby app clear.

Dmitry Zhlobo

October 27, 2012

Transcript

46 slides
  1. Well known smells • long methods and large classes •

    duplicated code • too many parameters
  2. Well known smells • long methods and large classes •

    duplicated code • too many parameters • conditional complexity
  3. Well known smells • long methods and large classes •

    duplicated code • too many parameters • conditional complexity • etc...
  4. $ ruby -w script.rb enables verbose mode of ruby interpreter

    script.rb:4: warning: assigned but unused variable - file script.rb:11: warning: mismatched indentations at 'end' with 'def' at 7 ruby -w
  5. ruby -w $ RUBYOPT=-w rails server 2>&1 | grep errbit/app

    errbit/app/models/issue_trackers/github_issues_tracker.rb:38: warning: assigned but unused variable - options errbit/app/models/notice.rb:138: warning: shadowing outer local variable - h errbit/app/models/user.rb:6: warning: `*' interpreted as argument prefix errbit/app/models/watcher.rb:16: warning: method redefined; discarding old watcher_type errbit/app/controllers/apps_controller.rb:90: warning: mismatched indentations at 'end' with 'def' at 83 errbit/app/helpers/notices_helper.rb:72: warning: assigned but unused variable - file http://tinyurl.com/shelrtv-errbit-ruby-verbose
  6. $ flog app.rb 311.4: flog total 13.6: flog/method average 73.4:

    App#none 65.9: App#notify app.rb:124 42.1: App#attributes app.rb:142 flog
  7. $ flog app.rb 311.4: flog total 13.6: flog/method average 73.4:

    App#none 65.9: App#notify app.rb:124 42.1: App#attributes app.rb:142 flog
  8. $ flog app.rb 311.4: flog total 13.6: flog/method average 73.4:

    App#none 65.9: App#notify app.rb:124 42.1: App#attributes app.rb:142 flog
  9. $ flog app.rb 311.4: flog total 13.6: flog/method average 73.4:

    App#none 65.9: App#notify app.rb:124 42.1: App#attributes app.rb:142 flog
  10. flog $ flog -g errbit/app/models 1690.0: flog total 11.1: flog/method

    average 219.3: App total 88.4: App#none 60.5: App#notification_recipients errbit/app/models/app.rb:144 48.8: App#copy_attributes_from errbit/app/models/app.rb:153 21.7: App#check_issue_tracker errbit/app/models/app.rb:178 http://tinyurl.com/shelrtv-errbit-flog
  11. $ flay app.rb Total score (lower is better) = 266

    1) IDENTICAL code found in :iter (mass*2 = 152) app.rb:16 app.rb:31 2) Similar code found in :defn (mass = 114) app.rb:74 app.rb:83 flay
  12. brakeman warning types • Command Injection • SQL Injection username=params[:user][:name].downcase

    password=params[:user][:password] User.first.where("username = '" + username + "' AND password = '" + password + "'")
  13. brakeman warning types • Command Injection • SQL Injection •

    Mass Assignment • Default Routes match ':controller(/:action(/:id(.:format)))'
  14. brakeman warning types • Command Injection • SQL Injection •

    Mass Assignment • Default Routes • File Access File.open("/tmp/#{cookie[:file]}")
  15. brakeman warning types • Command Injection • SQL Injection •

    Mass Assignment • Default Routes • File Access • Dangerous Send method = params[:method] @result = User.send(method.to_sym)
  16. brakeman warning types • Command Injection • SQL Injection •

    Mass Assignment • Default Routes • File Access • Dangerous Send See more in documentation.
  17. rails-bestpractices.com advices • Protect mass assignment • Not use time_ago_in_words

    • Remove empty helpers • Always add DB index • Use Observer • Remove trailing whitespace

More Decks by Dmitry Zhlobo

Other Decks in Programming