rubocop-cable_ready 0.1.0 → 0.2.0
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 +4 -4
- data/.github/workflows/ruby.yml +9 -3
- data/.gitignore +1 -0
- data/.rubocop.yml +4 -0
- data/CHANGELOG.md +2 -4
- data/Gemfile.lock +16 -0
- data/README.md +96 -2
- data/bin/console +1 -0
- data/config/default.yml +11 -1
- data/lib/rubocop/cable_ready/version.rb +2 -2
- data/lib/rubocop/cable_ready.rb +1 -1
- data/lib/rubocop/cop/cable_ready/application_record_enable_updates.rb +32 -0
- data/lib/rubocop/cop/cable_ready/broadcaster_controller_action.rb +23 -0
- data/lib/rubocop/cop/cable_ready_cops.rb +2 -0
- data/rubocop-cable_ready.gemspec +2 -1
- metadata +19 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8d53a99f06039b50d0b41b94062a4eef19834fca34b749af1a9503e7acbef8ed
|
4
|
+
data.tar.gz: ecb21ade65d6d3c38a2d81d25355078c8c5a05d6442e8ca2bd9b13c1fb94b75f
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 26ec37c74856e9c4d84830f13aaaf04973ab82d6e5a01caf011546bcf09a4f2bc8daa7a0e73833572abdfcdb438454fb9695a5cfaa40a8b3c9051f92ad478cf7
|
7
|
+
data.tar.gz: 488feee9dba724d37c8ecc0542bbf266ce610d9ad18d11ee67e7d3c7edd3b22c29b2e3850bf258bf78979856b65a985e055732a9fa9e0cf811bd6cb16a2b2e37
|
data/.github/workflows/ruby.yml
CHANGED
@@ -5,14 +5,20 @@ on: [push, pull_request]
|
|
5
5
|
jobs:
|
6
6
|
build:
|
7
7
|
runs-on: ubuntu-latest
|
8
|
+
strategy:
|
9
|
+
matrix:
|
10
|
+
ruby-version: [2.6, 2.7, '3.0', 3.1, 3.2]
|
8
11
|
steps:
|
9
12
|
- uses: actions/checkout@v2
|
10
13
|
|
11
|
-
- name: Set up Ruby
|
14
|
+
- name: Set up Ruby ${{ matrix.ruby-version }}
|
12
15
|
uses: ruby/setup-ruby@v1
|
13
16
|
with:
|
14
|
-
ruby-version:
|
17
|
+
ruby-version: ${{ matrix.ruby-version }}
|
15
18
|
bundler-cache: true
|
16
19
|
|
20
|
+
- name: Lint
|
21
|
+
run: bundle exec rubocop
|
22
|
+
|
17
23
|
- name: Run tests
|
18
|
-
run: bundle exec
|
24
|
+
run: bundle exec rspec spec
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/Gemfile.lock
CHANGED
@@ -9,6 +9,7 @@ GEM
|
|
9
9
|
remote: https://rubygems.org/
|
10
10
|
specs:
|
11
11
|
ast (2.4.2)
|
12
|
+
diff-lcs (1.4.4)
|
12
13
|
minitest (5.14.4)
|
13
14
|
parallel (1.20.1)
|
14
15
|
parser (3.0.1.1)
|
@@ -17,6 +18,19 @@ GEM
|
|
17
18
|
rake (13.0.3)
|
18
19
|
regexp_parser (2.1.1)
|
19
20
|
rexml (3.2.5)
|
21
|
+
rspec (3.10.0)
|
22
|
+
rspec-core (~> 3.10.0)
|
23
|
+
rspec-expectations (~> 3.10.0)
|
24
|
+
rspec-mocks (~> 3.10.0)
|
25
|
+
rspec-core (3.10.1)
|
26
|
+
rspec-support (~> 3.10.0)
|
27
|
+
rspec-expectations (3.10.1)
|
28
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
29
|
+
rspec-support (~> 3.10.0)
|
30
|
+
rspec-mocks (3.10.2)
|
31
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
32
|
+
rspec-support (~> 3.10.0)
|
33
|
+
rspec-support (3.10.2)
|
20
34
|
rubocop (1.17.0)
|
21
35
|
parallel (~> 1.10)
|
22
36
|
parser (>= 3.0.0.0)
|
@@ -32,12 +46,14 @@ GEM
|
|
32
46
|
unicode-display_width (2.0.0)
|
33
47
|
|
34
48
|
PLATFORMS
|
49
|
+
arm64-darwin-21
|
35
50
|
x86_64-darwin-19
|
36
51
|
x86_64-linux
|
37
52
|
|
38
53
|
DEPENDENCIES
|
39
54
|
minitest (~> 5.0)
|
40
55
|
rake (~> 13.0)
|
56
|
+
rspec
|
41
57
|
rubocop (~> 1.7)
|
42
58
|
rubocop-cable_ready!
|
43
59
|
|
data/README.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#
|
1
|
+
# RuboCop::CableReady
|
2
2
|
|
3
3
|
CableReady-specific analysis for your projects, as an extension to [RuboCop](https://github.com/rubocop/rubocop).
|
4
4
|
|
@@ -58,6 +58,100 @@ RuboCop::RakeTask.new do |task|
|
|
58
58
|
end
|
59
59
|
```
|
60
60
|
|
61
|
+
## Cops
|
62
|
+
|
63
|
+
#### `CableReady/ApplicationRecordEnableUpdates`
|
64
|
+
|
65
|
+
| Enabled by default | Supports autocorrection | Include | Version Added | Version Changed |
|
66
|
+
| --- | --- | --- | --- | --- |
|
67
|
+
| true | No | `app/models/**/*.rb` | 0.2.0 | 0.2.0 |
|
68
|
+
|
69
|
+
The `enable_cable_ready_updates` class method shouldn't be called in `ApplicationRecord`. Instead call `enable_cable_ready_updates` in every model you want to track and broadcast updates.
|
70
|
+
|
71
|
+
|
72
|
+
##### Examples
|
73
|
+
|
74
|
+
```ruby
|
75
|
+
# bad
|
76
|
+
|
77
|
+
class ApplicationRecord < ActiveRecord::Base
|
78
|
+
include CableReady::Updatable
|
79
|
+
|
80
|
+
enable_cable_ready_updates on: :update
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
# good
|
85
|
+
|
86
|
+
class Post < ApplicationRecord
|
87
|
+
include CableReady::Updatable
|
88
|
+
|
89
|
+
enable_cable_ready_updates on: :update
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
# good
|
94
|
+
|
95
|
+
class ApplicationRecord < ActiveRecord::Base
|
96
|
+
include CableReady::Updatable
|
97
|
+
end
|
98
|
+
|
99
|
+
class Post < ApplicationRecord
|
100
|
+
enable_cable_ready_updates on: :update
|
101
|
+
end
|
102
|
+
```
|
103
|
+
|
104
|
+
----
|
105
|
+
|
106
|
+
#### `CableReady/BroadcasterControllerAction`
|
107
|
+
|
108
|
+
| Enabled by default | Supports autocorrection | Include | Version Added | Version Changed |
|
109
|
+
| --- | --- | --- | --- | --- |
|
110
|
+
| false | No | `app/controllers/**/*.rb` | 0.2.0 | 0.2.0 |
|
111
|
+
|
112
|
+
It's discouraged to broadcast CableReady broadcasts from Controller actions.
|
113
|
+
|
114
|
+
##### Examples
|
115
|
+
|
116
|
+
```ruby
|
117
|
+
# bad
|
118
|
+
|
119
|
+
def create
|
120
|
+
cable_ready[UserChannel]
|
121
|
+
.append(selector: "...", html: "...")
|
122
|
+
.broadcast
|
123
|
+
end
|
124
|
+
|
125
|
+
|
126
|
+
# good
|
127
|
+
|
128
|
+
def create
|
129
|
+
end
|
130
|
+
```
|
131
|
+
|
132
|
+
----
|
133
|
+
|
134
|
+
#### `CableReady/UnusedCableReadyCall`
|
135
|
+
|
136
|
+
| Enabled by default | Supports autocorrection | Include | Version Added | Version Changed |
|
137
|
+
| --- | --- | --- | --- | --- |
|
138
|
+
| true | No | `app/**/*.rb` | 0.1.0 | 0.1.0 |
|
139
|
+
|
140
|
+
The `cable_ready` method shouldn't be called without being followed by an operation.
|
141
|
+
|
142
|
+
##### Examples
|
143
|
+
|
144
|
+
```ruby
|
145
|
+
# bad
|
146
|
+
|
147
|
+
cable_ready
|
148
|
+
|
149
|
+
|
150
|
+
# good
|
151
|
+
|
152
|
+
cable_ready.inner_html(...)
|
153
|
+
```
|
154
|
+
|
61
155
|
## Development
|
62
156
|
|
63
157
|
After checking out the repo, run `bin/setup` to install dependencies. Then, run `rake test` to run the tests. You can also run `bin/console` for an interactive prompt that will allow you to experiment.
|
@@ -74,4 +168,4 @@ The gem is available as open source under the terms of the [MIT License](https:/
|
|
74
168
|
|
75
169
|
## Code of Conduct
|
76
170
|
|
77
|
-
Everyone interacting in the
|
171
|
+
Everyone interacting in the RuboCop::CableReady project's codebases, issue trackers, chat rooms and mailing lists is expected to follow the [code of conduct](https://github.com/marcoroth/rubocop-cable_ready/blob/master/CODE_OF_CONDUCT.md).
|
data/bin/console
CHANGED
data/config/default.yml
CHANGED
@@ -1,5 +1,15 @@
|
|
1
1
|
---
|
2
|
-
CableReady:
|
2
|
+
CableReady/ApplicationRecordEnableUpdates:
|
3
|
+
Enabled: true
|
4
|
+
Include:
|
5
|
+
- "app/models/**/*.rb"
|
6
|
+
|
7
|
+
CableReady/BroadcasterControllerAction:
|
8
|
+
Enabled: false
|
9
|
+
Include:
|
10
|
+
- "app/controllers/**/*.rb"
|
11
|
+
|
12
|
+
CableReady/UnusedCableReadyCall:
|
3
13
|
Enabled: true
|
4
14
|
Include:
|
5
15
|
- "**/*.rb"
|
data/lib/rubocop/cable_ready.rb
CHANGED
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module CableReady
|
6
|
+
class ApplicationRecordEnableUpdates < Base
|
7
|
+
MSG = "%<method_name>s should not be switched on globally"
|
8
|
+
|
9
|
+
def_node_search :active_record_base_class?, <<~PATTERN
|
10
|
+
(const (const nil? :ActiveRecord) :Base)
|
11
|
+
PATTERN
|
12
|
+
|
13
|
+
def_node_matcher :is_application_record?, <<~PATTERN
|
14
|
+
(const nil? :ApplicationRecord)
|
15
|
+
PATTERN
|
16
|
+
|
17
|
+
def on_send(node)
|
18
|
+
receiver_node, _method_name, *_arg_nodes = *node.parent.parent
|
19
|
+
|
20
|
+
return unless %i[enable_updates enable_cable_ready_updates].include?(node.method_name)
|
21
|
+
|
22
|
+
return unless is_application_record?(receiver_node)
|
23
|
+
|
24
|
+
return unless node.ancestors.any? { |ancestor| active_record_base_class?(ancestor) }
|
25
|
+
|
26
|
+
message = format(MSG, method_name: node.method_name)
|
27
|
+
add_offense(node, message: message)
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module RuboCop
|
4
|
+
module Cop
|
5
|
+
module CableReady
|
6
|
+
class BroadcasterControllerAction < Base
|
7
|
+
MSG = "CableReady::Broadcaster should not be used in a Rails controller action"
|
8
|
+
|
9
|
+
def_node_search :action_controller_base_class?, <<~PATTERN
|
10
|
+
(const (const nil? :ActionController) :Base)
|
11
|
+
PATTERN
|
12
|
+
|
13
|
+
def on_send(node)
|
14
|
+
return if node.method_name != :include
|
15
|
+
|
16
|
+
return unless node.ancestors.any? { |ancestor| action_controller_base_class?(ancestor) }
|
17
|
+
|
18
|
+
add_offense(node)
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/rubocop-cable_ready.gemspec
CHANGED
@@ -4,7 +4,7 @@ require_relative "lib/rubocop/cable_ready/version"
|
|
4
4
|
|
5
5
|
Gem::Specification.new do |spec|
|
6
6
|
spec.name = "rubocop-cable_ready"
|
7
|
-
spec.version =
|
7
|
+
spec.version = RuboCop::CableReady::VERSION
|
8
8
|
spec.authors = ["Marco Roth"]
|
9
9
|
spec.email = ["marco.roth@hey.com"]
|
10
10
|
|
@@ -31,4 +31,5 @@ Gem::Specification.new do |spec|
|
|
31
31
|
spec.add_runtime_dependency "rubocop-ast", ">= 1.1.0"
|
32
32
|
|
33
33
|
spec.add_development_dependency "rake"
|
34
|
+
spec.add_development_dependency "rspec"
|
34
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rubocop-cable_ready
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Marco Roth
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2023-02-17 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rubocop
|
@@ -52,6 +52,20 @@ dependencies:
|
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - ">="
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '0'
|
55
69
|
description: Code style checking for CableReady
|
56
70
|
email:
|
57
71
|
- marco.roth@hey.com
|
@@ -76,7 +90,9 @@ files:
|
|
76
90
|
- lib/rubocop/cable_ready.rb
|
77
91
|
- lib/rubocop/cable_ready/inject.rb
|
78
92
|
- lib/rubocop/cable_ready/version.rb
|
93
|
+
- lib/rubocop/cop/cable_ready/application_record_enable_updates.rb
|
79
94
|
- lib/rubocop/cop/cable_ready/base.rb
|
95
|
+
- lib/rubocop/cop/cable_ready/broadcaster_controller_action.rb
|
80
96
|
- lib/rubocop/cop/cable_ready/unused_cable_ready_call.rb
|
81
97
|
- lib/rubocop/cop/cable_ready_cops.rb
|
82
98
|
- rubocop-cable_ready.gemspec
|
@@ -102,7 +118,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
102
118
|
- !ruby/object:Gem::Version
|
103
119
|
version: '0'
|
104
120
|
requirements: []
|
105
|
-
rubygems_version: 3.
|
121
|
+
rubygems_version: 3.4.1
|
106
122
|
signing_key:
|
107
123
|
specification_version: 4
|
108
124
|
summary: Code style checking for CableReady
|