Class: SvelteOnRails::RenderServerSide
- Inherits:
-
Object
- Object
- SvelteOnRails::RenderServerSide
- Defined in:
- lib/svelte_on_rails/render_server_side.rb
Class Method Summary collapse
Instance Method Summary collapse
- #compile ⇒ Object
- #compile_if_changes ⇒ Object
- #compiled_css_file ⇒ Object
- #compiled_js_file ⇒ Object
-
#initialize(filename) ⇒ RenderServerSide
constructor
A new instance of RenderServerSide.
- #render_compiled_file(props = {}) ⇒ Object
Constructor Details
#initialize(filename) ⇒ RenderServerSide
Returns a new instance of RenderServerSide.
6 7 8 9 10 11 12 13 14 |
# File 'lib/svelte_on_rails/render_server_side.rb', line 6 def initialize(filename) @svelte_file = SvelteOnRails::Configuration.instance.components_folder + filename @svelte_filename = filename @compiled_file = "#{SvelteOnRails::Configuration.instance.dist_folder}/#{(filename.match(/\.svelte$/) ? filename[0..-8] : filename)}" raise "File not found: #{@svelte_file}" unless File.exist?(@svelte_file) end |
Class Method Details
.gem_app_dir ⇒ Object
113 114 115 |
# File 'lib/svelte_on_rails/render_server_side.rb', line 113 def self.gem_app_dir File.('../svelte_on_rails', __dir__) + '/' end |
.reset_dist ⇒ Object
117 118 119 120 121 122 123 |
# File 'lib/svelte_on_rails/render_server_side.rb', line 117 def self.reset_dist unless Dir.exist?(SvelteOnRails::Configuration.instance.dist_folder) FileUtils.mkdir_p(SvelteOnRails::Configuration.instance.dist_folder) end FileUtils.rm_rf Dir.glob("#{SvelteOnRails::Configuration.instance.dist_folder}/*") FileUtils.touch SvelteOnRails::Configuration.instance.dist_folder.join('reset_timestamp') end |
Instance Method Details
#compile ⇒ Object
89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 |
# File 'lib/svelte_on_rails/render_server_side.rb', line 89 def compile start_time = Time.now dist = SvelteOnRails::Configuration.instance.dist_folder subs = @svelte_filename.split('/')[0..-2].join('/') cmd = [ 'node', self.class.gem_app_dir + 'compile.js', @svelte_file, dist.join(subs), self.class.gem_app_dir ].join(' ') stdout, stderr, status = Open3.capture3(cmd, chdir: SvelteOnRails::Configuration.instance.rails_root) unless status.to_s.match(/^pid [0-9]+ exit 0$/) raise "Compiling «#{@svelte_filename}» Server-side, script compile.js, executed within Rails.root:\n\n#{cmd}\n\n++++++\n\n#{stderr}\n\n++++++\n\n" end time = Time.now - start_time Rails.logger.info " Compiled #{@svelte_filename}.js: #{time.round(3)}ms" rescue nil end |
#compile_if_changes ⇒ Object
16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 |
# File 'lib/svelte_on_rails/render_server_side.rb', line 16 def compile_if_changes # letzte Änderung innerhalb des ordners ermitteln watch_changes = SvelteOnRails::Configuration.instance.watch_changes ts_file = SvelteOnRails::Configuration.instance.dist_folder.join('reset_timestamp') have_changes = if watch_changes && File.exist?(ts_file) # compare last modification timestamp last_modification = 100.years.ago.to_time Dir.glob("#{SvelteOnRails::Configuration.instance.components_folder}**/*").each do |path| if File.file?(path) mtime = File.mtime(path) if mtime > last_modification last_modification = mtime end end end File.mtime(ts_file) < last_modification elsif watch_changes true elsif !File.exist?(ts_file) true else false end if have_changes || !File.exist?(compiled_js_file) || !File.exist?(compiled_css_file) if have_changes || (!File.exist?(ts_file) && watch_changes) self.class.reset_dist end compile end end |
#compiled_css_file ⇒ Object
85 86 87 |
# File 'lib/svelte_on_rails/render_server_side.rb', line 85 def compiled_css_file @compiled_file + '.css' end |
#compiled_js_file ⇒ Object
81 82 83 |
# File 'lib/svelte_on_rails/render_server_side.rb', line 81 def compiled_js_file @compiled_file + '.js' end |
#render_compiled_file(props = {}) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/svelte_on_rails/render_server_side.rb', line 53 def render_compiled_file(props = {}) require 'base64' require 'json' props_enc = Base64.encode64(props.to_json).strip cmd = [ 'node', '/Users/christian/projects-gmbh/gems/svelte-on-rails/svelte-on-rails-gem/lib/svelte_on_rails/render.js', compiled_js_file, props_enc, SvelteOnRails::Configuration.instance.rails_root ].join(' ') stdout, stderr, status = Open3.capture3(cmd, chdir: self.class.gem_app_dir) unless status.to_s.match(/^pid [0-9]+ exit 0$/) raise "Render Svelte Server-side:\n" + stderr end begin res = JSON.parse(stdout) if File.exist?(compiled_css_file) res['css'] = File.read(compiled_css_file) end return res rescue JSON::ParserError => e raise "Render Svelte Server-side: Expected JSON, got: «#{stdout}»" end end |