react_on_rails 1.2.2 → 2.0.0.beta.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- metadata +5 -126
- data/.babelrc +0 -3
- data/.coveralls.yml +0 -1
- data/.dockerignore +0 -2
- data/.eslintignore +0 -5
- data/.eslintrc +0 -48
- data/.gitignore +0 -26
- data/.jscsrc +0 -26
- data/.rspec +0 -2
- data/.rubocop.yml +0 -70
- data/.scss-lint.yml +0 -205
- data/.travis.yml +0 -41
- data/CHANGELOG.md +0 -42
- data/Dockerfile_tests +0 -12
- data/Gemfile +0 -38
- data/README.md +0 -363
- data/Rakefile +0 -5
- data/app/assets/javascripts/react_on_rails.js +0 -241
- data/app/helpers/react_on_rails_helper.rb +0 -224
- data/docker-compose.yml +0 -11
- data/docs/LICENSE +0 -21
- data/docs/additional_reading/heroku_deployment.md +0 -23
- data/docs/additional_reading/manual_installation.md +0 -142
- data/docs/additional_reading/node_dependencies_and_npm.md +0 -29
- data/docs/additional_reading/optional_configuration.md +0 -34
- data/docs/additional_reading/react-and-redux.md +0 -36
- data/docs/additional_reading/react_router.md +0 -45
- data/docs/additional_reading/server_rendering_tips.md +0 -16
- data/docs/additional_reading/tips.md +0 -10
- data/docs/additional_reading/webpack.md +0 -46
- data/docs/code_of_conduct.md +0 -13
- data/docs/coding-style/linters.md +0 -64
- data/docs/coding-style/style.md +0 -42
- data/docs/contributing.md +0 -62
- data/docs/generator_testing.md +0 -20
- data/docs/install_and_releasing.md +0 -24
- data/docs/sample_generated_js/README.md +0 -4
- data/docs/sample_generated_js/client-generated.js +0 -12
- data/docs/sample_generated_js/server-generated.js +0 -25
- data/lib/generators/USAGE +0 -99
- data/lib/generators/react_on_rails/base_generator.rb +0 -198
- data/lib/generators/react_on_rails/bootstrap_generator.rb +0 -91
- data/lib/generators/react_on_rails/dev_tests_generator.rb +0 -30
- data/lib/generators/react_on_rails/generator_errors.rb +0 -15
- data/lib/generators/react_on_rails/generator_helper.rb +0 -58
- data/lib/generators/react_on_rails/heroku_deployment_generator.rb +0 -30
- data/lib/generators/react_on_rails/install_generator.rb +0 -111
- data/lib/generators/react_on_rails/js_linters_generator.rb +0 -19
- data/lib/generators/react_on_rails/react_no_redux_generator.rb +0 -41
- data/lib/generators/react_on_rails/react_with_redux_generator.rb +0 -52
- data/lib/generators/react_on_rails/ruby_linters_generator.rb +0 -33
- data/lib/generators/react_on_rails/templates/base/base/Procfile.dev.tt +0 -4
- data/lib/generators/react_on_rails/templates/base/base/REACT_ON_RAILS.md +0 -16
- data/lib/generators/react_on_rails/templates/base/base/app/controllers/hello_world_controller.rb +0 -5
- data/lib/generators/react_on_rails/templates/base/base/app/views/hello_world/index.html.erb.tt +0 -5
- data/lib/generators/react_on_rails/templates/base/base/client/.babelrc +0 -3
- data/lib/generators/react_on_rails/templates/base/base/client/REACT_ON_RAILS_CLIENT_README.md +0 -3
- data/lib/generators/react_on_rails/templates/base/base/client/app/bundles/HelloWorld/startup/globals.jsx.tt +0 -5
- data/lib/generators/react_on_rails/templates/base/base/client/index.jade +0 -15
- data/lib/generators/react_on_rails/templates/base/base/client/npm-shrinkwrap.json +0 -2907
- data/lib/generators/react_on_rails/templates/base/base/client/package.json.tt +0 -98
- data/lib/generators/react_on_rails/templates/base/base/client/server.js +0 -64
- data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.base.config.js.tt +0 -67
- data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.hot.config.js.tt +0 -67
- data/lib/generators/react_on_rails/templates/base/base/client/webpack.client.rails.config.js +0 -41
- data/lib/generators/react_on_rails/templates/base/base/config/initializers/react_on_rails.rb +0 -28
- data/lib/generators/react_on_rails/templates/base/base/lib/tasks/assets.rake.tt +0 -26
- data/lib/generators/react_on_rails/templates/base/base/lib/tasks/linters.rake.tt +0 -88
- data/lib/generators/react_on_rails/templates/base/base/package.json +0 -31
- data/lib/generators/react_on_rails/templates/base/server_rendering/client/app/bundles/HelloWorld/startup/serverGlobals.jsx +0 -3
- data/lib/generators/react_on_rails/templates/base/server_rendering/client/webpack.server.rails.config.js +0 -40
- data/lib/generators/react_on_rails/templates/bootstrap/app/assets/stylesheets/_bootstrap-custom.scss +0 -63
- data/lib/generators/react_on_rails/templates/bootstrap/client/assets/stylesheets/_post-bootstrap.scss +0 -10
- data/lib/generators/react_on_rails/templates/bootstrap/client/assets/stylesheets/_pre-bootstrap.scss +0 -8
- data/lib/generators/react_on_rails/templates/bootstrap/client/assets/stylesheets/_react-on-rails-sass-helper.scss +0 -19
- data/lib/generators/react_on_rails/templates/bootstrap/client/bootstrap-sass.config.js +0 -89
- data/lib/generators/react_on_rails/templates/dev_tests/.rspec +0 -2
- data/lib/generators/react_on_rails/templates/dev_tests/spec/features/hello_world_spec.rb +0 -25
- data/lib/generators/react_on_rails/templates/dev_tests/spec/rails_helper.rb +0 -57
- data/lib/generators/react_on_rails/templates/dev_tests/spec/simplecov_helper.rb +0 -21
- data/lib/generators/react_on_rails/templates/dev_tests/spec/spec_helper.rb +0 -95
- data/lib/generators/react_on_rails/templates/heroku_deployment/.buildpacks +0 -2
- data/lib/generators/react_on_rails/templates/heroku_deployment/Procfile +0 -1
- data/lib/generators/react_on_rails/templates/heroku_deployment/config/puma.rb +0 -15
- data/lib/generators/react_on_rails/templates/js_linters/client/.eslintignore +0 -1
- data/lib/generators/react_on_rails/templates/js_linters/client/.eslintrc +0 -48
- data/lib/generators/react_on_rails/templates/js_linters/client/.jscsrc +0 -18
- data/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx +0 -39
- data/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/containers/HelloWorld.jsx +0 -33
- data/lib/generators/react_on_rails/templates/no_redux/base/client/app/bundles/HelloWorld/startup/HelloWorldAppClient.jsx.tt +0 -12
- data/lib/generators/react_on_rails/templates/no_redux/server_rendering/client/app/bundles/HelloWorld/startup/HelloWorldAppServer.jsx +0 -11
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/actions/helloWorldActionCreators.jsx +0 -8
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/components/HelloWorldWidget.jsx +0 -48
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/constants/helloWorldConstants.jsx +0 -8
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/containers/HelloWorld.jsx +0 -43
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/reducers/helloWorldReducer.jsx +0 -21
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/reducers/index.jsx +0 -14
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/startup/HelloWorldAppClient.jsx.tt +0 -21
- data/lib/generators/react_on_rails/templates/redux/base/client/app/bundles/HelloWorld/store/helloWorldStore.jsx +0 -35
- data/lib/generators/react_on_rails/templates/redux/base/client/app/lib/middlewares/loggerMiddleware.js +0 -20
- data/lib/generators/react_on_rails/templates/redux/server_rendering/client/app/bundles/HelloWorld/startup/HelloWorldAppServer.jsx +0 -21
- data/lib/generators/react_on_rails/templates/ruby_linters/.rubocop.yml +0 -26
- data/lib/generators/react_on_rails/templates/ruby_linters/.scss-lint.yml +0 -205
- data/lib/generators/react_on_rails/templates/ruby_linters/lib/tasks/brakeman.rake +0 -17
- data/lib/generators/react_on_rails/templates/ruby_linters/lib/tasks/ci.rake +0 -33
- data/lib/generators/react_on_rails/templates/ruby_linters/ruby-lint.yml +0 -20
- data/lib/react_on_rails.rb +0 -6
- data/lib/react_on_rails/configuration.rb +0 -53
- data/lib/react_on_rails/engine.rb +0 -7
- data/lib/react_on_rails/prerender_error.rb +0 -31
- data/lib/react_on_rails/server_rendering_pool.rb +0 -111
- data/lib/react_on_rails/version.rb +0 -3
- data/rakelib/docker.rake +0 -33
- data/rakelib/dummy_apps.rake +0 -29
- data/rakelib/example_type.rb +0 -160
- data/rakelib/examples.rake +0 -103
- data/rakelib/examples_config.yml +0 -19
- data/rakelib/lint.rake +0 -37
- data/rakelib/run_rspec.rake +0 -65
- data/rakelib/task_helpers.rb +0 -44
- data/react_on_rails.gemspec +0 -31
- data/ruby-lint.yml +0 -24
@@ -1,26 +0,0 @@
|
|
1
|
-
# This is the configuration used to check the rubocop source code.
|
2
|
-
# Check out: https://github.com/bbatsov/rubocop
|
3
|
-
|
4
|
-
AllCops:
|
5
|
-
Include:
|
6
|
-
- '**/Rakefile'
|
7
|
-
- '**/config.ru'
|
8
|
-
Exclude:
|
9
|
-
- 'vendor/**/*'
|
10
|
-
- 'spec/fixtures/**/*'
|
11
|
-
- 'node_modules/**/*'
|
12
|
-
- 'db/**/*'
|
13
|
-
- 'db/schema.rb'
|
14
|
-
- 'db/seeds.rb'
|
15
|
-
- 'client/node_modules/**/*'
|
16
|
-
- 'bin/**/*'
|
17
|
-
- !ruby/regexp /old_and_unused\.rb$/
|
18
|
-
|
19
|
-
Metrics/LineLength:
|
20
|
-
Max: 120
|
21
|
-
|
22
|
-
Style/StringLiterals:
|
23
|
-
EnforcedStyle: double_quotes
|
24
|
-
|
25
|
-
Style/Documentation:
|
26
|
-
Enabled: false
|
@@ -1,205 +0,0 @@
|
|
1
|
-
# See http://sass-guidelin.es/#zeros
|
2
|
-
|
3
|
-
scss_files:
|
4
|
-
- 'app/assets/stylesheets/**/*.scss'
|
5
|
-
- 'client/assets/stylesheets/**/*.scss'
|
6
|
-
|
7
|
-
linters:
|
8
|
-
# BangFormat:
|
9
|
-
# enabled: true
|
10
|
-
# space_before_bang: true
|
11
|
-
# space_after_bang: false
|
12
|
-
#
|
13
|
-
# BorderZero:
|
14
|
-
# enabled: true
|
15
|
-
# convention: zero # or `none`
|
16
|
-
#
|
17
|
-
ColorKeyword:
|
18
|
-
enabled: false
|
19
|
-
ColorVariable:
|
20
|
-
enabled: false
|
21
|
-
#
|
22
|
-
# Comment:
|
23
|
-
# enabled: true
|
24
|
-
#
|
25
|
-
# DebugStatement:
|
26
|
-
# enabled: true
|
27
|
-
#
|
28
|
-
# DeclarationOrder:
|
29
|
-
# enabled: true
|
30
|
-
#
|
31
|
-
# DuplicateProperty:
|
32
|
-
# enabled: true
|
33
|
-
#
|
34
|
-
# ElsePlacement:
|
35
|
-
# enabled: true
|
36
|
-
# style: same_line # or 'new_line'
|
37
|
-
#
|
38
|
-
# EmptyLineBetweenBlocks:
|
39
|
-
# enabled: true
|
40
|
-
# ignore_single_line_blocks: true
|
41
|
-
#
|
42
|
-
# EmptyRule:
|
43
|
-
# enabled: true
|
44
|
-
#
|
45
|
-
# FinalNewline:
|
46
|
-
# enabled: true
|
47
|
-
# present: true
|
48
|
-
#
|
49
|
-
HexLength:
|
50
|
-
enabled: true
|
51
|
-
style: long
|
52
|
-
|
53
|
-
HexNotation:
|
54
|
-
enabled: true
|
55
|
-
style: uppercase
|
56
|
-
#
|
57
|
-
# HexValidation:
|
58
|
-
# enabled: true
|
59
|
-
#
|
60
|
-
IdSelector:
|
61
|
-
enabled: true
|
62
|
-
#
|
63
|
-
# ImportantRule:
|
64
|
-
# enabled: true
|
65
|
-
#
|
66
|
-
# ImportPath:
|
67
|
-
# enabled: true
|
68
|
-
# leading_underscore: false
|
69
|
-
# filename_extension: false
|
70
|
-
#
|
71
|
-
# Indentation:
|
72
|
-
# enabled: true
|
73
|
-
# allow_non_nested_indentation: false
|
74
|
-
# character: space # or 'tab'
|
75
|
-
# width: 2
|
76
|
-
#
|
77
|
-
LeadingZero:
|
78
|
-
enabled: true
|
79
|
-
style: include_zero
|
80
|
-
#
|
81
|
-
# MergeableSelector:
|
82
|
-
# enabled: true
|
83
|
-
# force_nesting: true
|
84
|
-
#
|
85
|
-
# NameFormat:
|
86
|
-
# enabled: true
|
87
|
-
# allow_leading_underscore: true
|
88
|
-
# convention: hyphenated_lowercase # or 'camel_case', or 'snake_case', or a regex pattern
|
89
|
-
#
|
90
|
-
# NestingDepth:
|
91
|
-
# enabled: true
|
92
|
-
# max_depth: 3
|
93
|
-
#
|
94
|
-
# PlaceholderInExtend:
|
95
|
-
# enabled: true
|
96
|
-
#
|
97
|
-
# PropertyCount:
|
98
|
-
# enabled: false
|
99
|
-
# include_nested: false
|
100
|
-
# max_properties: 10
|
101
|
-
#
|
102
|
-
# PropertyUnits:
|
103
|
-
# enabled: true
|
104
|
-
# global: [
|
105
|
-
# 'ch', 'em', 'ex', 'rem', # Font-relative lengths
|
106
|
-
# 'cm', 'in', 'mm', 'pc', 'pt', 'px', 'q', # Absolute lengths
|
107
|
-
# 'vh', 'vw', 'vmin', 'vmax', # Viewport-percentage lengths
|
108
|
-
# 'deg', 'grad', 'rad', 'turn', # Angle
|
109
|
-
# 'ms', 's', # Duration
|
110
|
-
# 'Hz', 'kHz', # Frequency
|
111
|
-
# 'dpi', 'dpcm', 'dppx', # Resolution
|
112
|
-
# '%', # Other
|
113
|
-
# ]
|
114
|
-
# properties: {}
|
115
|
-
#
|
116
|
-
# PropertySortOrder:
|
117
|
-
# enabled: true
|
118
|
-
# ignore_unspecified: false
|
119
|
-
# separate_groups: false
|
120
|
-
#
|
121
|
-
# PropertySpelling:
|
122
|
-
# enabled: true
|
123
|
-
# extra_properties: []
|
124
|
-
#
|
125
|
-
# QualifyingElement:
|
126
|
-
# enabled: true
|
127
|
-
# allow_element_with_attribute: false
|
128
|
-
# allow_element_with_class: false
|
129
|
-
# allow_element_with_id: false
|
130
|
-
#
|
131
|
-
# SelectorDepth:
|
132
|
-
# enabled: true
|
133
|
-
# max_depth: 3
|
134
|
-
#
|
135
|
-
# SelectorFormat:
|
136
|
-
# enabled: true
|
137
|
-
# convention: hyphenated_lowercase # or 'strict_BEM', or 'hyphenated_BEM', or 'snake_case', or 'camel_case', or a regex pattern
|
138
|
-
#
|
139
|
-
# Shorthand:
|
140
|
-
# enabled: true
|
141
|
-
# allowed_shorthands: [1, 2, 3]
|
142
|
-
#
|
143
|
-
# SingleLinePerProperty:
|
144
|
-
# enabled: true
|
145
|
-
# allow_single_line_rule_sets: true
|
146
|
-
#
|
147
|
-
# SingleLinePerSelector:
|
148
|
-
# enabled: true
|
149
|
-
#
|
150
|
-
# SpaceAfterComma:
|
151
|
-
# enabled: true
|
152
|
-
#
|
153
|
-
# SpaceAfterPropertyColon:
|
154
|
-
# enabled: true
|
155
|
-
# style: one_space # or 'no_space', or 'at_least_one_space', or 'aligned'
|
156
|
-
#
|
157
|
-
# SpaceAfterPropertyName:
|
158
|
-
# enabled: true
|
159
|
-
#
|
160
|
-
# SpaceBeforeBrace:
|
161
|
-
# enabled: true
|
162
|
-
# style: space # or 'new_line'
|
163
|
-
# allow_single_line_padding: false
|
164
|
-
#
|
165
|
-
# SpaceBetweenParens:
|
166
|
-
# enabled: true
|
167
|
-
# spaces: 0
|
168
|
-
#
|
169
|
-
# StringQuotes:
|
170
|
-
# enabled: true
|
171
|
-
# style: single_quotes # or double_quotes
|
172
|
-
#
|
173
|
-
# TrailingSemicolon:
|
174
|
-
# enabled: true
|
175
|
-
#
|
176
|
-
# TrailingZero:
|
177
|
-
# enabled: false
|
178
|
-
#
|
179
|
-
# UnnecessaryMantissa:
|
180
|
-
# enabled: true
|
181
|
-
#
|
182
|
-
# UnnecessaryParentReference:
|
183
|
-
# enabled: true
|
184
|
-
#
|
185
|
-
# UrlFormat:
|
186
|
-
# enabled: true
|
187
|
-
#
|
188
|
-
# UrlQuotes:
|
189
|
-
# enabled: true
|
190
|
-
#
|
191
|
-
# VariableForProperty:
|
192
|
-
# enabled: false
|
193
|
-
# properties: []
|
194
|
-
#
|
195
|
-
# VendorPrefix:
|
196
|
-
# enabled: true
|
197
|
-
# identifier_list: base
|
198
|
-
# additional_identifiers: []
|
199
|
-
# excluded_identifiers: []
|
200
|
-
#
|
201
|
-
# ZeroUnit:
|
202
|
-
# enabled: true
|
203
|
-
#
|
204
|
-
# Compass::*:
|
205
|
-
# enabled: false
|
@@ -1,17 +0,0 @@
|
|
1
|
-
namespace :brakeman do
|
2
|
-
|
3
|
-
desc "Run Brakeman"
|
4
|
-
task :run, :output_files do |t, args|
|
5
|
-
require 'brakeman'
|
6
|
-
|
7
|
-
files = args[:output_files].split(' ') if args[:output_files]
|
8
|
-
Brakeman.run :app_path => ".", :output_files => files, :print_report => true
|
9
|
-
end
|
10
|
-
|
11
|
-
desc "Check your code with Brakeman"
|
12
|
-
task :check do
|
13
|
-
require 'brakeman'
|
14
|
-
result = Brakeman.run app_path: '.', print_report: true
|
15
|
-
exit Brakeman::Warnings_Found_Exit_Code unless result.filtered_warnings.empty?
|
16
|
-
end
|
17
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
if Rails.env.development?
|
2
|
-
# See tasks/linters.rake
|
3
|
-
|
4
|
-
task :bundle_audit do
|
5
|
-
puts Rainbow("Running security audit on gems (bundle_audit)").green
|
6
|
-
Rake::Task["bundle_audit"].invoke
|
7
|
-
end
|
8
|
-
|
9
|
-
task :security_audit do
|
10
|
-
puts Rainbow("Running security audit on code (brakeman)").green
|
11
|
-
|
12
|
-
sh "brakeman --exit-on-warn --quiet -A -z"
|
13
|
-
end
|
14
|
-
|
15
|
-
namespace :ci do
|
16
|
-
desc "Run all audits and tests"
|
17
|
-
task all: [:environment, :lint, :spec, :bundle_audit, :security_audit] do
|
18
|
-
begin
|
19
|
-
puts Rainbow("PASSED").green
|
20
|
-
puts ""
|
21
|
-
rescue Exception => e
|
22
|
-
puts "#{e}"
|
23
|
-
puts Rainbow("FAILED").red
|
24
|
-
puts ""
|
25
|
-
raise(e)
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
task ci: "ci:all"
|
31
|
-
|
32
|
-
task(:default).clear.enhance([:ci])
|
33
|
-
end
|
@@ -1,20 +0,0 @@
|
|
1
|
-
presenter: syntastic
|
2
|
-
|
3
|
-
directories:
|
4
|
-
- app
|
5
|
-
- config
|
6
|
-
- spec
|
7
|
-
|
8
|
-
ignore_paths:
|
9
|
-
- client
|
10
|
-
- node_modules
|
11
|
-
|
12
|
-
analysis_classes:
|
13
|
-
# - argument_amount
|
14
|
-
- pedantics
|
15
|
-
- shadowing_variables
|
16
|
-
# Too many false positives for these
|
17
|
-
# - undefined_methods
|
18
|
-
# - undefined_variables
|
19
|
-
# - unused_variables
|
20
|
-
- useless_equality_checks
|
data/lib/react_on_rails.rb
DELETED
@@ -1,53 +0,0 @@
|
|
1
|
-
module ReactOnRails
|
2
|
-
def self.configure
|
3
|
-
yield(configuration)
|
4
|
-
end
|
5
|
-
|
6
|
-
def self.configuration
|
7
|
-
@configuration ||= Configuration.new(
|
8
|
-
server_bundle_js_file: "app/assets/javascripts/generated/server.js",
|
9
|
-
prerender: false,
|
10
|
-
replay_console: true,
|
11
|
-
logging_on_server: true,
|
12
|
-
generator_function: false,
|
13
|
-
raise_on_prerender_error: false,
|
14
|
-
trace: Rails.env.development?,
|
15
|
-
development_mode: Rails.env.development?,
|
16
|
-
server_renderer_pool_size: 1,
|
17
|
-
server_renderer_timeout: 20)
|
18
|
-
end
|
19
|
-
|
20
|
-
class Configuration
|
21
|
-
attr_accessor :server_bundle_js_file, :prerender, :replay_console,
|
22
|
-
:generator_function, :trace, :development_mode,
|
23
|
-
:logging_on_server, :server_renderer_pool_size,
|
24
|
-
:server_renderer_timeout, :raise_on_prerender_error
|
25
|
-
|
26
|
-
def initialize(server_bundle_js_file: nil, prerender: nil, replay_console: nil,
|
27
|
-
generator_function: nil, trace: nil, development_mode: nil,
|
28
|
-
logging_on_server: nil, server_renderer_pool_size: nil,
|
29
|
-
server_renderer_timeout: nil, raise_on_prerender_error: nil)
|
30
|
-
if File.exist?(server_bundle_js_file)
|
31
|
-
self.server_bundle_js_file = server_bundle_js_file
|
32
|
-
else
|
33
|
-
self.server_bundle_js_file = nil
|
34
|
-
end
|
35
|
-
|
36
|
-
self.prerender = prerender
|
37
|
-
self.replay_console = replay_console
|
38
|
-
self.logging_on_server = logging_on_server
|
39
|
-
self.generator_function = generator_function
|
40
|
-
if development_mode.nil?
|
41
|
-
self.development_mode = Rails.env.development?
|
42
|
-
else
|
43
|
-
self.development_mode = development_mode
|
44
|
-
end
|
45
|
-
self.trace = trace.nil? ? Rails.env.development? : trace
|
46
|
-
self.raise_on_prerender_error = raise_on_prerender_error
|
47
|
-
|
48
|
-
# Server rendering:
|
49
|
-
self.server_renderer_pool_size = self.development_mode ? 1 : server_renderer_pool_size
|
50
|
-
self.server_renderer_timeout = server_renderer_timeout # seconds
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
@@ -1,31 +0,0 @@
|
|
1
|
-
module ReactOnRails
|
2
|
-
class PrerenderError < RuntimeError
|
3
|
-
# err might be nil if JS caught the error
|
4
|
-
def initialize(component_name: nil, err: nil, props: nil,
|
5
|
-
js_code: nil, console_messages: nil)
|
6
|
-
message = "ERROR in SERVER PRERENDERING\n"
|
7
|
-
if err
|
8
|
-
message << <<-MSG
|
9
|
-
Encountered error: \"#{err}\"
|
10
|
-
MSG
|
11
|
-
backtrace = err.backtrace.join("\n")
|
12
|
-
else
|
13
|
-
backtrace = nil
|
14
|
-
end
|
15
|
-
message << <<-MSG
|
16
|
-
when prerendering #{component_name} with props: #{props}
|
17
|
-
js_code was:
|
18
|
-
#{js_code}
|
19
|
-
MSG
|
20
|
-
|
21
|
-
if console_messages
|
22
|
-
message << <<-MSG
|
23
|
-
console messages:
|
24
|
-
#{console_messages}
|
25
|
-
MSG
|
26
|
-
end
|
27
|
-
|
28
|
-
super([message, backtrace].compact.join("\n"))
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
@@ -1,111 +0,0 @@
|
|
1
|
-
require "connection_pool"
|
2
|
-
|
3
|
-
# Based on the react-rails gem.
|
4
|
-
# None of these methods should be called directly.
|
5
|
-
# See app/helpers/react_on_rails_helper.rb
|
6
|
-
module ReactOnRails
|
7
|
-
class ServerRenderingPool
|
8
|
-
def self.reset_pool
|
9
|
-
options = { size: ReactOnRails.configuration.server_renderer_pool_size,
|
10
|
-
timeout: ReactOnRails.configuration.server_renderer_pool_size }
|
11
|
-
@js_context_pool = ConnectionPool.new(options) { create_js_context }
|
12
|
-
end
|
13
|
-
|
14
|
-
def self.reset_pool_if_server_bundle_was_modified
|
15
|
-
return unless ReactOnRails.configuration.development_mode
|
16
|
-
file_mtime = File.mtime(ReactOnRails.configuration.server_bundle_js_file)
|
17
|
-
@server_bundle_timestamp ||= file_mtime
|
18
|
-
return if @server_bundle_timestamp == file_mtime
|
19
|
-
ReactOnRails::ServerRenderingPool.reset_pool
|
20
|
-
@server_bundle_timestamp = file_mtime
|
21
|
-
end
|
22
|
-
|
23
|
-
# js_code: JavaScript expression that returns a string.
|
24
|
-
# Returns a Hash:
|
25
|
-
# html: string of HTML for direct insertion on the page by evaluating js_code
|
26
|
-
# consoleReplayScript: script for replaying console
|
27
|
-
# hasErrors: true if server rendering errors
|
28
|
-
# Note, js_code does not have to be based on React.
|
29
|
-
# js_code MUST RETURN json stringify Object
|
30
|
-
# Calling code will probably call 'html_safe' on return value before rendering to the view.
|
31
|
-
def self.server_render_js_with_console_logging(js_code)
|
32
|
-
trace_messsage(js_code)
|
33
|
-
json_string = eval_js(js_code)
|
34
|
-
result = JSON.parse(json_string)
|
35
|
-
|
36
|
-
if ReactOnRails.configuration.logging_on_server
|
37
|
-
console_script = result["consoleReplayScript"]
|
38
|
-
console_script_lines = console_script.split("\n")
|
39
|
-
console_script_lines = console_script_lines[2..-2]
|
40
|
-
re = /console\.log\.apply\(console, \["\[SERVER\] (?<msg>.*)"\]\);/
|
41
|
-
if console_script_lines
|
42
|
-
console_script_lines.each do |line|
|
43
|
-
match = re.match(line)
|
44
|
-
Rails.logger.info { "[react_on_rails] #{match[:msg]}" } if match
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
result
|
49
|
-
end
|
50
|
-
|
51
|
-
class << self
|
52
|
-
private
|
53
|
-
|
54
|
-
def trace_messsage(js_code)
|
55
|
-
return unless ENV["TRACE_REACT_ON_RAILS"].present?
|
56
|
-
# Set to anything to print generated code.
|
57
|
-
puts "Z" * 80
|
58
|
-
puts "react_renderer.rb: 92"
|
59
|
-
puts "wrote file tmp/server-generated.js"
|
60
|
-
File.write("tmp/server-generated.js", js_code)
|
61
|
-
puts "Z" * 80
|
62
|
-
end
|
63
|
-
|
64
|
-
def eval_js(js_code)
|
65
|
-
@js_context_pool.with do |js_context|
|
66
|
-
result = js_context.eval(js_code)
|
67
|
-
js_context.eval("console.history = []")
|
68
|
-
result
|
69
|
-
end
|
70
|
-
end
|
71
|
-
|
72
|
-
def create_js_context
|
73
|
-
server_js_file = ReactOnRails.configuration.server_bundle_js_file
|
74
|
-
if server_js_file.present? && File.exist?(server_js_file)
|
75
|
-
bundle_js_code = File.read(server_js_file)
|
76
|
-
base_js_code = <<-JS
|
77
|
-
#{console_polyfill}
|
78
|
-
#{bundle_js_code};
|
79
|
-
#{::Rails.application.assets['react_on_rails.js']};
|
80
|
-
JS
|
81
|
-
ExecJS.compile(base_js_code)
|
82
|
-
else
|
83
|
-
if server_js_file.present?
|
84
|
-
msg = "You specified server rendering JS file: #{server_js_file}, but it cannot be "\
|
85
|
-
"read. You may set the server_bundle_js_file in your configuration to be \"\" to "\
|
86
|
-
"avoid this warning"
|
87
|
-
Rails.logger.warn msg
|
88
|
-
puts msg
|
89
|
-
end
|
90
|
-
ExecJS.compile("")
|
91
|
-
end
|
92
|
-
end
|
93
|
-
|
94
|
-
# Reimplement console methods for replaying on the client
|
95
|
-
def console_polyfill
|
96
|
-
<<-JS
|
97
|
-
var console = { history: [] };
|
98
|
-
['error', 'log', 'info', 'warn'].forEach(function (level) {
|
99
|
-
console[level] = function () {
|
100
|
-
var argArray = Array.prototype.slice.call(arguments);
|
101
|
-
if (argArray.length > 0) {
|
102
|
-
argArray[0] = '[SERVER] ' + argArray[0];
|
103
|
-
}
|
104
|
-
console.history.push({level: level, arguments: argArray});
|
105
|
-
};
|
106
|
-
});
|
107
|
-
JS
|
108
|
-
end
|
109
|
-
end
|
110
|
-
end
|
111
|
-
end
|