outrigger 1.2.1 → 1.2.2

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 613f64ef0cb57dc2e0d9db82cbaf36875d83e29e
4
- data.tar.gz: e1c6fe5ce0efb7eec9b771fb8ea74355dc69791b
3
+ metadata.gz: 71510d6681f003b4789cf0d0a01ee95c30906fcf
4
+ data.tar.gz: a17a22273ad13306a31f5b00d9ce8c49017328ee
5
5
  SHA512:
6
- metadata.gz: 9a38cc82481cd060301eac7de9cbce6ff7c8195918c257d7d59af6338815855851110fe5c97405a15fcbe2f2461df90316a50048053069a65e21ac5865a44ee4
7
- data.tar.gz: 14eefd72465206a5f803e52c5f0c6397139211a298ca5e916cfc60af80b89fd9728e061b8ea2c44b8fc2788e8dc3f9d1ccfdcb73dd3f3a10c731265337a0fead
6
+ metadata.gz: b438bb3bb8a44fe6aa4ad55144a464a18b3ec7cb6829449069ac5f5120a2ec49462af7b0943ed79fbd931b285e529ca84ad5e3e38be2cccc47620a83ad8f64d5
7
+ data.tar.gz: 8fd3fcc001452e8dd981a86dddccdb1a66fc5755821fee215c976b0d9bc8a0313b0670445f3e3f827a677170adf0974f22cd37c4675aa12b36c4f1c2752a182b
@@ -3,7 +3,7 @@ require 'active_record' unless defined? ActiveRecord
3
3
  require 'outrigger/taggable'
4
4
  require 'outrigger/taggable_proxy'
5
5
 
6
- require 'outrigger/railtie' if defined? Rails
6
+ require 'outrigger/railtie' if defined? Rails::Railtie
7
7
 
8
8
  module Outrigger
9
9
  def self.filter(*tags)
@@ -3,16 +3,26 @@ module RuboCop
3
3
  module Migration
4
4
  class Tagged < Cop
5
5
  def on_class(node)
6
- _name, superclass, body = *node
7
- return unless body && superclass == s(:const, s(:const, nil, :ActiveRecord), :Migration)
6
+ _name, _superclass, body = *node
7
+ return unless body && migration_class?(node)
8
8
  check(node, body)
9
9
  end
10
10
 
11
11
  private
12
12
 
13
- def s(name, *args)
14
- Parser::AST::Node.new(name, args)
15
- end
13
+ def_node_matcher :migration_class?, <<~PATTERN
14
+ {
15
+ (class
16
+ (const nil _)
17
+ (const
18
+ (const nil :ActiveRecord) :Migration) ...)
19
+ (class
20
+ (const nil _)
21
+ (send
22
+ (const
23
+ (const nil :ActiveRecord) :Migration) :[] _) ...)
24
+ }
25
+ PATTERN
16
26
 
17
27
  def check(klass, node)
18
28
  tag = tag_node(node)
@@ -1,6 +1,3 @@
1
- require 'rails'
2
- require 'rake'
3
-
4
1
  module Outrigger
5
2
  class Railtie < Rails::Railtie
6
3
  railtie_name :taggable_migrations
@@ -1,3 +1,3 @@
1
1
  module Outrigger
2
- VERSION = '1.2.1'.freeze
2
+ VERSION = '1.2.2'.freeze
3
3
  end
@@ -0,0 +1,142 @@
1
+ require 'spec_helper'
2
+ require 'outrigger/cops/migration/tagged'
3
+
4
+ RSpec.describe RuboCop::Cop::Migration::Tagged do # rubocop:disable Metrics/BlockLength
5
+ let(:config_hash) do
6
+ {
7
+ 'Migration/Tagged' => {
8
+ 'AllowedTags' => %w[predeploy deploy],
9
+ 'Enabled' => true
10
+ }
11
+ }
12
+ end
13
+
14
+ let(:config) { RuboCop::Config.new(config_hash) }
15
+
16
+ let(:migration_class) do
17
+ <<-RUBY
18
+ class Test < ActiveRecord::Migration
19
+ tag :predeploy
20
+ def change
21
+ end
22
+ end
23
+ RUBY
24
+ end
25
+
26
+ let(:migration_class_42) do
27
+ <<-RUBY
28
+ class Test < ActiveRecord::Migration[4.2]
29
+ tag :predeploy
30
+ def change
31
+ end
32
+ end
33
+ RUBY
34
+ end
35
+
36
+ subject(:cop) { described_class.new(config) }
37
+
38
+ shared_examples_for 'valid migrations' do
39
+ it 'passes valid unversioned migration' do
40
+ inspect_source(migration_class)
41
+ expect(cop.offenses.empty?).to be(true)
42
+ end
43
+
44
+ it 'passes valid versioned migration' do
45
+ inspect_source(migration_class_42)
46
+ expect(cop.offenses.empty?).to be(true)
47
+ end
48
+ end
49
+
50
+ context 'valid config' do # rubocop:disable Metrics/BlockLength
51
+ include_examples 'valid migrations'
52
+
53
+ context 'missing tags' do # rubocop:disable Metrics/BlockLength
54
+ let(:migration_class) do
55
+ <<-RUBY
56
+ class Test < ActiveRecord::Migration
57
+ def change
58
+ end
59
+ end
60
+ RUBY
61
+ end
62
+
63
+ let(:migration_class_42) do
64
+ <<-RUBY
65
+ class Test < ActiveRecord::Migration[4.2]
66
+ def change
67
+ end
68
+ end
69
+ RUBY
70
+ end
71
+
72
+ it 'finds missing tag in unversioned migration' do
73
+ inspect_source(migration_class)
74
+ expect(cop.offenses.empty?).to be(false)
75
+ expect(cop.offenses.first.message).to match(/All migrations require a tag from/)
76
+ end
77
+
78
+ it 'finds missing tag in versioned migration' do
79
+ inspect_source(migration_class_42)
80
+ expect(cop.offenses.empty?).to be(false)
81
+ expect(cop.offenses.first.message).to match(/All migrations require a tag from/)
82
+ end
83
+ end
84
+
85
+ context 'invalid tag' do # rubocop:disable Metrics/BlockLength
86
+ let(:migration_class) do
87
+ <<-RUBY
88
+ class Test < ActiveRecord::Migration
89
+ tag :foobar
90
+ def change
91
+ end
92
+ end
93
+ RUBY
94
+ end
95
+
96
+ let(:migration_class_42) do
97
+ <<-RUBY
98
+ class Test < ActiveRecord::Migration[4.2]
99
+ tag :foobar
100
+ def change
101
+ end
102
+ end
103
+ RUBY
104
+ end
105
+
106
+ it 'fails on invalid tag in unversioned migration' do
107
+ inspect_source(migration_class)
108
+ expect(cop.offenses.empty?).to be(false)
109
+ expect(cop.offenses.first.message).to match(/Tags may only be one of/)
110
+ end
111
+
112
+ it 'fails on invalid tag in versioned migration' do
113
+ inspect_source(migration_class_42)
114
+ expect(cop.offenses.empty?).to be(false)
115
+ expect(cop.offenses.first.message).to match(/Tags may only be one of/)
116
+ end
117
+ end
118
+ end
119
+
120
+ context 'invalid config' do
121
+ let(:config_hash) do
122
+ {
123
+ 'Migration/Tagged' => {
124
+ 'AllowedTags' => [],
125
+ 'Enabled' => true
126
+ }
127
+ }
128
+ end
129
+
130
+ it 'fails on missing tags in configuration on unversioned migration' do
131
+ inspect_source(migration_class)
132
+ expect(cop.offenses.empty?).to be(false)
133
+ expect(cop.offenses.first.message).to match(/No allowed tags have been defined/)
134
+ end
135
+
136
+ it 'fails on missing tags in configuration on versioned migration' do
137
+ inspect_source(migration_class_42)
138
+ expect(cop.offenses.empty?).to be(false)
139
+ expect(cop.offenses.first.message).to match(/No allowed tags have been defined/)
140
+ end
141
+ end
142
+ end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe Outrigger::Railtie do
4
+ let(:subject) { Outrigger::Railtie }
5
+
6
+ it 'provides a railtie_name' do
7
+ expect(subject.railtie_name).to eq 'taggable_migrations'
8
+ end
9
+ end
@@ -4,9 +4,13 @@ SimpleCov.start do
4
4
  add_filter 'spec'
5
5
  track_files 'lib/**/*.rb'
6
6
  end
7
- SimpleCov.minimum_coverage(30) # TODO: add better coverage
7
+ SimpleCov.minimum_coverage(75)
8
8
 
9
9
  require 'bundler/setup'
10
+ require 'rails/railtie'
11
+ require 'rubocop'
12
+ require 'rubocop/rspec/support'
13
+
10
14
  require 'outrigger'
11
15
 
12
16
  RSpec.configure do |config|
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: outrigger
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.1
4
+ version: 1.2.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Drew Bowman
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-11-16 00:00:00.000000000 Z
11
+ date: 2018-04-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activerecord
@@ -44,6 +44,26 @@ dependencies:
44
44
  - - "~>"
45
45
  - !ruby/object:Gem::Version
46
46
  version: '1.15'
47
+ - !ruby/object:Gem::Dependency
48
+ name: railties
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '4.2'
54
+ - - "<"
55
+ - !ruby/object:Gem::Version
56
+ version: '5.2'
57
+ type: :development
58
+ prerelease: false
59
+ version_requirements: !ruby/object:Gem::Requirement
60
+ requirements:
61
+ - - ">="
62
+ - !ruby/object:Gem::Version
63
+ version: '4.2'
64
+ - - "<"
65
+ - !ruby/object:Gem::Version
66
+ version: '5.2'
47
67
  - !ruby/object:Gem::Dependency
48
68
  name: rake
49
69
  requirement: !ruby/object:Gem::Requirement
@@ -118,7 +138,9 @@ files:
118
138
  - spec/gemfiles/rails-4.2.gemfile.lock
119
139
  - spec/gemfiles/rails-5.0.gemfile
120
140
  - spec/gemfiles/rails-5.0.gemfile.lock
141
+ - spec/outrigger/cops/migration/tagged_spec.rb
121
142
  - spec/outrigger/outrigger_spec.rb
143
+ - spec/outrigger/railtie_spec.rb
122
144
  - spec/outrigger/taggable_proxy_spec.rb
123
145
  - spec/outrigger/taggable_spec.rb
124
146
  - spec/spec_helper.rb
@@ -151,7 +173,9 @@ test_files:
151
173
  - spec/gemfiles/rails-4.2.gemfile.lock
152
174
  - spec/gemfiles/rails-5.0.gemfile
153
175
  - spec/gemfiles/rails-5.0.gemfile.lock
176
+ - spec/outrigger/cops/migration/tagged_spec.rb
154
177
  - spec/outrigger/outrigger_spec.rb
178
+ - spec/outrigger/railtie_spec.rb
155
179
  - spec/outrigger/taggable_proxy_spec.rb
156
180
  - spec/outrigger/taggable_spec.rb
157
181
  - spec/spec_helper.rb