rails_readonly_injector 0.2.0 → 1.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.
Files changed (44) hide show
  1. checksums.yaml +5 -5
  2. data/.github/ISSUE_TEMPLATE.md +18 -0
  3. data/.github/PULL_REQUEST_TEMPLATE.md +24 -0
  4. data/.gitignore +1 -1
  5. data/.rubocop.yml +7 -0
  6. data/.travis.yml +3 -1
  7. data/Appraisals +10 -1
  8. data/CHANGELOG.md +6 -0
  9. data/CODE_OF_CONDUCT.md +0 -0
  10. data/Gemfile +4 -2
  11. data/LICENSE.txt +0 -0
  12. data/README.md +25 -6
  13. data/Rakefile +4 -2
  14. data/bin/console +4 -3
  15. data/cucumber_features/configuration.feature +0 -0
  16. data/cucumber_features/step_definitions/.gitkeep +0 -0
  17. data/cucumber_features/step_definitions/generic_steps.rb +5 -3
  18. data/cucumber_features/step_definitions/user_steps.rb +18 -14
  19. data/cucumber_features/support/.gitkeep +0 -0
  20. data/cucumber_features/user_controller.feature +0 -0
  21. data/cucumber_features/user_controller_readonly.feature +0 -0
  22. data/cucumber_features/user_model.feature +0 -0
  23. data/cucumber_features/user_model_readonly.feature +0 -0
  24. data/development_tasks/support/file_helpers.rb +57 -0
  25. data/development_tasks/support/gem_helpers.rb +63 -0
  26. data/development_tasks/tests.rake +40 -93
  27. data/gemfiles/.bundle/config +0 -0
  28. data/gemfiles/rails_3.gemfile +0 -0
  29. data/gemfiles/rails_4_0.gemfile +0 -0
  30. data/gemfiles/rails_4_1.gemfile +0 -0
  31. data/gemfiles/rails_4_2.gemfile +0 -0
  32. data/gemfiles/rails_5_0.gemfile +0 -0
  33. data/gemfiles/rails_5_1.gemfile +0 -0
  34. data/gemfiles/rails_5_2.gemfile +10 -0
  35. data/lib/rails_readonly_injector.rb +37 -20
  36. data/lib/rails_readonly_injector/configuration.rb +86 -20
  37. data/lib/rails_readonly_injector/version.rb +3 -1
  38. data/rails_readonly_injector.gemspec +16 -14
  39. data/rspec_specs/.gitkeep +0 -0
  40. data/rspec_specs/rails_readonly_injector/configuration_spec.rb +167 -0
  41. data/rspec_specs/{readonly_site_toggle_spec.rb → rails_readonly_injector_spec.rb} +42 -1
  42. data/rspec_specs/support/.gitkeep +0 -0
  43. metadata +36 -18
  44. data/rspec_specs/readonly_site_toggle/configuration_spec.rb +0 -31
File without changes
@@ -0,0 +1,167 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe RailsReadonlyInjector.config do
6
+ describe '#controller_rescue_action=' do
7
+ context 'when given a lambda expression' do
8
+ let(:exp) { -> { 'This is a test lambda!' } }
9
+ before do
10
+ RailsReadonlyInjector.config.controller_rescue_action = exp
11
+ end
12
+
13
+ subject { RailsReadonlyInjector.config.controller_rescue_action }
14
+
15
+ it { is_expected.to eq(exp) }
16
+ end
17
+
18
+ context 'when given a Proc' do
19
+ let(:passed_proc) { proc { 'This is a test Proc!' } }
20
+
21
+ before do
22
+ RailsReadonlyInjector.config.controller_rescue_action = passed_proc
23
+ end
24
+
25
+ subject { RailsReadonlyInjector.config.controller_rescue_action }
26
+
27
+ it { is_expected.to eq(passed_proc) }
28
+ end
29
+
30
+ context 'when an invalid value is assigned' do
31
+ it 'raises an error message' do
32
+ expect do
33
+ RailsReadonlyInjector.config.controller_rescue_action = nil
34
+ end.to raise_error 'A lambda or proc must be specified'
35
+ end
36
+ end
37
+ end
38
+
39
+ describe '#classes_to_include' do
40
+ context 'when not defined' do
41
+ context 'when using Rails < 5.0' do
42
+ before do
43
+ stub_const('Rails::VERSION::STRING', '4.1.0')
44
+ end
45
+
46
+ it 'returns the descendants of ActiveRecord::Base' do
47
+ expect(ActiveRecord::Base).to receive(:descendants)
48
+
49
+ RailsReadonlyInjector.config.classes_to_include
50
+ end
51
+ end
52
+
53
+ context 'when using Rails >= 5.0' do
54
+ before do
55
+ stub_const('Rails::VERSION::STRING', '5.0.0')
56
+
57
+ unless defined? ApplicationRecord
58
+ # :nodoc:
59
+ class ApplicationRecord
60
+ def descendants; end
61
+ end
62
+ end
63
+ end
64
+
65
+ it 'returns the descendants of ActiveRecord::Base' do
66
+ expect(ApplicationRecord).to receive(:descendants)
67
+
68
+ RailsReadonlyInjector.config.classes_to_include
69
+ end
70
+ end
71
+ end
72
+ end
73
+
74
+ describe '#changed_attributes' do
75
+ setup do
76
+ RailsReadonlyInjector.reset_configuration!
77
+
78
+ RailsReadonlyInjector.config.read_only = false
79
+ end
80
+
81
+ context 'when one attribute is changed' do
82
+ before(:each) do
83
+ RailsReadonlyInjector.config.read_only = true
84
+ end
85
+
86
+ context 'and `reload!` is not called' do
87
+ subject { RailsReadonlyInjector.config.changed_attributes }
88
+
89
+ it 'returns a hash with the attribute and its old value' do
90
+ expect(subject).to eq(read_only: false)
91
+ end
92
+ end
93
+
94
+ context 'and `reload!` is called' do
95
+ before { RailsReadonlyInjector.reload! }
96
+ subject { RailsReadonlyInjector.config.changed_attributes }
97
+
98
+ it 'returns an empty hash' do
99
+ expect(subject).to eq({})
100
+ end
101
+ end
102
+ end
103
+
104
+ context 'when more than one attribute is changed' do
105
+ setup { class TestClassA < ActiveRecord::Base; end; }
106
+
107
+ before(:each) do
108
+ RailsReadonlyInjector.config do |c|
109
+ c.read_only = true
110
+ c.classes_to_include = [TestClassA]
111
+ c.classes_to_exclude = [User]
112
+ end
113
+ end
114
+
115
+ context 'and `reload!` is not called' do
116
+ subject { RailsReadonlyInjector.config.changed_attributes }
117
+
118
+ it 'returns a hash with the attribute and its old value' do
119
+ expect(subject).to eq(
120
+ read_only: false,
121
+ classes_to_include: nil,
122
+ classes_to_exclude: []
123
+ )
124
+ end
125
+ end
126
+
127
+ context 'and `reload!` is called' do
128
+ before { RailsReadonlyInjector.reload! }
129
+ subject { RailsReadonlyInjector.config.changed_attributes }
130
+
131
+ it 'returns an empty hash' do
132
+ expect(subject).to eq({})
133
+ end
134
+ end
135
+ end
136
+
137
+ context 'when an attribute is not changed' do
138
+ subject { RailsReadonlyInjector.config.changed_attributes }
139
+
140
+ it { is_expected.to eq({}) }
141
+ end
142
+ end
143
+
144
+ describe '#dirty?' do
145
+ setup do
146
+ RailsReadonlyInjector.config { |config| config.read_only = false }
147
+ RailsReadonlyInjector.reload!
148
+ end
149
+
150
+ context 'when `read_only` is changed' do
151
+ before(:each) { RailsReadonlyInjector.config.read_only = true }
152
+
153
+ context 'and `reload!` is not called' do
154
+ subject { RailsReadonlyInjector.config.dirty? }
155
+
156
+ it { is_expected.to eq(true) }
157
+ end
158
+
159
+ context 'and `reload!` is called' do
160
+ before { RailsReadonlyInjector.reload! }
161
+ subject { RailsReadonlyInjector.config.dirty? }
162
+
163
+ it { is_expected.to eq(false) }
164
+ end
165
+ end
166
+ end
167
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rails_helper'
2
4
 
3
5
  RSpec.describe RailsReadonlyInjector do
@@ -13,7 +15,7 @@ RSpec.describe RailsReadonlyInjector do
13
15
  subject { RailsReadonlyInjector.config }
14
16
 
15
17
  it 'sets `read_only` to false' do
16
- expect(RailsReadonlyInjector.config.read_only).to eq(false)
18
+ expect(RailsReadonlyInjector.config.send(:read_only)).to eq(false)
17
19
  end
18
20
  end
19
21
 
@@ -56,4 +58,43 @@ RSpec.describe RailsReadonlyInjector do
56
58
  it { is_expected.to eq(false) }
57
59
  end
58
60
  end
61
+
62
+ describe '#in_read_only_mode?' do
63
+ setup do
64
+ RailsReadonlyInjector.config.read_only = false
65
+ RailsReadonlyInjector.reload!
66
+ end
67
+
68
+ context 'when `reload!` is called' do
69
+ before do
70
+ RailsReadonlyInjector.config.read_only = true
71
+ RailsReadonlyInjector.reload!
72
+ end
73
+
74
+ it 'returns the correct value' do
75
+ expect(RailsReadonlyInjector.in_read_only_mode?).to eq(true)
76
+ end
77
+ end
78
+
79
+ context 'when `reload!` is not called' do
80
+ context 'when `config.read_only` is changed' do
81
+ before do
82
+ RailsReadonlyInjector.config.read_only = true
83
+ end
84
+
85
+ it 'returns the previous value' do
86
+ expect(RailsReadonlyInjector.in_read_only_mode?).to eq(false)
87
+ end
88
+ end
89
+
90
+ context 'when `config.read_only` is not changed' do
91
+ before { RailsReadonlyInjector.config.classes_to_exclude = [User] }
92
+ subject { RailsReadonlyInjector.in_read_only_mode? }
93
+
94
+ it 'returns the current value' do
95
+ expect(subject).to eq(RailsReadonlyInjector.config.send(:read_only))
96
+ end
97
+ end
98
+ end
99
+ end
59
100
  end
File without changes
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.2.0
4
+ version: 1.2.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-17 00:00:00.000000000 Z
11
+ date: 2020-09-06 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -19,7 +19,7 @@ dependencies:
19
19
  version: '3.0'
20
20
  - - "<"
21
21
  - !ruby/object:Gem::Version
22
- version: '5.2'
22
+ version: '5.3'
23
23
  type: :runtime
24
24
  prerelease: false
25
25
  version_requirements: !ruby/object:Gem::Requirement
@@ -29,49 +29,63 @@ dependencies:
29
29
  version: '3.0'
30
30
  - - "<"
31
31
  - !ruby/object:Gem::Version
32
- version: '5.2'
32
+ version: '5.3'
33
33
  - !ruby/object:Gem::Dependency
34
- name: bundler
34
+ name: appraisal
35
35
  requirement: !ruby/object:Gem::Requirement
36
36
  requirements:
37
37
  - - "~>"
38
38
  - !ruby/object:Gem::Version
39
- version: '1.16'
39
+ version: '2.2'
40
40
  type: :development
41
41
  prerelease: false
42
42
  version_requirements: !ruby/object:Gem::Requirement
43
43
  requirements:
44
44
  - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.2'
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - ">="
52
+ - !ruby/object:Gem::Version
53
+ version: '1.16'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ requirements:
58
+ - - ">="
45
59
  - !ruby/object:Gem::Version
46
60
  version: '1.16'
47
61
  - !ruby/object:Gem::Dependency
48
62
  name: rake
49
63
  requirement: !ruby/object:Gem::Requirement
50
64
  requirements:
51
- - - "~>"
65
+ - - ">="
52
66
  - !ruby/object:Gem::Version
53
- version: '10.0'
67
+ version: 12.3.3
54
68
  type: :development
55
69
  prerelease: false
56
70
  version_requirements: !ruby/object:Gem::Requirement
57
71
  requirements:
58
- - - "~>"
72
+ - - ">="
59
73
  - !ruby/object:Gem::Version
60
- version: '10.0'
74
+ version: 12.3.3
61
75
  - !ruby/object:Gem::Dependency
62
- name: appraisal
76
+ name: yard
63
77
  requirement: !ruby/object:Gem::Requirement
64
78
  requirements:
65
79
  - - "~>"
66
80
  - !ruby/object:Gem::Version
67
- version: '2.2'
81
+ version: 0.9.12
68
82
  type: :development
69
83
  prerelease: false
70
84
  version_requirements: !ruby/object:Gem::Requirement
71
85
  requirements:
72
86
  - - "~>"
73
87
  - !ruby/object:Gem::Version
74
- version: '2.2'
88
+ version: 0.9.12
75
89
  description:
76
90
  email:
77
91
  - andrew.walter@burnet.edu.au
@@ -79,13 +93,15 @@ executables: []
79
93
  extensions: []
80
94
  extra_rdoc_files: []
81
95
  files:
96
+ - ".github/ISSUE_TEMPLATE.md"
97
+ - ".github/PULL_REQUEST_TEMPLATE.md"
82
98
  - ".gitignore"
99
+ - ".rubocop.yml"
83
100
  - ".travis.yml"
84
101
  - Appraisals
85
102
  - CHANGELOG.md
86
103
  - CODE_OF_CONDUCT.md
87
104
  - Gemfile
88
- - Gemfile.lock
89
105
  - LICENSE.txt
90
106
  - README.md
91
107
  - Rakefile
@@ -100,6 +116,8 @@ files:
100
116
  - cucumber_features/user_controller_readonly.feature
101
117
  - cucumber_features/user_model.feature
102
118
  - cucumber_features/user_model_readonly.feature
119
+ - development_tasks/support/file_helpers.rb
120
+ - development_tasks/support/gem_helpers.rb
103
121
  - development_tasks/tests.rake
104
122
  - gemfiles/.bundle/config
105
123
  - gemfiles/rails_3.gemfile
@@ -108,13 +126,14 @@ files:
108
126
  - gemfiles/rails_4_2.gemfile
109
127
  - gemfiles/rails_5_0.gemfile
110
128
  - gemfiles/rails_5_1.gemfile
129
+ - gemfiles/rails_5_2.gemfile
111
130
  - lib/rails_readonly_injector.rb
112
131
  - lib/rails_readonly_injector/configuration.rb
113
132
  - lib/rails_readonly_injector/version.rb
114
133
  - rails_readonly_injector.gemspec
115
134
  - rspec_specs/.gitkeep
116
- - rspec_specs/readonly_site_toggle/configuration_spec.rb
117
- - rspec_specs/readonly_site_toggle_spec.rb
135
+ - rspec_specs/rails_readonly_injector/configuration_spec.rb
136
+ - rspec_specs/rails_readonly_injector_spec.rb
118
137
  - rspec_specs/support/.gitkeep
119
138
  homepage: https://www.github.com/xtrasimplicity/rails_readonly_injector
120
139
  licenses:
@@ -135,8 +154,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
135
154
  - !ruby/object:Gem::Version
136
155
  version: '0'
137
156
  requirements: []
138
- rubyforge_project:
139
- rubygems_version: 2.6.13
157
+ rubygems_version: 3.0.3
140
158
  signing_key:
141
159
  specification_version: 4
142
160
  summary: Globally toggle 'read-only' mode in a Rails application, on-demand, without
@@ -1,31 +0,0 @@
1
- require 'rails_helper'
2
-
3
- RSpec.describe RailsReadonlyInjector.config do
4
- describe '#controller_rescue_action=' do
5
- context 'when given a lambda expression' do
6
- let(:lambda_expression) { lambda { "This is a test lambda!" } }
7
-
8
- before { RailsReadonlyInjector.config.controller_rescue_action = lambda_expression }
9
-
10
- subject { RailsReadonlyInjector.config.controller_rescue_action }
11
-
12
- it { is_expected.to eq(lambda_expression) }
13
- end
14
-
15
- context 'when given a Proc' do
16
- let(:proc) { Proc.new { "This is a test Proc!" } }
17
-
18
- before { RailsReadonlyInjector.config.controller_rescue_action = proc }
19
-
20
- subject { RailsReadonlyInjector.config.controller_rescue_action }
21
-
22
- it { is_expected.to eq(proc) }
23
- end
24
-
25
- context 'when an invalid value is assigned' do
26
- it 'raises an error message' do
27
- expect { RailsReadonlyInjector.config.controller_rescue_action = nil }.to raise_error 'A lambda or proc must be specified'
28
- end
29
- end
30
- end
31
- end