Skip to content

Commit ceb80a0

Browse files
committed
check both root & client packages
1 parent cebda5d commit ceb80a0

File tree

5 files changed

+68
-26
lines changed

5 files changed

+68
-26
lines changed

CHANGELOG.md

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,11 @@ Please follow the recommendations outlined at [keepachangelog.com](http://keepac
1818
### [Unreleased]
1919
Changes since the last non-beta release.
2020

21-
#### Added(https://github.com/AbanoubGhadban).
21+
#### Fixed
22+
23+
- Changed the ReactOnRails' version checker to check package.jsons in both root and client directories. [PR 1657](https://github.com/shakacode/react_on_rails/pull/1657) by [judahmeek](https://github.com/judahmeek).
24+
25+
#### Added
2226
- Added streaming server rendering support:
2327
- [PR #1633](https://github.com/shakacode/react_on_rails/pull/1633) by [AbanoubGhadban](https://github.com/AbanoubGhadban).
2428
- New `stream_react_component` helper for adding streamed components to views

lib/react_on_rails/engine.rb

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,9 @@
55
module ReactOnRails
66
class Engine < ::Rails::Engine
77
config.to_prepare do
8-
if File.exist?(VersionChecker::NodePackageVersion.package_json_path)
9-
VersionChecker.build.raise_if_gem_and_node_package_versions_differ
8+
if VersionChecker.new(NodePackageVersion.new("package.json")).raise_if_gem_and_node_package_versions_differ &&
9+
VersionChecker.new(NodePackageVersion.new("client/package.json")).raise_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.")
1011
end
1112
ReactOnRails::ServerRenderingPool.reset_pool
1213
end

lib/react_on_rails/version_checker.rb

Lines changed: 14 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -20,17 +20,19 @@ def initialize(node_package_version)
2020
# unless the user really knows what they're doing. So we will give a
2121
# warning if they do not.
2222
def raise_if_gem_and_node_package_versions_differ
23+
return true unless node_package_version.raw
2324
return if node_package_version.relative_path?
2425

26+
raise_node_semver_version_warning if node_package_version.semver_wildcard?
27+
2528
node_major_minor_patch = node_package_version.major_minor_patch
2629
gem_major_minor_patch = gem_major_minor_patch_version
2730
versions_match = node_major_minor_patch[0] == gem_major_minor_patch[0] &&
2831
node_major_minor_patch[1] == gem_major_minor_patch[1] &&
2932
node_major_minor_patch[2] == gem_major_minor_patch[2]
3033

3134
raise_differing_versions_warning unless versions_match
32-
33-
raise_node_semver_version_warning if node_package_version.semver_wildcard?
35+
false
3436
end
3537

3638
private
@@ -43,18 +45,19 @@ def common_error_msg
4345
your installed node package. Do not use >= or ~> in your Gemfile for react_on_rails.
4446
Do not use ^ or ~ in your package.json for react-on-rails.
4547
Run `yarn add react-on-rails --exact` in the directory containing folder node_modules.
48+
***This warning will become a fatal error in ReactOnRails v15***
4649
MSG
4750
end
4851

4952
def raise_differing_versions_warning
50-
msg = "**ERROR** ReactOnRails: ReactOnRails gem and node package versions do not match\n#{common_error_msg}"
51-
raise ReactOnRails::Error, msg
53+
msg = "**WARNING** ReactOnRails: ReactOnRails gem and node package versions do not match\n#{common_error_msg}"
54+
Rails.logger.warn(msg)
5255
end
5356

5457
def raise_node_semver_version_warning
55-
msg = "**ERROR** ReactOnRails: Your node package version for react-on-rails contains a " \
58+
msg = "**WARNING** ReactOnRails: Your node package version for react-on-rails contains a " \
5659
"^ or ~\n#{common_error_msg}"
57-
raise ReactOnRails::Error, msg
60+
Rails.logger.warn(msg)
5861
end
5962

6063
def gem_version
@@ -73,21 +76,21 @@ def self.build
7376
new(package_json_path)
7477
end
7578

76-
def self.package_json_path
77-
Rails.root.join("client", "package.json")
79+
def self.package_json_path(relative_path = "package.json")
80+
Rails.root.join(relative_path)
7881
end
7982

8083
def initialize(package_json)
8184
@package_json = package_json
8285
end
8386

8487
def raw
88+
return nil unless File.exist?(package_json)
89+
8590
parsed_package_contents = JSON.parse(package_json_contents)
8691
if parsed_package_contents.key?("dependencies") &&
8792
parsed_package_contents["dependencies"].key?("react-on-rails")
8893
parsed_package_contents["dependencies"]["react-on-rails"]
89-
else
90-
raise ReactOnRails::Error, "No 'react-on-rails' entry in package.json dependencies"
9194
end
9295
end
9396

@@ -96,7 +99,7 @@ def semver_wildcard?
9699
end
97100

98101
def relative_path?
99-
raw.match(%r{(\.\.|\Afile:///)}).present?
102+
raw.match(/(\.\.|\Afile:)/).present?
100103
end
101104

102105
def major_minor_patch
Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
{
2+
"dependencies": {
3+
"babel": "^6.3.26",
4+
"react-on-rails": "file:.yalc/react-on-rails",
5+
"webpack": "^1.12.8"
6+
},
7+
"devDependencies": {
8+
"babel-eslint": "^5.0.0-beta6"
9+
}
10+
}

spec/react_on_rails/version_checker_spec.rb

Lines changed: 36 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -35,9 +35,11 @@ module ReactOnRails
3535

3636
before { stub_gem_version("2.2.5") }
3737

38-
it "does raise" do
39-
error = /ReactOnRails: Your node package version for react-on-rails contains a \^ or ~/
40-
expect { check_version(node_package_version) }.to raise_error(error)
38+
it "logs" do
39+
allow(Rails.logger).to receive(:warn)
40+
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+
expect(Rails.logger).to have_received(:warn).with(message)
4143
end
4244
end
4345

@@ -48,9 +50,11 @@ module ReactOnRails
4850

4951
before { stub_gem_version("12.0.0.beta.1") }
5052

51-
it "raises" do
52-
error = /ReactOnRails: ReactOnRails gem and node package versions do not match/
53-
expect { check_version(node_package_version) }.to raise_error(error)
53+
it "logs" do
54+
allow(Rails.logger).to receive(:warn)
55+
message = /ReactOnRails: ReactOnRails gem and node package versions do not match/
56+
# expect { check_version(node_package_version) }.to raise_error(message)
57+
expect(Rails.logger).to have_received(:warn).with(message)
5458
end
5559
end
5660

@@ -61,9 +65,11 @@ module ReactOnRails
6165

6266
before { stub_gem_version("13.1.0") }
6367

64-
it "raises" do
65-
error = /ReactOnRails: ReactOnRails gem and node package versions do not match/
66-
expect { check_version(node_package_version) }.to raise_error(error)
68+
it "logs" do
69+
allow(Rails.logger).to receive(:warn)
70+
message = /ReactOnRails: ReactOnRails gem and node package versions do not match/
71+
# expect { check_version(node_package_version) }.to raise_error(message)
72+
expect(Rails.logger).to have_received(:warn).with(message)
6773
end
6874
end
6975

@@ -74,9 +80,11 @@ module ReactOnRails
7480

7581
before { stub_gem_version("13.0.0") }
7682

77-
it "raises" do
78-
error = /ReactOnRails: ReactOnRails gem and node package versions do not match/
79-
expect { check_version(node_package_version) }.to raise_error(error)
83+
it "logs" do
84+
allow(Rails.logger).to receive(:warn)
85+
message = /ReactOnRails: ReactOnRails gem and node package versions do not match/
86+
# expect { check_version(node_package_version) }.to raise_error(message)
87+
expect(Rails.logger).to have_received(:warn).with(message)
8088
end
8189
end
8290

@@ -193,6 +201,22 @@ def check_version(node_package_version)
193201
specify { expect(node_package_version.major_minor_patch).to be_nil }
194202
end
195203
end
204+
205+
context "with node version of 'file:.yalc/react-on-rails'" do
206+
let(:package_json) { File.expand_path("fixtures/yalc_package.json", __dir__) }
207+
208+
describe "#raw" do
209+
specify { expect(node_package_version.raw).to eq("file:.yalc/react-on-rails") }
210+
end
211+
212+
describe "#relative_path?" do
213+
specify { expect(node_package_version.relative_path?).to be true }
214+
end
215+
216+
describe "#major" do
217+
specify { expect(node_package_version.major_minor_patch).to be_nil }
218+
end
219+
end
196220
end
197221
end
198222
end

0 commit comments

Comments
 (0)