Skip to content

Commit a40a435

Browse files
committed
refactor(AssetVariant) extract asset build & path logic
1 parent 850f2b8 commit a40a435

File tree

4 files changed

+57
-12
lines changed

4 files changed

+57
-12
lines changed

lib/react/rails.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1-
require 'react/rails/railtie'
1+
require 'react/rails/asset_variant'
22
require 'react/rails/engine'
3+
require 'react/rails/railtie'
34
require 'react/rails/view_helper'

lib/react/rails/asset_variant.rb

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
module React
2+
module Rails
3+
class AssetVariant
4+
GEM_ROOT = Pathname.new('../../../../').expand_path(__FILE__)
5+
attr_reader :react_build, :react_directory, :jsx_directory
6+
7+
def initialize(options={})
8+
# We want to include different files in dev/prod. The development builds
9+
# contain console logging for invariants and logging to help catch
10+
# common mistakes. These are all stripped out in the production build.
11+
@react_build = options[:variant] == :production ? 'production' : 'development'
12+
options[:addons] && @react_build += '-with-addons'
13+
14+
@react_directory = GEM_ROOT.join('lib/assets/react-source/').join(@react_build).to_s
15+
@jsx_directory = GEM_ROOT.join('lib/assets/javascripts/').to_s
16+
end
17+
end
18+
end
19+
end

lib/react/rails/railtie.rb

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -33,25 +33,25 @@ class Railtie < ::Rails::Railtie
3333
end
3434

3535
initializer "react_rails.bust_cache", group: :all do |app|
36-
variant = app.config.react.variant == :production ? 'production' : 'development'
37-
variant += '-with-addons' if app.config.react.addons
36+
asset_variant = React::Rails::AssetVariant.new({
37+
variant: app.config.react.variant,
38+
addons: app.config.react.addons,
39+
})
3840

3941
app.assets.version = [
4042
app.assets.version,
41-
"react-#{variant}",
43+
"react-#{asset_variant.react_build}",
4244
].compact.join('-')
4345
end
4446

4547
config.before_initialize do |app|
46-
# We want to include different files in dev/prod. The development builds
47-
# contain console logging for invariants and logging to help catch
48-
# common mistakes. These are all stripped out in the production build.
49-
root_path = Pathname.new('../../../../').expand_path(__FILE__)
50-
directory = app.config.react.variant == :production ? 'production' : 'development'
51-
directory += '-with-addons' if app.config.react.addons
48+
asset_variant = React::Rails::AssetVariant.new({
49+
variant: app.config.react.variant,
50+
addons: app.config.react.addons,
51+
})
5252

53-
app.config.assets.paths << root_path.join('lib/assets/react-source/').join(directory).to_s
54-
app.config.assets.paths << root_path.join('lib/assets/javascripts/').to_s
53+
app.config.assets.paths << asset_variant.react_directory
54+
app.config.assets.paths << asset_variant.jsx_directory
5555
end
5656

5757
config.after_initialize do |app|
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
require 'test_helper'
2+
3+
class AssetVariantTest < ActiveSupport::TestCase
4+
def build_variant(options)
5+
React::Rails::AssetVariant.new(options)
6+
end
7+
8+
test 'it points to different directories for react' do
9+
production_variant = build_variant(variant: :production)
10+
assert_match(%r{/lib/assets/react-source/production}, production_variant.react_directory)
11+
12+
development_variant = build_variant(variant: nil)
13+
assert_match(%r{/lib/assets/react-source/development}, development_variant.react_directory)
14+
end
15+
16+
test 'points to jsx transformer' do
17+
variant = build_variant({})
18+
assert_match(%r{/lib/assets/javascripts/}, variant.jsx_directory)
19+
end
20+
21+
test 'it includes addons if requested' do
22+
asset_variant = build_variant(addons: true)
23+
assert_equal "development-with-addons", asset_variant.react_build
24+
end
25+
end

0 commit comments

Comments
 (0)