Sha256: e8e1c9cd5c4dfb061347771e35f14b4b0a275908aa29f83a18047579607226c7

Contents?: true

Size: 1.2 KB

Versions: 8

Compression:

Stored size: 1.2 KB

Contents

require 'rails_best_practices/checks/check'

module RailsBestPractices
  module Checks
    # Check a migration file to make sure not to insert data in migration, move them to seed file.
    #
    # Implementation: check if there are :create, :create!, and :new with :save or :save! exist, the migration file needs isolate seed data.
    class IsolateSeedDataCheck < Check

      def interesting_nodes
        [:call, :lasgn]
      end

      def interesting_files
        /db\/migrate\/.*rb/
      end

      def initialize
        super
        @new_variables = []
      end

      def evaluate_start(node)
        if [:create, :create!].include? node.message
          add_error("isolate seed data")
        elsif :lasgn == node.node_type
          remember_new_variable(node)
        elsif [:save, :save!].include? node.message
          add_error("isolate seed data") if new_record?(node)
        end
      end

      private

      def remember_new_variable(node)
        unless node.grep_nodes({:node_type => :call, :message => :new}).empty?
          @new_variables << node.subject.to_s
        end
      end

      def new_record?(node)
        @new_variables.include? node.subject.to_ruby
      end
    end
  end
end

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
rails_best_practices-0.2.12 lib/rails_best_practices/checks/isolate_seed_data_check.rb
rails_best_practices-0.2.11 lib/rails_best_practices/checks/isolate_seed_data_check.rb
rails_best_practices-0.2.10 lib/rails_best_practices/checks/isolate_seed_data_check.rb
rails_best_practices-0.2.9 lib/rails_best_practices/checks/isolate_seed_data_check.rb
rails_best_practices-0.2.8 lib/rails_best_practices/checks/isolate_seed_data_check.rb
rails_best_practices-0.2.6 lib/rails_best_practices/checks/isolate_seed_data_check.rb
rails_best_practices-0.2.5 lib/rails_best_practices/checks/isolate_seed_data_check.rb
rails_best_practices-0.2.4 lib/rails_best_practices/checks/isolate_seed_data_check.rb