Skip to content

Commit 72c5f60

Browse files
committed
simplify
1 parent 9a07b64 commit 72c5f60

File tree

3 files changed

+27
-80
lines changed

3 files changed

+27
-80
lines changed

lib/react_on_rails/engine.rb

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,7 @@
55
module ReactOnRails
66
class Engine < ::Rails::Engine
77
config.to_prepare do
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
10-
Rails.logger.warn("No 'react-on-rails' entry found in 'dependencies' in package.json or client/package.json.")
11-
end
8+
VersionChecker.build.log_if_gem_and_node_package_versions_differ
129
ReactOnRails::ServerRenderingPool.reset_pool
1310
end
1411
end

lib/react_on_rails/version_checker.rb

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -23,38 +23,21 @@ def initialize(node_package_version)
2323
# For compatibility, the gem and the node package versions should always match,
2424
# unless the user really knows what they're doing. So we will give a
2525
# warning if they do not.
26-
def raise_if_gem_and_node_package_versions_differ
27-
return true unless node_package_version.raw
28-
return if node_package_version.relative_path?
29-
30-
raise_node_semver_version_warning if node_package_version.semver_wildcard?
31-
32-
versions_match = compare_versions(node_package_version.major_minor_patch, gem_major_minor_patch_version)
33-
34-
raise_differing_versions_warning unless versions_match
35-
false
36-
end
37-
3826
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?
27+
return if node_package_version.raw.nil? || node_package_version.relative_path?
28+
return log_node_semver_version_warning if node_package_version.semver_wildcard?
4329

44-
versions_match = compare_versions(node_package_version.major_minor_patch, gem_major_minor_patch_version)
30+
node_major_minor_patch = node_package_version.major_minor_patch
31+
gem_major_minor_patch = gem_major_minor_patch_version
32+
versions_match = node_major_minor_patch[0] == gem_major_minor_patch[0] &&
33+
node_major_minor_patch[1] == gem_major_minor_patch[1] &&
34+
node_major_minor_patch[2] == gem_major_minor_patch[2]
4535

4636
log_differing_versions_warning unless versions_match
47-
false
4837
end
4938

5039
private
5140

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-
5841
def common_error_msg
5942
<<-MSG.strip_heredoc
6043
Detected: #{node_package_version.raw}
@@ -63,21 +46,9 @@ def common_error_msg
6346
your installed node package. Do not use >= or ~> in your Gemfile for react_on_rails.
6447
Do not use ^ or ~ in your package.json for react-on-rails.
6548
Run `yarn add react-on-rails --exact` in the directory containing folder node_modules.
66-
***This warning will become a fatal error in ReactOnRails v15***
6749
MSG
6850
end
6951

70-
def raise_differing_versions_warning
71-
msg = "**WARNING** ReactOnRails: ReactOnRails gem and node package versions do not match\n#{common_error_msg}"
72-
raise ReactOnRails::Error, msg
73-
end
74-
75-
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-
8152
def log_differing_versions_warning
8253
msg = "**WARNING** ReactOnRails: ReactOnRails gem and node package versions do not match\n#{common_error_msg}"
8354
Rails.logger.warn(msg)
@@ -105,8 +76,8 @@ def self.build
10576
new(package_json_path)
10677
end
10778

108-
def self.package_json_path(relative_path = "package.json")
109-
Rails.root.join(relative_path)
79+
def self.package_json_path
80+
Rails.root.join(ReactOnRails.configuration.node_modules_location, "package.json")
11081
end
11182

11283
def initialize(package_json)
@@ -120,6 +91,10 @@ def raw
12091
if parsed_package_contents.key?("dependencies") &&
12192
parsed_package_contents["dependencies"].key?("react-on-rails")
12293
parsed_package_contents["dependencies"]["react-on-rails"]
94+
else
95+
raise ReactOnRails::Error,
96+
"No 'react-on-rails' entry in the dependencies of #{NodePackageVersion.package_json_path}, " \
97+
"which is the expected location according to ReactOnRails.configuration.node_modules_location"
12398
end
12499
end
125100

spec/react_on_rails/version_checker_spec.rb

Lines changed: 13 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -23,10 +23,6 @@ module ReactOnRails # rubocop:disable Metrics/ModuleLength
2323

2424
before { stub_gem_version("2.2.5.beta.2") }
2525

26-
it "does not raise" do
27-
expect { check_version_and_raise(node_package_version) }.not_to raise_error
28-
end
29-
3026
it "does not log" do
3127
allow(Rails.logger).to receive(:warn)
3228
check_version_and_log(node_package_version)
@@ -47,12 +43,6 @@ module ReactOnRails # rubocop:disable Metrics/ModuleLength
4743
check_version_and_log(node_package_version)
4844
expect(Rails.logger).to have_received(:warn).with(message)
4945
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
5646
end
5747

5848
context "when gem and node package major versions differ" do
@@ -68,12 +58,6 @@ module ReactOnRails # rubocop:disable Metrics/ModuleLength
6858
check_version_and_log(node_package_version)
6959
expect(Rails.logger).to have_received(:warn).with(message)
7060
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
7761
end
7862

7963
context "when gem and node package major versions match and minor differs" do
@@ -89,12 +73,6 @@ module ReactOnRails # rubocop:disable Metrics/ModuleLength
8973
check_version_and_log(node_package_version)
9074
expect(Rails.logger).to have_received(:warn).with(message)
9175
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
9876
end
9977

10078
context "when gem and node package major, minor versions match and patch differs" do
@@ -110,12 +88,6 @@ module ReactOnRails # rubocop:disable Metrics/ModuleLength
11088
check_version_and_log(node_package_version)
11189
expect(Rails.logger).to have_received(:warn).with(message)
11290
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
11991
end
12092

12193
context "when package json uses a relative path with dots" do
@@ -125,10 +97,6 @@ module ReactOnRails # rubocop:disable Metrics/ModuleLength
12597

12698
before { stub_gem_version("2.0.0.beta.1") }
12799

128-
it "does not raise" do
129-
expect { check_version_and_raise(node_package_version) }.not_to raise_error
130-
end
131-
132100
it "does not log" do
133101
allow(Rails.logger).to receive(:warn)
134102
check_version_and_log(node_package_version)
@@ -141,12 +109,8 @@ module ReactOnRails # rubocop:disable Metrics/ModuleLength
141109
double_package_version(raw: nil)
142110
end
143111

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)
112+
it "log method returns nil" do
113+
expect(check_version_and_log(node_package_version)).to be_nil
150114
end
151115
end
152116
end
@@ -173,6 +137,17 @@ def check_version_and_log(node_package_version)
173137
describe VersionChecker::NodePackageVersion do
174138
subject(:node_package_version) { described_class.new(package_json) }
175139

140+
describe "#build" do
141+
it "initializes NodePackageVersion with ReactOnRails.configuration.node_modules_location" do
142+
allow(ReactOnRails).to receive_message_chain(:configuration, :node_modules_location).and_return("spec/dummy")
143+
root_package_json_path = File.expand_path("../../package.json", __dir__)
144+
allow(Rails).to receive_message_chain(:root, :join).and_return(root_package_json_path)
145+
message = "No 'react-on-rails' entry in the dependencies of #{root_package_json_path}, which is " \
146+
"the expected location according to ReactOnRails.configuration.node_modules_location"
147+
expect { described_class.build.raw }.to raise_error(message)
148+
end
149+
end
150+
176151
describe "#semver_wildcard?" do
177152
context "when package json lists an exact version of '0.0.2'" do
178153
let(:package_json) { File.expand_path("fixtures/normal_package.json", __dir__) }

0 commit comments

Comments
 (0)