rails_readonly_injector 0.2.0 → 0.3.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
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25d251e5a12704817f3a4568882e00d68c6d80de
|
4
|
+
data.tar.gz: 1b5b6fdbe4cb1772286002fb24ecc22b63e4f5f7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9182f0b556f492a5180677208f42833840bc091b6047ce6fbad5fa19ecb491a153575ea68b80f6971526bae58d1a5217be0f03e39b32737aa8fa33f512a5801c
|
7
|
+
data.tar.gz: 358b647a57d38f3b0f3235f0b6ad3dc0ee00055384403158a7556446b3b4acaf2b168d93cbfbcb18f2ac9ffaffa4bc197ef365a1c550363fd529ad0409174b8e
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -47,7 +47,8 @@ If you want to reset the configuration to the defaults, you can simply call `Rai
|
|
47
47
|
|
48
48
|
## Configuration Options
|
49
49
|
- `read_only` => Whether the site should be in read-only mode. (Default: false)
|
50
|
-
- `
|
50
|
+
- `classes_to_exclude` => An array of classes that should be _exempt_ from read-only mode. (Default: `[]`)
|
51
|
+
- `classes_to_include` => An array of classes that should be set to read-only mode. (Defaults to `ActiveRecord::Base.descendants` on Rails 3-4, and `ApplicationRecord.descendants` on Rails 5.0+)
|
51
52
|
- `controller_rescue_action` => A lambda expression/Proc to execute when an `ActiveRecord::ReadOnlyRecord` error is raised, from within a controller.
|
52
53
|
## Development
|
53
54
|
|
@@ -3,27 +3,18 @@ require "rails_readonly_injector/configuration"
|
|
3
3
|
|
4
4
|
module RailsReadonlyInjector
|
5
5
|
def self.reload!
|
6
|
-
|
7
|
-
Rails.application.eager_load!
|
8
|
-
|
9
|
-
if Rails::VERSION::STRING < '5.0.0'
|
10
|
-
descendants = ActiveRecord::Base.descendants
|
11
|
-
else
|
12
|
-
descendants = ApplicationRecord.descendants
|
13
|
-
end
|
14
|
-
|
15
|
-
descendants.each do |descendant_class|
|
6
|
+
config.classes_to_include.each do |klass|
|
16
7
|
|
17
|
-
# Ensure
|
18
|
-
if config.classes_to_exclude.include?
|
19
|
-
restore_readonly_method(
|
8
|
+
# Ensure we don't impact classes that we want to exclude
|
9
|
+
if config.classes_to_exclude.include? klass
|
10
|
+
restore_readonly_method(klass)
|
20
11
|
next
|
21
12
|
end
|
22
13
|
|
23
14
|
if self.config.read_only
|
24
|
-
override_readonly_method(
|
15
|
+
override_readonly_method(klass)
|
25
16
|
else
|
26
|
-
restore_readonly_method(
|
17
|
+
restore_readonly_method(klass)
|
27
18
|
end
|
28
19
|
end
|
29
20
|
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module RailsReadonlyInjector
|
2
2
|
class Configuration
|
3
|
-
attr_writer :read_only, :classes_to_exclude
|
3
|
+
attr_writer :read_only, :classes_to_exclude, :classes_to_include
|
4
4
|
|
5
5
|
def read_only
|
6
6
|
@read_only || false
|
@@ -19,6 +19,18 @@ module RailsReadonlyInjector
|
|
19
19
|
def classes_to_exclude
|
20
20
|
@classes_to_exclude || []
|
21
21
|
end
|
22
|
+
|
23
|
+
def classes_to_include
|
24
|
+
return @classes_to_include if defined? @classes_to_include
|
25
|
+
|
26
|
+
Rails.application.eager_load!
|
27
|
+
|
28
|
+
if Rails::VERSION::STRING < '5.0.0'
|
29
|
+
ActiveRecord::Base.descendants
|
30
|
+
else
|
31
|
+
ApplicationRecord.descendants
|
32
|
+
end
|
33
|
+
end
|
22
34
|
end
|
23
35
|
private_constant :Configuration
|
24
36
|
|
@@ -28,4 +28,39 @@ RSpec.describe RailsReadonlyInjector.config do
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
end
|
31
|
+
|
32
|
+
describe '#classes_to_include' do
|
33
|
+
context 'when not defined' do
|
34
|
+
context 'when using Rails < 5.0' do
|
35
|
+
before { stub_const('Rails::VERSION::STRING', '4.1.0') }
|
36
|
+
|
37
|
+
it 'returns the descendants of ActiveRecord::Base' do
|
38
|
+
expect(ActiveRecord::Base).to receive(:descendants)
|
39
|
+
|
40
|
+
RailsReadonlyInjector.config.classes_to_include
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
context 'when using Rails >= 5.0' do
|
46
|
+
before do
|
47
|
+
stub_const('Rails::VERSION::STRING', '5.0.0')
|
48
|
+
|
49
|
+
unless defined? ApplicationRecord
|
50
|
+
class ApplicationRecord
|
51
|
+
def descendants
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
it 'returns the descendants of ActiveRecord::Base' do
|
58
|
+
expect(ApplicationRecord).to receive(:descendants)
|
59
|
+
|
60
|
+
RailsReadonlyInjector.config.classes_to_include
|
61
|
+
end
|
62
|
+
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
31
66
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rails_readonly_injector
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Andrew Walter
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-03-
|
11
|
+
date: 2018-03-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rails
|