Skip to content
Snippets Groups Projects
Commit a560291f authored by Sean McGivern's avatar Sean McGivern
Browse files

Also warn on timestamp in datetime migration cop

parent 43b692cb
No related branches found
No related tags found
No related merge requests found
Loading
Loading
@@ -7,14 +7,18 @@ module RuboCop
class Datetime < RuboCop::Cop::Cop
include MigrationHelpers
 
MSG = 'Do not use the `datetime` data type, use `datetime_with_timezone` instead'.freeze
MSG = 'Do not use the `%s` data type, use `datetime_with_timezone` instead'.freeze
 
# Check methods in table creation.
def on_def(node)
return unless in_migration?(node)
 
node.each_descendant(:send) do |send_node|
add_offense(send_node, :selector) if method_name(send_node) == :datetime
method_name = node.children[1]
if method_name == :datetime || method_name == :timestamp
add_offense(send_node, :selector, format(MSG, method_name))
end
end
end
 
Loading
Loading
@@ -23,12 +27,14 @@ module RuboCop
return unless in_migration?(node)
 
node.each_descendant do |descendant|
add_offense(node, :expression) if descendant.type == :sym && descendant.children.last == :datetime
end
end
next unless descendant.type == :sym
 
def method_name(node)
node.children[1]
last_argument = descendant.children.last
if last_argument == :datetime || last_argument == :timestamp
add_offense(node, :expression, format(MSG, last_argument))
end
end
end
end
end
Loading
Loading
Loading
Loading
@@ -9,6 +9,7 @@ describe RuboCop::Cop::Migration::Datetime do
include CopHelper
 
subject(:cop) { described_class.new }
let(:migration_with_datetime) do
%q(
class Users < ActiveRecord::Migration
Loading
Loading
@@ -22,6 +23,19 @@ describe RuboCop::Cop::Migration::Datetime do
)
end
 
let(:migration_with_timestamp) do
%q(
class Users < ActiveRecord::Migration
DOWNTIME = false
def change
add_column(:users, :username, :text)
add_column(:users, :last_sign_in, :timestamp)
end
end
)
end
let(:migration_without_datetime) do
%q(
class Users < ActiveRecord::Migration
Loading
Loading
@@ -58,6 +72,17 @@ describe RuboCop::Cop::Migration::Datetime do
aggregate_failures do
expect(cop.offenses.size).to eq(1)
expect(cop.offenses.map(&:line)).to eq([7])
expect(cop.offenses.first.message).to include('datetime')
end
end
it 'registers an offense when the ":timestamp" data type is used' do
inspect_source(cop, migration_with_timestamp)
aggregate_failures do
expect(cop.offenses.size).to eq(1)
expect(cop.offenses.map(&:line)).to eq([7])
expect(cop.offenses.first.message).to include('timestamp')
end
end
 
Loading
Loading
@@ -81,6 +106,7 @@ describe RuboCop::Cop::Migration::Datetime do
context 'outside of migration' do
it 'registers no offense' do
inspect_source(cop, migration_with_datetime)
inspect_source(cop, migration_with_timestamp)
inspect_source(cop, migration_without_datetime)
inspect_source(cop, migration_with_datetime_with_timezone)
 
Loading
Loading
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment