isomorfeus 1.0.0.zeta24 → 2.0.0.rc3
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/LICENSE +21 -21
- data/README.md +27 -31
- data/bin/ismos +2 -2
- data/bin/isomorfeus +2 -3
- data/lib/isomorfeus/cli.rb +119 -31
- data/lib/isomorfeus/command.rb +29 -31
- data/lib/isomorfeus/console.rb +21 -21
- data/lib/isomorfeus/installer/bundle.rb +13 -0
- data/lib/isomorfeus/installer/dsl.rb +67 -0
- data/lib/isomorfeus/installer/gemfile.rb +39 -0
- data/lib/isomorfeus/installer/install_targets.rb +29 -0
- data/lib/isomorfeus/installer/new_project.rb +19 -56
- data/lib/isomorfeus/installer/options_mangler.rb +16 -16
- data/lib/isomorfeus/installer/rack_servers.rb +5 -11
- data/lib/isomorfeus/installer/target/web.rb +54 -0
- data/lib/isomorfeus/installer/templates/.gitignore.erb +25 -25
- data/lib/isomorfeus/installer/templates/Gemfile.erb +20 -36
- data/lib/isomorfeus/installer/templates/anonymous_policy.rb.erb +3 -3
- data/lib/isomorfeus/installer/templates/app_loader.rb.erb +8 -8
- data/lib/isomorfeus/installer/templates/config.ru.erb +23 -23
- data/lib/isomorfeus/installer/templates/hello_component.rb.erb +5 -5
- data/lib/isomorfeus/installer/templates/iodine.rb.erb +5 -0
- data/lib/isomorfeus/installer/templates/isomorfeus_loader.rb.erb +16 -16
- data/lib/isomorfeus/installer/templates/isomorfeus_web_worker_loader.rb.erb +2 -2
- data/lib/isomorfeus/installer/templates/{mail_components_loader.rb.erb → mail_loader.rb.erb} +18 -18
- data/lib/isomorfeus/installer/templates/mail_preview.mustache.erb +14 -0
- data/lib/isomorfeus/installer/templates/my_app.rb.erb +10 -10
- data/lib/isomorfeus/installer/templates/navigation_links.rb.erb +8 -8
- data/lib/isomorfeus/installer/templates/not_found_404_component.rb.erb +6 -6
- data/lib/isomorfeus/installer/templates/roda_app.rb.erb +71 -0
- data/lib/isomorfeus/installer/templates/spec_helper.rb.erb +19 -22
- data/lib/isomorfeus/installer/templates/web.mustache.erb +15 -0
- data/lib/isomorfeus/installer/templates/{test_spec.rb.erb → web_spec.rb.erb} +12 -12
- data/lib/isomorfeus/installer/templates/welcome_component.rb.erb +5 -5
- data/lib/isomorfeus/installer/test_app_files.rb +24 -0
- data/lib/isomorfeus/installer/upgrade.rb +11 -0
- data/lib/isomorfeus/installer.rb +57 -261
- data/lib/isomorfeus/version.rb +3 -3
- data/lib/isomorfeus.rb +10 -8
- metadata +68 -63
- data/bin/yandle +0 -9
- data/lib/isomorfeus/installer/databases/arangodb.rb +0 -13
- data/lib/isomorfeus/installer/templates/Procfile.erb +0 -1
- data/lib/isomorfeus/installer/templates/ProcfileDebug.erb +0 -3
- data/lib/isomorfeus/installer/templates/ProcfileDev.erb +0 -3
- data/lib/isomorfeus/installer/templates/app.rb.erb +0 -57
- data/lib/isomorfeus/installer/templates/application.css.erb +0 -0
- data/lib/isomorfeus/installer/templates/application.js.erb +0 -25
- data/lib/isomorfeus/installer/templates/application_common.js.erb +0 -17
- data/lib/isomorfeus/installer/templates/application_ssr.js.erb +0 -23
- data/lib/isomorfeus/installer/templates/application_web_worker.js.erb +0 -6
- data/lib/isomorfeus/installer/templates/arango_config.rb.erb +0 -20
- data/lib/isomorfeus/installer/templates/debug.js.erb +0 -131
- data/lib/isomorfeus/installer/templates/development.js.erb +0 -110
- data/lib/isomorfeus/installer/templates/development_ssr.js.erb +0 -115
- data/lib/isomorfeus/installer/templates/iodine_config.rb.erb +0 -14
- data/lib/isomorfeus/installer/templates/mail_components.js.erb +0 -23
- data/lib/isomorfeus/installer/templates/package.json.erb +0 -43
- data/lib/isomorfeus/installer/templates/production.js.erb +0 -100
@@ -1,11 +1,5 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
Isomorfeus::Installer.add_rack_server('iodine', {
|
7
|
-
gems: [ { name: 'iodine', version: "~> 0.7.38", require: true } ],
|
8
|
-
start_command: 'bundle exec iodine',
|
9
|
-
init_template: 'iodine_config.rb.erb',
|
10
|
-
rack_server_init: "require_relative 'iodine_config'"
|
11
|
-
})
|
1
|
+
Isomorfeus::Installer.add_rack_server('isomorfeus-iodine', {
|
2
|
+
gems: [ { name: 'isomorfeus-iodine', version: "~> 0.7.45", require: true } ],
|
3
|
+
start_command: 'bundle exec iodine',
|
4
|
+
config_template: 'iodine.rb.erb'
|
5
|
+
})
|
@@ -0,0 +1,54 @@
|
|
1
|
+
module Isomorfeus
|
2
|
+
module Installer
|
3
|
+
module Target
|
4
|
+
class Web
|
5
|
+
extend Isomorfeus::Installer::DSL
|
6
|
+
|
7
|
+
class << self
|
8
|
+
def execute
|
9
|
+
install_roda_app
|
10
|
+
install_configuration
|
11
|
+
install_web_loaders
|
12
|
+
install_web_layouts
|
13
|
+
install_web_specs unless Isomorfeus::Installer.project_name == 'test_app'
|
14
|
+
end
|
15
|
+
|
16
|
+
# DSL
|
17
|
+
|
18
|
+
def install_roda_app
|
19
|
+
data_hash = { roda_app_class: Isomorfeus::Installer.roda_app_class, app_class: Isomorfeus::Installer.app_class }
|
20
|
+
create_file_from_template(templates_path, 'roda_app.rb.erb', File.join('app', 'server', Isomorfeus::Installer.roda_app_path + '.rb'), data_hash)
|
21
|
+
data_hash = { roda_app_class: Isomorfeus::Installer.roda_app_class, roda_app_path: Isomorfeus::Installer.roda_app_path }
|
22
|
+
create_file_from_template(templates_path, 'config.ru.erb', 'config.ru', data_hash)
|
23
|
+
create_file_from_template(templates_path, File.join('app_loader.rb.erb'), 'app_loader.rb', {})
|
24
|
+
create_file_from_template(templates_path, File.join('.gitignore.erb'), '.gitignore', {})
|
25
|
+
end
|
26
|
+
|
27
|
+
def install_configuration
|
28
|
+
create_file_from_template(templates_path, Isomorfeus::Installer.rack_server[:config_template], config_path(Isomorfeus::Installer.rack_server[:config_template][0..-5]), {})
|
29
|
+
data_hash = { app_class: Isomorfeus::Installer.app_class }
|
30
|
+
end
|
31
|
+
|
32
|
+
def install_web_layouts
|
33
|
+
copy_file(File.join(templates_path, 'web.mustache.erb'), File.join('app', 'layouts', 'web.mustache'))
|
34
|
+
copy_file(File.join(templates_path, 'mail_preview.mustache.erb'), File.join('app', 'layouts', 'mail_preview.mustache'))
|
35
|
+
end
|
36
|
+
|
37
|
+
def install_web_loaders
|
38
|
+
create_file_from_template(templates_path, 'isomorfeus_loader.rb.erb', File.join('app', 'isomorfeus_loader.rb'), {})
|
39
|
+
# create_file_from_template(templates_path, 'web_worker_loader.rb.erb', File.join('app', 'web_worker_loader.rb'), {})
|
40
|
+
create_file_from_template(templates_path, 'mail_loader.rb.erb', File.join('app', 'mail_loader.rb'), {})
|
41
|
+
end
|
42
|
+
|
43
|
+
def install_web_specs
|
44
|
+
create_file_from_template(templates_path, 'web_spec.rb.erb', File.join('spec', 'web_spec.rb'), {})
|
45
|
+
end
|
46
|
+
|
47
|
+
def templates_path
|
48
|
+
Isomorfeus::Installer.templates_path
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
@@ -1,25 +1,25 @@
|
|
1
|
-
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
2
|
-
#
|
3
|
-
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
-
# or operating system, you probably want to add a global ignore instead:
|
5
|
-
# git config --global core.excludesfile '~/.gitignore_global'
|
6
|
-
|
7
|
-
# Ignore bundler config.
|
8
|
-
/.bundle
|
9
|
-
|
10
|
-
# Ignore all logfiles and tempfiles.
|
11
|
-
/log/*
|
12
|
-
/tmp/*
|
13
|
-
!/log/.keep
|
14
|
-
!/tmp/.keep
|
15
|
-
|
16
|
-
node_modules
|
17
|
-
public/assets
|
18
|
-
|
19
|
-
.byebug_history
|
20
|
-
|
21
|
-
yarn-error.log
|
22
|
-
yarn-debug.log*
|
23
|
-
.yarn-integrity
|
24
|
-
|
25
|
-
.DS_Store
|
1
|
+
# See https://help.github.com/articles/ignoring-files for more about ignoring files.
|
2
|
+
#
|
3
|
+
# If you find yourself ignoring temporary files generated by your text editor
|
4
|
+
# or operating system, you probably want to add a global ignore instead:
|
5
|
+
# git config --global core.excludesfile '~/.gitignore_global'
|
6
|
+
|
7
|
+
# Ignore bundler config.
|
8
|
+
/.bundle
|
9
|
+
|
10
|
+
# Ignore all logfiles and tempfiles.
|
11
|
+
/log/*
|
12
|
+
/tmp/*
|
13
|
+
!/log/.keep
|
14
|
+
!/tmp/.keep
|
15
|
+
|
16
|
+
node_modules
|
17
|
+
public/assets
|
18
|
+
|
19
|
+
.byebug_history
|
20
|
+
|
21
|
+
yarn-error.log
|
22
|
+
yarn-debug.log*
|
23
|
+
.yarn-integrity
|
24
|
+
|
25
|
+
.DS_Store
|
@@ -1,36 +1,20 @@
|
|
1
|
-
source 'https://rubygems.org'
|
2
|
-
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
gem '
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
gem '
|
14
|
-
gem '
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
gem '
|
19
|
-
gem 'isomorfeus-
|
20
|
-
|
21
|
-
gem 'isomorfeus', <%= isomorfeus %>
|
22
|
-
<% end %>
|
23
|
-
|
24
|
-
group :development do
|
25
|
-
gem 'debase'
|
26
|
-
gem 'ruby-debug-ide'
|
27
|
-
gem 'pry', '~> 0.12.2'
|
28
|
-
gem 'pry-nav'
|
29
|
-
gem 'pry-rescue'
|
30
|
-
gem 'pry-stack_explorer'
|
31
|
-
end
|
32
|
-
|
33
|
-
group :test do
|
34
|
-
gem 'rspec', '~> 3.8.0'
|
35
|
-
gem 'isomorfeus-puppetmaster', '~> 0.3.5'
|
36
|
-
end
|
1
|
+
source 'https://rubygems.org'
|
2
|
+
git_source(:github) { |repo| "https://github.com/#{repo}.git" }
|
3
|
+
|
4
|
+
gem 'wdm', '>= 0.1.1' if Gem.win_platform?
|
5
|
+
<%= rack_server_gems %>
|
6
|
+
gem 'roda', '~> 3.49.0'
|
7
|
+
gem 'opal', '~> 1.3.2'
|
8
|
+
|
9
|
+
<%= isomorfeus_gems %>
|
10
|
+
|
11
|
+
group :development do
|
12
|
+
gem 'pry', '~> 0.14.1'
|
13
|
+
gem 'pry-rescue'
|
14
|
+
gem 'pry-stack_explorer'
|
15
|
+
end
|
16
|
+
|
17
|
+
group :test do
|
18
|
+
gem 'rspec', '~> 3.8.0'
|
19
|
+
gem 'isomorfeus-puppetmaster', '~> 0.5.4'
|
20
|
+
end
|
@@ -1,3 +1,3 @@
|
|
1
|
-
class AnonymousPolicy < LucidPolicy::Base
|
2
|
-
allow all
|
3
|
-
end
|
1
|
+
class AnonymousPolicy < LucidPolicy::Base
|
2
|
+
allow all
|
3
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
|
-
require 'bundler/setup'
|
2
|
-
if ENV['RACK_ENV'] && ENV['RACK_ENV'] == 'production'
|
3
|
-
Bundler.require(:default, :production)
|
4
|
-
elsif ENV['RACK_ENV'] && ENV['RACK_ENV'] == 'test'
|
5
|
-
Bundler.require(:default, :test)
|
6
|
-
else
|
7
|
-
Bundler.require(:default, :development)
|
8
|
-
end
|
1
|
+
require 'bundler/setup'
|
2
|
+
if ENV['RACK_ENV'] && ENV['RACK_ENV'] == 'production'
|
3
|
+
Bundler.require(:default, :production)
|
4
|
+
elsif ENV['RACK_ENV'] && ENV['RACK_ENV'] == 'test'
|
5
|
+
Bundler.require(:default, :test)
|
6
|
+
else
|
7
|
+
Bundler.require(:default, :development)
|
8
|
+
end
|
@@ -1,23 +1,23 @@
|
|
1
|
-
require_relative '
|
2
|
-
|
3
|
-
if !Isomorfeus.development?
|
4
|
-
Isomorfeus.zeitwerk.setup
|
5
|
-
Isomorfeus.zeitwerk.eager_load
|
6
|
-
|
7
|
-
run <%=
|
8
|
-
else
|
9
|
-
Isomorfeus.zeitwerk.enable_reloading
|
10
|
-
Isomorfeus.zeitwerk.setup
|
11
|
-
Isomorfeus.zeitwerk.eager_load
|
12
|
-
|
13
|
-
run ->(env) do
|
14
|
-
write_lock = Isomorfeus.zeitwerk_lock.try_write_lock
|
15
|
-
if write_lock
|
16
|
-
Isomorfeus.zeitwerk.reload
|
17
|
-
Isomorfeus.zeitwerk_lock.release_write_lock
|
18
|
-
end
|
19
|
-
Isomorfeus.zeitwerk_lock.with_read_lock do
|
20
|
-
<%=
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|
1
|
+
require_relative 'app_loader'
|
2
|
+
|
3
|
+
if !Isomorfeus.development?
|
4
|
+
Isomorfeus.zeitwerk.setup
|
5
|
+
Isomorfeus.zeitwerk.eager_load
|
6
|
+
|
7
|
+
run <%= roda_app_class %>.freeze.app
|
8
|
+
else
|
9
|
+
Isomorfeus.zeitwerk.enable_reloading
|
10
|
+
Isomorfeus.zeitwerk.setup
|
11
|
+
Isomorfeus.zeitwerk.eager_load
|
12
|
+
|
13
|
+
run ->(env) do
|
14
|
+
write_lock = Isomorfeus.zeitwerk_lock.try_write_lock
|
15
|
+
if write_lock
|
16
|
+
Isomorfeus.zeitwerk.reload
|
17
|
+
Isomorfeus.zeitwerk_lock.release_write_lock
|
18
|
+
end
|
19
|
+
Isomorfeus.zeitwerk_lock.with_read_lock do
|
20
|
+
<%= roda_app_class %>.call env
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
class HelloComponent < LucidComponent::Base
|
2
|
-
render do
|
3
|
-
DIV "Hello World!"
|
4
|
-
NavigationLinks()
|
5
|
-
end
|
1
|
+
class HelloComponent < LucidComponent::Base
|
2
|
+
render do
|
3
|
+
DIV "Hello World!"
|
4
|
+
NavigationLinks()
|
5
|
+
end
|
6
6
|
end
|
@@ -1,16 +1,16 @@
|
|
1
|
-
require 'opal'
|
2
|
-
require 'isomorfeus-redux'
|
3
|
-
require 'isomorfeus-
|
4
|
-
require 'isomorfeus-policy'
|
5
|
-
require 'isomorfeus-transport'
|
6
|
-
require 'isomorfeus-data'
|
7
|
-
require 'isomorfeus-i18n'
|
8
|
-
require 'isomorfeus-operation'
|
9
|
-
|
10
|
-
require_tree 'policies', :
|
11
|
-
require_tree 'channels', :
|
12
|
-
require_tree 'data', :
|
13
|
-
require_tree 'operations', :
|
14
|
-
require_tree 'components', :
|
15
|
-
|
16
|
-
Isomorfeus.start_app!
|
1
|
+
require 'opal'
|
2
|
+
require 'isomorfeus-redux'
|
3
|
+
require 'isomorfeus-preact'
|
4
|
+
require 'isomorfeus-policy'
|
5
|
+
require 'isomorfeus-transport'
|
6
|
+
require 'isomorfeus-data'
|
7
|
+
require 'isomorfeus-i18n'
|
8
|
+
require 'isomorfeus-operation'
|
9
|
+
|
10
|
+
require_tree 'policies', autoload: true
|
11
|
+
require_tree 'channels', autoload: true
|
12
|
+
require_tree 'data', autoload: true
|
13
|
+
require_tree 'operations', autoload: true
|
14
|
+
require_tree 'components', autoload: true
|
15
|
+
|
16
|
+
Isomorfeus.start_app!
|
@@ -1,2 +1,2 @@
|
|
1
|
-
require 'opal'
|
2
|
-
require 'zeitwerk'
|
1
|
+
require 'opal'
|
2
|
+
require 'zeitwerk'
|
data/lib/isomorfeus/installer/templates/{mail_components_loader.rb.erb → mail_loader.rb.erb}
RENAMED
@@ -1,18 +1,18 @@
|
|
1
|
-
require 'opal'
|
2
|
-
require 'isomorfeus-redux'
|
3
|
-
require 'isomorfeus-
|
4
|
-
require 'isomorfeus-policy'
|
5
|
-
require 'isomorfeus-transport'
|
6
|
-
require 'isomorfeus-data'
|
7
|
-
require 'isomorfeus-i18n'
|
8
|
-
require 'isomorfeus-operation'
|
9
|
-
|
10
|
-
require_tree 'policies', :
|
11
|
-
require_tree 'channels', :
|
12
|
-
require_tree 'data', :
|
13
|
-
require_tree 'operations', :
|
14
|
-
require_tree 'mail_components', :
|
15
|
-
|
16
|
-
Isomorfeus.zeitwerk.push_dir('mail_components')
|
17
|
-
|
18
|
-
Isomorfeus.start_app!
|
1
|
+
require 'opal'
|
2
|
+
require 'isomorfeus-redux'
|
3
|
+
require 'isomorfeus-preact'
|
4
|
+
require 'isomorfeus-policy'
|
5
|
+
require 'isomorfeus-transport'
|
6
|
+
require 'isomorfeus-data'
|
7
|
+
require 'isomorfeus-i18n'
|
8
|
+
require 'isomorfeus-operation'
|
9
|
+
|
10
|
+
require_tree 'policies', autoload: true
|
11
|
+
require_tree 'channels', autoload: true
|
12
|
+
require_tree 'data', autoload: true
|
13
|
+
require_tree 'operations', autoload: true
|
14
|
+
require_tree 'mail_components', autoload: true
|
15
|
+
|
16
|
+
Isomorfeus.zeitwerk.push_dir('mail_components')
|
17
|
+
|
18
|
+
Isomorfeus.start_app!
|
@@ -0,0 +1,14 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>Mail preview of {{ component_class }}</title>
|
5
|
+
<meta charset="utf-8"/>
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7
|
+
<style id="jss-server-side" type="text/css">
|
8
|
+
{{& ssr_styles }}
|
9
|
+
</style>
|
10
|
+
</head>
|
11
|
+
<body>
|
12
|
+
{{& content }}
|
13
|
+
</body>
|
14
|
+
</html>
|
@@ -1,11 +1,11 @@
|
|
1
|
-
class <%= app_class %> < LucidApp::Base
|
2
|
-
render do
|
3
|
-
Router(
|
4
|
-
Switch do
|
5
|
-
Route(path: '/',
|
6
|
-
Route(path: '/welcome',
|
7
|
-
Route(component: NotFound404Component.JS[:
|
8
|
-
end
|
9
|
-
end
|
10
|
-
end
|
1
|
+
class <%= app_class %> < LucidApp::Base
|
2
|
+
render do
|
3
|
+
Router(hook: Preact.location_hook(props.location)) do
|
4
|
+
Switch do
|
5
|
+
Route(path: '/', component: HelloComponent.JS[:preact_component])
|
6
|
+
Route(path: '/welcome', component: WelcomeComponent.JS[:preact_component])
|
7
|
+
Route(component: NotFound404Component.JS[:preact_component])
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
11
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
class NavigationLinks < LucidComponent::Base
|
2
|
-
render do
|
3
|
-
P do
|
4
|
-
Link(to: '/') { 'Hello World!' }
|
5
|
-
SPAN " | "
|
6
|
-
Link(to: '/welcome') { 'Welcome!' }
|
7
|
-
end
|
8
|
-
end
|
1
|
+
class NavigationLinks < LucidComponent::Base
|
2
|
+
render do
|
3
|
+
P do
|
4
|
+
Link(to: '/') { 'Hello World!' }
|
5
|
+
SPAN " | "
|
6
|
+
Link(to: '/welcome') { 'Welcome!' }
|
7
|
+
end
|
8
|
+
end
|
9
9
|
end
|
@@ -1,7 +1,7 @@
|
|
1
|
-
class NotFound404Component < LucidComponent::Base
|
2
|
-
render do
|
3
|
-
Isomorfeus.ssr_response_status = 404 # keep
|
4
|
-
P "Oops, page not found!"
|
5
|
-
NavigationLinks()
|
6
|
-
end
|
1
|
+
class NotFound404Component < LucidComponent::Base
|
2
|
+
render do
|
3
|
+
Isomorfeus.ssr_response_status = 404 # keep
|
4
|
+
P "Oops, page not found!"
|
5
|
+
NavigationLinks()
|
6
|
+
end
|
7
7
|
end
|
@@ -0,0 +1,71 @@
|
|
1
|
+
Isomorfeus.load_configuration(File.expand_path(File.join(__dir__, '..', '..', 'config')))
|
2
|
+
|
3
|
+
class <%= roda_app_class %> < Roda
|
4
|
+
extend Isomorfeus::Transport::Middlewares
|
5
|
+
include Isomorfeus::PreactViewHelper
|
6
|
+
|
7
|
+
use_isomorfeus_middlewares
|
8
|
+
|
9
|
+
plugin :public, root: 'public', gzip: true
|
10
|
+
|
11
|
+
@@templates = {}
|
12
|
+
@@templates_path = File.expand_path(File.join(__dir__, '..', 'layouts'))
|
13
|
+
|
14
|
+
def locale
|
15
|
+
env.http_accept_language.preferred_language_from(Isomorfeus.available_locales) ||
|
16
|
+
env.http_accept_language.compatible_language_from(Isomorfeus.available_locales) ||
|
17
|
+
Isomorfeus.locale
|
18
|
+
end
|
19
|
+
|
20
|
+
def page_content(env, location)
|
21
|
+
if Isomorfeus.development?
|
22
|
+
req = Rack::Request.new(env)
|
23
|
+
skip_ssr = req.params.key?("skip_ssr") ? true : false
|
24
|
+
else
|
25
|
+
skip_ssr = false
|
26
|
+
end
|
27
|
+
mount_component('<%= app_class %>',{ location_host: env['HTTP_HOST'], location: location, locale: locale }, 'ssr.js', skip_ssr: skip_ssr)
|
28
|
+
end
|
29
|
+
|
30
|
+
def render(template_name, locals: {})
|
31
|
+
@@templates.delete(template_name) if Isomorfeus.development? # cause reloading of template in development environment
|
32
|
+
unless @@templates.key?(template_name)
|
33
|
+
@@templates[template_name] = Iodine::Mustache.new(File.join(@@templates_path, "#{template_name}.mustache"))
|
34
|
+
end
|
35
|
+
@@templates[template_name].render(locals)
|
36
|
+
end
|
37
|
+
|
38
|
+
route do |r|
|
39
|
+
r.root do
|
40
|
+
content = page_content(env, '/')
|
41
|
+
response.status = ssr_response_status
|
42
|
+
render('web', locals: { content: content, script_tag: script_tag('web.js'), ssr_styles: ssr_styles, title: 'Welcome to <%= app_class %>' })
|
43
|
+
end
|
44
|
+
|
45
|
+
r.public
|
46
|
+
|
47
|
+
r.get 'favicon.ico' do
|
48
|
+
r.public
|
49
|
+
end
|
50
|
+
|
51
|
+
r.get 'robots.txt' do
|
52
|
+
r.public
|
53
|
+
end
|
54
|
+
|
55
|
+
unless Isomorfeus.production?
|
56
|
+
r.on 'mail_preview', String do |component_name|
|
57
|
+
component_class = component_name.camelize
|
58
|
+
props = { location_host: env['HTTP_HOST'], location: '/mail_preview', locale: locale }.merge(r.params)
|
59
|
+
content = mount_component(component_class, props, 'mail_components.js')
|
60
|
+
response.status = ssr_response_status
|
61
|
+
render('mail_preview', locals: { content: content, component_class: component_class, ssr_styles: ssr_styles })
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
65
|
+
r.get do
|
66
|
+
content = page_content(env, env['PATH_INFO'])
|
67
|
+
response.status = ssr_response_status
|
68
|
+
render('web', locals: { content: content, script_tag: script_tag('web.js'), ssr_styles: ssr_styles, title: 'Welcome to <%= app_class %>' })
|
69
|
+
end
|
70
|
+
end
|
71
|
+
end
|
@@ -1,22 +1,19 @@
|
|
1
|
-
ENV['NODE_PATH'] = File.join(File.expand_path('..', __dir__), 'node_modules')
|
2
|
-
ENV['RACK_ENV'] = 'test'
|
3
|
-
|
4
|
-
require 'rspec'
|
5
|
-
require 'rspec/expectations'
|
6
|
-
require 'isomorfeus-puppetmaster'
|
7
|
-
require_relative '
|
8
|
-
|
9
|
-
Isomorfeus.zeitwerk.setup
|
10
|
-
Isomorfeus.zeitwerk.eager_load
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
Isomorfeus::Puppetmaster.
|
15
|
-
Isomorfeus::Puppetmaster.
|
16
|
-
|
17
|
-
|
18
|
-
Isomorfeus::Puppetmaster
|
19
|
-
|
20
|
-
RSpec.configure do |config|
|
21
|
-
config.include Isomorfeus::Puppetmaster::DSL
|
22
|
-
end
|
1
|
+
ENV['NODE_PATH'] = File.join(File.expand_path('..', __dir__), 'node_modules')
|
2
|
+
ENV['RACK_ENV'] = 'test'
|
3
|
+
require_relative '../app_loader'
|
4
|
+
require 'rspec'
|
5
|
+
require 'rspec/expectations'
|
6
|
+
require 'isomorfeus-puppetmaster'
|
7
|
+
require_relative '../app/server/<%= roda_app_path %>'
|
8
|
+
|
9
|
+
Isomorfeus.zeitwerk.setup
|
10
|
+
Isomorfeus.zeitwerk.eager_load
|
11
|
+
|
12
|
+
Isomorfeus::Puppetmaster.download_path = File.join(Dir.pwd, 'download_path_tmp')
|
13
|
+
Isomorfeus::Puppetmaster.driver = :chromium
|
14
|
+
Isomorfeus::Puppetmaster.app = <%= roda_app_class %>
|
15
|
+
Isomorfeus::Puppetmaster.boot_app
|
16
|
+
|
17
|
+
RSpec.configure do |config|
|
18
|
+
config.include Isomorfeus::Puppetmaster::DSL
|
19
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>{{ title }}</title>
|
5
|
+
<meta charset="utf-8"/>
|
6
|
+
<meta name="viewport" content="width=device-width, initial-scale=1">
|
7
|
+
<style id="jss-server-side" type="text/css">
|
8
|
+
{{& ssr_styles }}
|
9
|
+
</style>
|
10
|
+
{{& script_tag }}
|
11
|
+
</head>
|
12
|
+
<body>
|
13
|
+
{{& content }}
|
14
|
+
</body>
|
15
|
+
</html>
|
@@ -1,13 +1,13 @@
|
|
1
|
-
require 'spec_helper'
|
2
|
-
|
3
|
-
RSpec.describe '
|
4
|
-
it 'and opal code can be executed in the browser' do
|
5
|
-
doc = visit('/')
|
6
|
-
expect(doc.evaluate_script('1 + 4')).to eq(5)
|
7
|
-
expect(doc.evaluate_script('typeof Opal')).to include('object')
|
8
|
-
result = doc.evaluate_ruby do
|
9
|
-
1 + 5
|
10
|
-
end
|
11
|
-
expect(result).to eq(6)
|
12
|
-
end
|
1
|
+
require 'spec_helper'
|
2
|
+
|
3
|
+
RSpec.describe 'isomorfeus compiled successfully' do
|
4
|
+
it 'and opal code can be executed in the browser' do
|
5
|
+
doc = visit('/')
|
6
|
+
expect(doc.evaluate_script('1 + 4')).to eq(5)
|
7
|
+
expect(doc.evaluate_script('typeof Opal')).to include('object')
|
8
|
+
result = doc.evaluate_ruby do
|
9
|
+
1 + 5
|
10
|
+
end
|
11
|
+
expect(result).to eq(6)
|
12
|
+
end
|
13
13
|
end
|
@@ -1,6 +1,6 @@
|
|
1
|
-
class WelcomeComponent < LucidComponent::Base
|
2
|
-
render do
|
3
|
-
DIV "Welcome!"
|
4
|
-
NavigationLinks()
|
5
|
-
end
|
1
|
+
class WelcomeComponent < LucidComponent::Base
|
2
|
+
render do
|
3
|
+
DIV "Welcome!"
|
4
|
+
NavigationLinks()
|
5
|
+
end
|
6
6
|
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
module Isomorfeus
|
2
|
+
module Installer
|
3
|
+
module TestAppFiles
|
4
|
+
extend Isomorfeus::Installer::DSL
|
5
|
+
|
6
|
+
class << self
|
7
|
+
def execute
|
8
|
+
copy_test_app_files if Isomorfeus::Installer.source_dir
|
9
|
+
end
|
10
|
+
|
11
|
+
def copy_test_app_files
|
12
|
+
Dir.glob("#{Isomorfeus::Installer.source_dir}/**/*").each do |file|
|
13
|
+
if File.file?(file)
|
14
|
+
target_file = file[(Isomorfeus::Installer.source_dir.size+1)..-1]
|
15
|
+
target_dir = File.dirname(target_file)
|
16
|
+
Dir.mkdir(target_dir) unless Dir.exist?(target_dir)
|
17
|
+
copy_file(file, target_file)
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|