rubocop-sequel 0.0.5 → 0.0.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1426529648e896758505cc0f580c8a9dfd04eaaadf041e01fe8a38f1452fc549
4
- data.tar.gz: 8105c3044c2536f0f57fc79346ecf2349036b5d918fa7312f1d35e55ffc41bc0
3
+ metadata.gz: c8a199639fb0c16e569564f9648764d8fb8aaf33bbee5def7a66d210cc85d649
4
+ data.tar.gz: 593503731a786d54e7fafbde51fd1972ce2d20713549c9d440d62a899c2e7ee0
5
5
  SHA512:
6
- metadata.gz: 3eb093802d46566d8a0e0e4920af488673448bbd1ae9e8dab89b4dd2aedd11494f2222bfd4ae1fcaff01104b848d50510fef518daa0b947e741f85d009a04d33
7
- data.tar.gz: 5570ee0d798a47808cacb9a162db33a141c0055147dbedbb88fba614ecc9b14ce6c50bd66f9911f01136515f5d94ed4634cbdb76355a68d628755426b8d4c3d4
6
+ metadata.gz: b55fa4dd717d9f52c7df265cff1e69971fc383dd2ee5851badeab905824910735e5f911061dbec719f66a44cf4f2b3a4774e5d068e3bd305e05261c051886b78
7
+ data.tar.gz: eb87589c3d20befa8af7bdff1c9c46143b351d7a38e43c32b3b3ce195bdb538e8fefc7b9f97635aad7d9511dd3e276c382349792c8519aa3d6e9e462d6ee3791
@@ -7,7 +7,8 @@ AllCops:
7
7
  # Offense count: 1
8
8
  # Configuration parameters: CountComments, ExcludedMethods.
9
9
  Metrics/BlockLength:
10
- Max: 31
10
+ Exclude:
11
+ - spec/**/*
11
12
 
12
13
  # Offense count: 1
13
14
  # Configuration parameters: ExpectMatchingDefinition, Regex, IgnoreExecutableScripts, AllowedAcronyms.
@@ -4,5 +4,6 @@ require 'rubocop'
4
4
 
5
5
  require 'rubocop/cop/sequel/column_default'
6
6
  require 'rubocop/cop/sequel/concurrent_index'
7
+ require 'rubocop/cop/sequel/json_column'
7
8
  require 'rubocop/cop/sequel/migration_name'
8
9
  require 'rubocop/cop/sequel/save_changes'
@@ -7,12 +7,12 @@ module RuboCop
7
7
  class ColumnDefault < Cop
8
8
  MSG = "Don't create new column with default values"
9
9
 
10
- def_node_matcher :add_column_default, <<-MATCHER
10
+ def_node_matcher :add_column_default?, <<-MATCHER
11
11
  (send _ :add_column ... (hash (pair (sym :default) _)))
12
12
  MATCHER
13
13
 
14
14
  def on_send(node)
15
- return unless add_column_default(node)
15
+ return unless add_column_default?(node)
16
16
  add_offense(node, location: :selector, message: MSG)
17
17
  end
18
18
  end
@@ -7,12 +7,12 @@ module RuboCop
7
7
  class ConcurrentIndex < Cop
8
8
  MSG = 'Prefer creating or dropping new index concurrently'
9
9
 
10
- def_node_matcher :indexes, <<-MATCHER
10
+ def_node_matcher :indexes?, <<-MATCHER
11
11
  (send _ {:add_index :drop_index} $...)
12
12
  MATCHER
13
13
 
14
14
  def on_send(node)
15
- indexes(node) do |args|
15
+ indexes?(node) do |args|
16
16
  if offensive?(args)
17
17
  add_offense(node, location: :selector, message: MSG)
18
18
  end
@@ -0,0 +1,37 @@
1
+ # frozen_string_literal: true
2
+
3
+ module RuboCop
4
+ module Cop
5
+ module Sequel
6
+ # JSONColumn looks for non-JSONB columns.
7
+ class JSONColumn < Cop
8
+ MSG = 'Use JSONB rather than JSON or hstore'
9
+
10
+ def_node_matcher :json_or_hstore?, <<-MATCHER
11
+ (send _ :add_column ... (sym {:json :hstore}))
12
+ MATCHER
13
+
14
+ def_node_matcher :column_type?, <<-MATCHER
15
+ (send _ {:json :hstore} ...)
16
+ MATCHER
17
+
18
+ def_node_matcher :column_method?, <<-MATCHER
19
+ (send _ :column ... (sym {:json :hstore}))
20
+ MATCHER
21
+
22
+ def on_send(node)
23
+ return unless json_or_hstore?(node)
24
+ add_offense(node, location: :selector, message: MSG)
25
+ end
26
+
27
+ def on_block(node)
28
+ return unless node.send_node.method_name == :create_table
29
+ node.each_node(:send) do |method|
30
+ next unless column_method?(method) || column_type?(method)
31
+ add_offense(method, location: :selector, message: MSG)
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end
@@ -8,12 +8,12 @@ module RuboCop
8
8
  MSG = 'Use `Sequel::Model#save_changes` instead of '\
9
9
  '`Sequel::Model#save`.'
10
10
 
11
- def_node_matcher :model_save, <<-MATCHER
11
+ def_node_matcher :model_save?, <<-MATCHER
12
12
  (send _ :save)
13
13
  MATCHER
14
14
 
15
15
  def on_send(node)
16
- return unless model_save(node)
16
+ return unless model_save?(node)
17
17
  add_offense(node, location: :selector, message: MSG)
18
18
  end
19
19
 
@@ -13,14 +13,14 @@ Gem::Specification.new do |gem|
13
13
  gem.test_files = gem.files.grep(%r{^(test|spec|features)/})
14
14
  gem.name = 'rubocop-sequel'
15
15
  gem.require_paths = ['lib']
16
- gem.version = '0.0.5'
16
+ gem.version = '0.0.6'
17
17
 
18
- gem.add_runtime_dependency 'rubocop', '~> 0.52', '>= 0.52'
18
+ gem.add_runtime_dependency 'rubocop', '~> 0.55', '>= 0.55'
19
19
 
20
- gem.add_development_dependency 'rake', '~> 12.0.0', '>= 12.0.0'
21
- gem.add_development_dependency 'rspec', '~> 3.5', '>= 3.5.0'
22
- gem.add_development_dependency 'rubocop-rspec', '~> 1.22.0', '>= 1.22.0'
20
+ gem.add_development_dependency 'rake', '~> 12.3.0', '>= 12.0.0'
21
+ gem.add_development_dependency 'rspec', '~> 3.7', '>= 3.7.0'
22
+ gem.add_development_dependency 'rubocop-rspec', '~> 1.25.0', '>= 1.25.0'
23
23
  gem.add_development_dependency 'sequel', '~> 4.49', '>= 4.49.0'
24
- gem.add_development_dependency 'simplecov', '~> 0.12'
24
+ gem.add_development_dependency 'simplecov', '~> 0.16'
25
25
  gem.add_development_dependency 'sqlite3', '~> 1.3', '>= 1.3.12'
26
26
  end
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'spec_helper'
4
+
5
+ describe RuboCop::Cop::Sequel::JSONColumn do
6
+ subject(:cop) { described_class.new }
7
+
8
+ context 'with add_column' do
9
+ it 'registers an offense when using json type' do
10
+ inspect_source('add_column(:products, :type, :json)')
11
+ expect(cop.offenses.size).to eq(1)
12
+ end
13
+
14
+ it 'registers an offense when using hstore type' do
15
+ inspect_source('add_column(:products, :type, :hstore)')
16
+ expect(cop.offenses.size).to eq(1)
17
+ end
18
+
19
+ it 'does not register an offense when using jsonb' do
20
+ inspect_source('add_column(:products, :type, :jsonb)')
21
+ expect(cop.offenses).to be_empty
22
+ end
23
+ end
24
+
25
+ context 'with create_table' do
26
+ it 'registers an offense when using json as a method' do
27
+ inspect_source('create_table(:products) { json :type, default: {} }')
28
+ expect(cop.offenses.size).to eq(1)
29
+ end
30
+
31
+ it 'registers an offense when using the column method with hstore' do
32
+ inspect_source('create_table(:products) { column :type, :hstore }')
33
+ expect(cop.offenses.size).to eq(1)
34
+ end
35
+
36
+ it 'does not register an offense when using jsonb as column type`' do
37
+ inspect_source('create_table(:products) { column :type, :jsonb }')
38
+ expect(cop.offenses).to be_empty
39
+ end
40
+
41
+ it 'does not register an offense when using jsonb' do
42
+ inspect_source('create_table(:products) { jsonb :type }')
43
+ expect(cop.offenses).to be_empty
44
+ end
45
+
46
+ it 'does not register an offense when using a simple type' do
47
+ inspect_source('create_table(:products) { integer :type, default: 0 }')
48
+ expect(cop.offenses).to be_empty
49
+ end
50
+ end
51
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubocop-sequel
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.5
4
+ version: 0.0.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Timothée Peignier
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-03-14 00:00:00.000000000 Z
11
+ date: 2018-04-29 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rubocop
@@ -16,27 +16,27 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '0.52'
19
+ version: '0.55'
20
20
  - - ">="
21
21
  - !ruby/object:Gem::Version
22
- version: '0.52'
22
+ version: '0.55'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
26
26
  requirements:
27
27
  - - "~>"
28
28
  - !ruby/object:Gem::Version
29
- version: '0.52'
29
+ version: '0.55'
30
30
  - - ">="
31
31
  - !ruby/object:Gem::Version
32
- version: '0.52'
32
+ version: '0.55'
33
33
  - !ruby/object:Gem::Dependency
34
34
  name: rake
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: 12.0.0
39
+ version: 12.3.0
40
40
  - - ">="
41
41
  - !ruby/object:Gem::Version
42
42
  version: 12.0.0
@@ -46,7 +46,7 @@ dependencies:
46
46
  requirements:
47
47
  - - "~>"
48
48
  - !ruby/object:Gem::Version
49
- version: 12.0.0
49
+ version: 12.3.0
50
50
  - - ">="
51
51
  - !ruby/object:Gem::Version
52
52
  version: 12.0.0
@@ -56,40 +56,40 @@ dependencies:
56
56
  requirements:
57
57
  - - "~>"
58
58
  - !ruby/object:Gem::Version
59
- version: '3.5'
59
+ version: '3.7'
60
60
  - - ">="
61
61
  - !ruby/object:Gem::Version
62
- version: 3.5.0
62
+ version: 3.7.0
63
63
  type: :development
64
64
  prerelease: false
65
65
  version_requirements: !ruby/object:Gem::Requirement
66
66
  requirements:
67
67
  - - "~>"
68
68
  - !ruby/object:Gem::Version
69
- version: '3.5'
69
+ version: '3.7'
70
70
  - - ">="
71
71
  - !ruby/object:Gem::Version
72
- version: 3.5.0
72
+ version: 3.7.0
73
73
  - !ruby/object:Gem::Dependency
74
74
  name: rubocop-rspec
75
75
  requirement: !ruby/object:Gem::Requirement
76
76
  requirements:
77
77
  - - "~>"
78
78
  - !ruby/object:Gem::Version
79
- version: 1.22.0
79
+ version: 1.25.0
80
80
  - - ">="
81
81
  - !ruby/object:Gem::Version
82
- version: 1.22.0
82
+ version: 1.25.0
83
83
  type: :development
84
84
  prerelease: false
85
85
  version_requirements: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: 1.22.0
89
+ version: 1.25.0
90
90
  - - ">="
91
91
  - !ruby/object:Gem::Version
92
- version: 1.22.0
92
+ version: 1.25.0
93
93
  - !ruby/object:Gem::Dependency
94
94
  name: sequel
95
95
  requirement: !ruby/object:Gem::Requirement
@@ -116,14 +116,14 @@ dependencies:
116
116
  requirements:
117
117
  - - "~>"
118
118
  - !ruby/object:Gem::Version
119
- version: '0.12'
119
+ version: '0.16'
120
120
  type: :development
121
121
  prerelease: false
122
122
  version_requirements: !ruby/object:Gem::Requirement
123
123
  requirements:
124
124
  - - "~>"
125
125
  - !ruby/object:Gem::Version
126
- version: '0.12'
126
+ version: '0.16'
127
127
  - !ruby/object:Gem::Dependency
128
128
  name: sqlite3
129
129
  requirement: !ruby/object:Gem::Requirement
@@ -161,13 +161,14 @@ files:
161
161
  - lib/rubocop-sequel.rb
162
162
  - lib/rubocop/cop/sequel/column_default.rb
163
163
  - lib/rubocop/cop/sequel/concurrent_index.rb
164
+ - lib/rubocop/cop/sequel/json_column.rb
164
165
  - lib/rubocop/cop/sequel/migration_name.rb
165
166
  - lib/rubocop/cop/sequel/save_changes.rb
166
167
  - lib/rubocop/sequel.rb
167
168
  - rubocop-sequel.gemspec
168
- - rubocop.yml
169
169
  - spec/rubocop/cop/sequel/column_default_spec.rb
170
170
  - spec/rubocop/cop/sequel/concurrent_index_spec.rb
171
+ - spec/rubocop/cop/sequel/json_column_spec.rb
171
172
  - spec/rubocop/cop/sequel/migration_name_spec.rb
172
173
  - spec/rubocop/cop/sequel/save_changes_spec.rb
173
174
  - spec/spec_helper.rb
@@ -198,6 +199,7 @@ summary: A plugin for the RuboCop code style & linting tool.
198
199
  test_files:
199
200
  - spec/rubocop/cop/sequel/column_default_spec.rb
200
201
  - spec/rubocop/cop/sequel/concurrent_index_spec.rb
202
+ - spec/rubocop/cop/sequel/json_column_spec.rb
201
203
  - spec/rubocop/cop/sequel/migration_name_spec.rb
202
204
  - spec/rubocop/cop/sequel/save_changes_spec.rb
203
205
  - spec/spec_helper.rb
@@ -1,3 +0,0 @@
1
- inherit_from: .rubocop_todo.yml
2
- AllCops:
3
- TargetRubyVersion: 2.3