rails-react-views 0.0.1 → 0.0.8

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a028f3d9ae7fd27788a2562640ed586391a6ad570f7819dd3b856fb17ede47fd
4
- data.tar.gz: 69c77a908ef892d597c51ca3c147d2d1cc8484569c4459fa2d9e26774a5759f7
3
+ metadata.gz: 2a7ac05bf80cec2829fa8e6fc98c31919844a9a2daaaf5e36631b219d2d48fd0
4
+ data.tar.gz: d442e398115c05441883fb873ef73d43b1841348ca198288377e1297347079ee
5
5
  SHA512:
6
- metadata.gz: ece3d02d088046ce4a5d3fb9fe7553307e18d06782ef1f9c51de8b06a4369ad788cbbe1bfbb01b2347cd380ad08f387cdff499bc11c2d8312edfd1a168f2cc8b
7
- data.tar.gz: e18d0f3068ee08ac8d975b7f838734cd9c265f9308829e32cab2cf49608ac7d609c77813e2f404895f690e7f9f7b39988a311f8970ae702724091a023c7261e8
6
+ metadata.gz: 8821fb6c3c987078c23ba2b9d44f76358bf9fabeaead3dec41313e1e01a50222901f8128753dda657f297598d572d1841818fb3344d5415e39d172f90186d533
7
+ data.tar.gz: d72ba94b7b765c13a42fe77f8942fa4da4dbcad477ee1f16a650084d8016e90b06e5e937624c756b67b2a042cfdbffba56e46888c35aeeb4d88add2d1981474c
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2021 Nick Geerts
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
data/README.md ADDED
@@ -0,0 +1,3 @@
1
+ # Rails React Views
2
+
3
+ A library for full integration of React.js views in Ruby on Rails.
@@ -3,6 +3,7 @@ require 'rails_react_views/config'
3
3
  require 'rails_react_views/digest'
4
4
  require 'rails_react_views/prerenderer'
5
5
  require 'rails_react_views/railtie'
6
+ require 'rails_react_views/shell'
6
7
  require 'rails_react_views/version'
7
8
 
8
9
  module RailsReactViews
@@ -5,7 +5,7 @@ module RailsReactViews
5
5
  def render_react_view(view: nil, props: {}, prerender: true, cache: true, layout: nil)
6
6
  view ||= "#{controller_path}/#{action_name}"
7
7
  layout ||= RailsReactViews::config[:layout]
8
- context = RailsReactViews::Prerenderer.build_context(view: view, props: props, path: request.path)
8
+ context = RailsReactViews::Prerenderer.build_context(view: view, props: props, path: request.fullpath)
9
9
 
10
10
  respond_to do |format|
11
11
  format.html do
@@ -1,13 +1,7 @@
1
1
  module RailsReactViews
2
2
  def self.config
3
3
  @@config ||= begin
4
- config =
5
- if Rails.env.production?
6
- `NODE_ENV=production node node_modules/rails-react-views/dist/cjs/server/scripts/config.js`
7
- else
8
- `BABEL_ENV=test node_modules/.bin/babel-node -x '.js,.jsx,.ts,.tsx' node_modules/rails-react-views/dist/cjs/server/scripts/config.js`
9
- end
10
-
4
+ config = RailsReactViews::Shell.config
11
5
  JSON.parse(config).with_indifferent_access
12
6
  end
13
7
  end
@@ -7,13 +7,21 @@ module RailsReactViews
7
7
  end
8
8
  end
9
9
 
10
+ def self.files_digest(files)
11
+ actual_files = files.compact.reject { |file| File.directory?(file) }
12
+ digests = actual_files.map { |file| Digest::MD5.file(file).to_s }
13
+ Digest::MD5.hexdigest(digests.to_s)
14
+ end
15
+
10
16
  private
11
17
 
12
18
  def self.calculate_digest
13
- js_files = Dir.glob(Rails.root.join('app/javascript/**/*')).reject { |file| File.directory?(file) }
14
- yarn_digest = Digest::MD5.file(Rails.root.join('yarn.lock'))
15
- digests = js_files.map { |file| Digest::MD5.file(file).to_s } << yarn_digest
19
+ js_files = Dir.glob(Rails.root.join('app/javascript/**/*'))
20
+ files_digest([*js_files, yarn_file])
21
+ end
16
22
 
17
- Digest::MD5.hexdigest(digests.to_s)
23
+ def self.yarn_file
24
+ path = Rails.root.join('yarn.lock')
25
+ File.exists?(path) ? path : nil
18
26
  end
19
27
  end
@@ -1,3 +1,5 @@
1
+ require 'zlib'
2
+
1
3
  module RailsReactViews
2
4
  class Prerenderer
3
5
  class << self
@@ -17,12 +19,34 @@ module RailsReactViews
17
19
 
18
20
  def build_context(props: {}, view:, path:)
19
21
  {
20
- props: props,
21
22
  view: view,
22
- path: base_path(path)
23
+ path: base_path(path),
24
+ props: props
23
25
  }
24
26
  end
25
27
 
28
+ def encode_text(text)
29
+ gzipped_text = Zlib::Deflate.deflate(text)
30
+ Base64.strict_encode64(gzipped_text)
31
+ end
32
+
33
+ def decode_text(text)
34
+ decoded_text = Base64.strict_decode64(text)
35
+ Zlib::Inflate.inflate(decoded_text).force_encoding('utf-8')
36
+ end
37
+
38
+ def split_html(html = '')
39
+ head_start = html.index('<head>')
40
+ head_end = html.index('</head>')
41
+ head = (head_start && head_end ? html[head_start + 6..head_end - 1] : '').html_safe
42
+
43
+ body_start = html.index('<body>')
44
+ body_end = html.index('</body>')
45
+ body = (body_start && body_end ? html[body_start + 6..body_end - 1] : '').html_safe
46
+
47
+ { head: head, body: body }
48
+ end
49
+
26
50
  private
27
51
 
28
52
  def process_prerender(context_json)
@@ -49,47 +73,19 @@ module RailsReactViews
49
73
 
50
74
  def cmd_prerender(context_json)
51
75
  encoded_context = encode_text(context_json)
52
- encoded_html =
53
- if Rails.env.production?
54
- `NODE_ENV=production node node_modules/rails-react-views/dist/cjs/server/scripts/cmd.js #{encoded_context}`
55
- else
56
- `BABEL_ENV=test node_modules/.bin/babel-node -x '.js,.jsx,.ts,.tsx' node_modules/rails-react-views/dist/cjs/server/scripts/cmd.js #{encoded_context}`
57
- end
58
-
76
+ encoded_html = RailsReactViews::Shell.cmd(encoded_context)
59
77
  html = decode_text(encoded_html)
60
78
  split_html(html)
61
79
  end
62
80
 
63
- def encode_text(text)
64
- gzipped_text = Zlib::Deflate.deflate(text)
65
- Base64.strict_encode64(gzipped_text)
66
- end
67
-
68
- def decode_text(text)
69
- decoded_text = Base64.strict_decode64(text)
70
- Zlib::Inflate.inflate(decoded_text).force_encoding('utf-8')
71
- end
72
-
73
81
  def base_path(path)
74
- if path.ends_with?('.json')
82
+ if path.end_with?('.json')
75
83
  path[0..-6]
76
84
  else
77
85
  path
78
86
  end
79
87
  end
80
88
 
81
- def split_html(html = '')
82
- head_start = html.index('<head>')
83
- head_end = html.index('</head>')
84
- head = (head_start && head_end ? html[head_start + 6..head_end - 1] : '').html_safe
85
-
86
- body_start = html.index('<body>')
87
- body_end = html.index('</body>')
88
- body = (body_start && body_end ? html[body_start + 6..body_end - 1] : '').html_safe
89
-
90
- { head: head, body: body }
91
- end
92
-
93
89
  def server?
94
90
  RailsReactViews::config[:server]
95
91
  end
@@ -0,0 +1,24 @@
1
+ module RailsReactViews
2
+ class Shell
3
+ class << self
4
+ def cmd(encoded_context)
5
+ `#{node} node_modules/rails-react-views/dist/cjs/server/scripts/cmd.js #{encoded_context}`
6
+ end
7
+
8
+ def config
9
+ `#{node} node_modules/rails-react-views/dist/cjs/server/scripts/config.js`
10
+ end
11
+
12
+ private
13
+
14
+ def node
15
+ if Rails.env.production?
16
+ 'NODE_ENV=production node'
17
+ else
18
+ # Using BABEL_ENV=test to target CommonJS syntax
19
+ "BABEL_ENV=test node_modules/.bin/babel-node -x '.js,.jsx,.ts,.tsx'"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,3 +1,3 @@
1
1
  module RailsReactViews
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.8"
3
3
  end
metadata CHANGED
@@ -1,45 +1,59 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rails-react-views
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.8
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nick Geerts
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-07-08 00:00:00.000000000 Z
11
+ date: 2022-09-19 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: railties
14
+ name: rails
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '5'
19
+ version: '6.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: '5'
26
+ version: '6.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: webpacker
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - ">="
31
+ - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '5'
33
+ version: '5.0'
34
34
  type: :runtime
35
35
  prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '5.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rspec
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '0'
48
+ type: :development
49
+ prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '5'
54
+ version: '0'
41
55
  description: A library for full integration of React.js views in Ruby on Rails.
42
- email:
56
+ email:
43
57
  executables: []
44
58
  extensions: []
45
59
  extra_rdoc_files: []
@@ -52,12 +66,16 @@ files:
52
66
  - lib/rails_react_views/digest.rb
53
67
  - lib/rails_react_views/prerenderer.rb
54
68
  - lib/rails_react_views/railtie.rb
69
+ - lib/rails_react_views/shell.rb
55
70
  - lib/rails_react_views/version.rb
56
71
  homepage: https://rubygems.org/gems/rails-react-views
57
72
  licenses:
58
73
  - MIT
59
- metadata: {}
60
- post_install_message:
74
+ metadata:
75
+ homepage_uri: https://rubygems.org/gems/rails-react-views
76
+ source_code_uri: https://github.com/njjkgeerts/rails-react-views
77
+ changelog_uri: https://github.com/njjkgeerts/rails-react-views/releases
78
+ post_install_message:
61
79
  rdoc_options: []
62
80
  require_paths:
63
81
  - lib
@@ -72,8 +90,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
72
90
  - !ruby/object:Gem::Version
73
91
  version: '0'
74
92
  requirements: []
75
- rubygems_version: 3.1.6
76
- signing_key:
93
+ rubygems_version: 3.2.33
94
+ signing_key:
77
95
  specification_version: 4
78
96
  summary: React.js views for Ruby on Rails
79
97
  test_files: []
data/LICENSE DELETED
@@ -1 +0,0 @@
1
- ../LICENSE
data/README.md DELETED
@@ -1 +0,0 @@
1
- ../README.md