Sha256: 7ac02cc3674aaa7568eac1ec1f257776f8fe2d3083f33478c9af4b4b78b35345

Contents?: true

Size: 1.8 KB

Versions: 14

Compression:

Stored size: 1.8 KB

Contents

# encoding: utf-8
require 'rails_best_practices/reviews/review'

module RailsBestPractices
  module Reviews
    # Review a view file to make sure there is no complex logic call for model.
    #
    # See the best practice details here http://rails-bestpractices.com/posts/25-move-code-into-model.
    #
    # Implementation:
    #
    # Review process:
    #   check if there are multiple method calls or attribute assignments apply to one subject,
    #   and the subject is a local variable or instance variable,
    #   then they should be moved into model.
    class MoveCodeIntoModelReview < Review
      def url
        "http://rails-bestpractices.com/posts/25-move-code-into-model"
      end

      def interesting_nodes
        [:if]
      end

      def interesting_files
        VIEW_FILES
      end

      def initialize(options={})
        super()
        @use_count = options['use_count'] || 2
      end

      # check if node to see whose conditional statementnodes contain multiple call nodes with same subject who is a local variable or instance variable.
      #
      # it will check every call and attrasgn nodes in the conditional statement nodes.
      #
      # if there are multiple call and attrasgn nodes who have the same subject,
      # and the subject is a local variable or an instance variable,
      # then the conditional statement nodes should be moved into model.
      def start_if(node)
        node.conditional_statement.grep_nodes(:node_type => [:call, :attrasgn]) { |child_node| remember_variable_use_count(child_node) }

        variable_use_count.each do |variable_node, count|
          add_error "move code into model (#{variable_node} use_count > #{@use_count})", variable_node.file, variable_node.line if count > @use_count
        end

        reset_variable_use_count
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 2 rubygems

Version Path
rails_best_practices-0.10.1 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.10.0 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-raydog153-0.9.1 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.9.0 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.8.2 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.8.1 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.8.0 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.7.5 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.7.4 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.7.3 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.7.2 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.7.1 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.7.0 lib/rails_best_practices/reviews/move_code_into_model_review.rb
rails_best_practices-0.6.7 lib/rails_best_practices/reviews/move_code_into_model_review.rb