Skip to content

Commit 9a07b64

Browse files
committed
add logging methods instead of changing raise methods
1 parent d066e37 commit 9a07b64

File tree

3 files changed

+104
-20
lines changed

3 files changed

+104
-20
lines changed

lib/react_on_rails/engine.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@
55
module ReactOnRails
66
class Engine < ::Rails::Engine
77
config.to_prepare do
8-
if VersionChecker.instance("package.json").raise_if_gem_and_node_package_versions_differ &&
9-
VersionChecker.instance("client/package.json").raise_if_gem_and_node_package_versions_differ
8+
if VersionChecker.instance("package.json").log_if_gem_and_node_package_versions_differ &&
9+
VersionChecker.instance("client/package.json").log_if_gem_and_node_package_versions_differ
1010
Rails.logger.warn("No 'react-on-rails' entry found in 'dependencies' in package.json or client/package.json.")
1111
end
1212
ReactOnRails::ServerRenderingPool.reset_pool

lib/react_on_rails/version_checker.rb

Lines changed: 31 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,18 +29,32 @@ def raise_if_gem_and_node_package_versions_differ
2929

3030
raise_node_semver_version_warning if node_package_version.semver_wildcard?
3131

32-
node_major_minor_patch = node_package_version.major_minor_patch
33-
gem_major_minor_patch = gem_major_minor_patch_version
34-
versions_match = node_major_minor_patch[0] == gem_major_minor_patch[0] &&
35-
node_major_minor_patch[1] == gem_major_minor_patch[1] &&
36-
node_major_minor_patch[2] == gem_major_minor_patch[2]
32+
versions_match = compare_versions(node_package_version.major_minor_patch, gem_major_minor_patch_version)
3733

3834
raise_differing_versions_warning unless versions_match
3935
false
4036
end
4137

38+
def log_if_gem_and_node_package_versions_differ
39+
return true unless node_package_version.raw
40+
return if node_package_version.relative_path?
41+
42+
log_node_semver_version_warning if node_package_version.semver_wildcard?
43+
44+
versions_match = compare_versions(node_package_version.major_minor_patch, gem_major_minor_patch_version)
45+
46+
log_differing_versions_warning unless versions_match
47+
false
48+
end
49+
4250
private
4351

52+
def compare_versions(node_major_minor_patch, gem_major_minor_patch)
53+
node_major_minor_patch[0] == gem_major_minor_patch[0] &&
54+
node_major_minor_patch[1] == gem_major_minor_patch[1] &&
55+
node_major_minor_patch[2] == gem_major_minor_patch[2]
56+
end
57+
4458
def common_error_msg
4559
<<-MSG.strip_heredoc
4660
Detected: #{node_package_version.raw}
@@ -55,10 +69,21 @@ def common_error_msg
5569

5670
def raise_differing_versions_warning
5771
msg = "**WARNING** ReactOnRails: ReactOnRails gem and node package versions do not match\n#{common_error_msg}"
58-
Rails.logger.warn(msg)
72+
raise ReactOnRails::Error, msg
5973
end
6074

6175
def raise_node_semver_version_warning
76+
msg = "**WARNING** ReactOnRails: Your node package version for react-on-rails contains a " \
77+
"^ or ~\n#{common_error_msg}"
78+
raise ReactOnRails::Error, msg
79+
end
80+
81+
def log_differing_versions_warning
82+
msg = "**WARNING** ReactOnRails: ReactOnRails gem and node package versions do not match\n#{common_error_msg}"
83+
Rails.logger.warn(msg)
84+
end
85+
86+
def log_node_semver_version_warning
6287
msg = "**WARNING** ReactOnRails: Your node package version for react-on-rails contains a " \
6388
"^ or ~\n#{common_error_msg}"
6489
Rails.logger.warn(msg)

spec/react_on_rails/version_checker_spec.rb

Lines changed: 71 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ def error(message)
1111
end
1212
end
1313

14-
module ReactOnRails
14+
module ReactOnRails # rubocop:disable Metrics/ModuleLength
1515
describe VersionChecker do
1616
describe "#warn_if_gem_and_node_package_versions_differ" do
1717
let(:logger) { FakeLogger.new }
@@ -24,7 +24,13 @@ module ReactOnRails
2424
before { stub_gem_version("2.2.5.beta.2") }
2525

2626
it "does not raise" do
27-
expect { check_version(node_package_version) }.not_to raise_error
27+
expect { check_version_and_raise(node_package_version) }.not_to raise_error
28+
end
29+
30+
it "does not log" do
31+
allow(Rails.logger).to receive(:warn)
32+
check_version_and_log(node_package_version)
33+
expect(Rails.logger).not_to have_received(:warn)
2834
end
2935
end
3036

@@ -38,10 +44,15 @@ module ReactOnRails
3844
it "logs" do
3945
allow(Rails.logger).to receive(:warn)
4046
message = /ReactOnRails: Your node package version for react-on-rails contains a \^ or ~/
41-
# expect { check_version(node_package_version) }.to raise_error(message)
42-
check_version(node_package_version)
47+
check_version_and_log(node_package_version)
4348
expect(Rails.logger).to have_received(:warn).with(message)
4449
end
50+
51+
it "raises" do
52+
allow(Rails.logger).to receive(:warn)
53+
message = /ReactOnRails: Your node package version for react-on-rails contains a \^ or ~/
54+
expect { check_version_and_raise(node_package_version) }.to raise_error(message)
55+
end
4556
end
4657

4758
context "when gem and node package major versions differ" do
@@ -54,10 +65,15 @@ module ReactOnRails
5465
it "logs" do
5566
allow(Rails.logger).to receive(:warn)
5667
message = /ReactOnRails: ReactOnRails gem and node package versions do not match/
57-
# expect { check_version(node_package_version) }.to raise_error(message)
58-
check_version(node_package_version)
68+
check_version_and_log(node_package_version)
5969
expect(Rails.logger).to have_received(:warn).with(message)
6070
end
71+
72+
it "raises" do
73+
allow(Rails.logger).to receive(:warn)
74+
message = /ReactOnRails: ReactOnRails gem and node package versions do not match/
75+
expect { check_version_and_raise(node_package_version) }.to raise_error(message)
76+
end
6177
end
6278

6379
context "when gem and node package major versions match and minor differs" do
@@ -70,10 +86,15 @@ module ReactOnRails
7086
it "logs" do
7187
allow(Rails.logger).to receive(:warn)
7288
message = /ReactOnRails: ReactOnRails gem and node package versions do not match/
73-
# expect { check_version(node_package_version) }.to raise_error(message)
74-
check_version(node_package_version)
89+
check_version_and_log(node_package_version)
7590
expect(Rails.logger).to have_received(:warn).with(message)
7691
end
92+
93+
it "raises" do
94+
allow(Rails.logger).to receive(:warn)
95+
message = /ReactOnRails: ReactOnRails gem and node package versions do not match/
96+
expect { check_version_and_raise(node_package_version) }.to raise_error(message)
97+
end
7798
end
7899

79100
context "when gem and node package major, minor versions match and patch differs" do
@@ -86,10 +107,15 @@ module ReactOnRails
86107
it "logs" do
87108
allow(Rails.logger).to receive(:warn)
88109
message = /ReactOnRails: ReactOnRails gem and node package versions do not match/
89-
# expect { check_version(node_package_version) }.to raise_error(message)
90-
check_version(node_package_version)
110+
check_version_and_log(node_package_version)
91111
expect(Rails.logger).to have_received(:warn).with(message)
92112
end
113+
114+
it "raises" do
115+
allow(Rails.logger).to receive(:warn)
116+
message = /ReactOnRails: ReactOnRails gem and node package versions do not match/
117+
expect { check_version_and_raise(node_package_version) }.to raise_error(message)
118+
end
93119
end
94120

95121
context "when package json uses a relative path with dots" do
@@ -100,7 +126,27 @@ module ReactOnRails
100126
before { stub_gem_version("2.0.0.beta.1") }
101127

102128
it "does not raise" do
103-
expect { check_version(node_package_version) }.not_to raise_error
129+
expect { check_version_and_raise(node_package_version) }.not_to raise_error
130+
end
131+
132+
it "does not log" do
133+
allow(Rails.logger).to receive(:warn)
134+
check_version_and_log(node_package_version)
135+
expect(Rails.logger).not_to have_received(:warn)
136+
end
137+
end
138+
139+
context "when package json doesn't exist" do
140+
let(:node_package_version) do
141+
double_package_version(raw: nil)
142+
end
143+
144+
it "raise method returns true" do
145+
expect(check_version_and_raise(node_package_version)).to be(true)
146+
end
147+
148+
it "log method returns true" do
149+
expect(check_version_and_log(node_package_version)).to be(true)
104150
end
105151
end
106152
end
@@ -114,11 +160,16 @@ def double_package_version(raw: nil, semver_wildcard: false,
114160
relative_path?: relative_path)
115161
end
116162

117-
def check_version(node_package_version)
163+
def check_version_and_raise(node_package_version)
118164
version_checker = VersionChecker.new(node_package_version)
119165
version_checker.raise_if_gem_and_node_package_versions_differ
120166
end
121167

168+
def check_version_and_log(node_package_version)
169+
version_checker = VersionChecker.new(node_package_version)
170+
version_checker.log_if_gem_and_node_package_versions_differ
171+
end
172+
122173
describe VersionChecker::NodePackageVersion do
123174
subject(:node_package_version) { described_class.new(package_json) }
124175

@@ -221,6 +272,14 @@ def check_version(node_package_version)
221272
specify { expect(node_package_version.major_minor_patch).to be_nil }
222273
end
223274
end
275+
276+
context "with non-existing package.json" do
277+
let(:package_json) { File.expand_path("fixtures/nonexistent_package.json", __dir__) }
278+
279+
describe "#raw" do
280+
specify { expect(node_package_version.raw).to be_nil }
281+
end
282+
end
224283
end
225284
end
226285
end

0 commit comments

Comments
 (0)