frails 0.1.0 → 0.3.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +3 -0
- data/.rubocop.yml +1 -3
- data/Gemfile +12 -1
- data/Gemfile.lock +101 -33
- data/README.md +166 -16
- data/bin/test +5 -0
- data/frails.gemspec +5 -8
- data/index.js +35 -0
- data/lib/frails.rb +17 -13
- data/lib/frails/component.rb +11 -0
- data/lib/frails/component/abstract_component.rb +58 -0
- data/lib/frails/component/component_renderer.rb +74 -0
- data/lib/frails/component/plain_component.rb +19 -0
- data/lib/frails/component/react_component.rb +17 -0
- data/lib/frails/component/react_component_renderer.rb +78 -0
- data/lib/frails/component/renderer_concerns.rb +36 -0
- data/lib/frails/dev_server.rb +2 -2
- data/lib/frails/dev_server_proxy.rb +3 -10
- data/lib/frails/helper.rb +73 -6
- data/lib/frails/log_subscriber.rb +35 -0
- data/lib/frails/manifest.rb +40 -3
- data/lib/frails/manifest_manager.rb +22 -0
- data/lib/frails/monkey/action_view/abstract_renderer.rb +54 -0
- data/lib/frails/monkey/action_view/partial_renderer.rb +50 -0
- data/lib/frails/monkey/action_view/renderer.rb +38 -0
- data/lib/frails/monkey/action_view/template_renderer.rb +24 -0
- data/lib/frails/railtie.rb +18 -14
- data/lib/frails/version.rb +1 -1
- data/lib/tasks/frails.rake +31 -0
- data/package.json +16 -0
- data/package/components.js +47 -0
- data/package/side_load.js +25 -0
- data/yarn.lock +80 -0
- metadata +34 -45
- data/lib/frails/instance.rb +0 -11
- data/lib/frails/server_manifest.rb +0 -7
data/lib/tasks/frails.rake
CHANGED
@@ -1,5 +1,7 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'open3'
|
4
|
+
|
3
5
|
install_template_path = File.expand_path('../install/template.rb', __dir__).freeze
|
4
6
|
bin_path = ENV['BUNDLE_BIN'] || './bin'
|
5
7
|
|
@@ -8,4 +10,33 @@ namespace :frails do
|
|
8
10
|
task :install do
|
9
11
|
exec "#{RbConfig.ruby} #{bin_path}/rails app:template LOCATION=#{install_template_path}"
|
10
12
|
end
|
13
|
+
|
14
|
+
desc 'Compile JavaScript packs using webpack for production with digests'
|
15
|
+
task compile: :environment do
|
16
|
+
puts 'Compiling Webpack...'
|
17
|
+
|
18
|
+
ENV['RAILS_ENV'] ||= 'development'
|
19
|
+
env = {
|
20
|
+
'RAILS_ASSET_HOST' => ActionController::Base.helpers.compute_asset_host,
|
21
|
+
'RAILS_RELATIVE_URL_ROOT' => ActionController::Base.relative_url_root
|
22
|
+
}
|
23
|
+
|
24
|
+
stdout, sterr, status = Open3.capture3(env, "yarn webpack --env #{ENV['RAILS_ENV']}")
|
25
|
+
|
26
|
+
if sterr == '' && status.success?
|
27
|
+
puts 'Frails successfully compiled 🎉'
|
28
|
+
else
|
29
|
+
puts "Frails failed compilation\n#{sterr}\n#{stdout}"
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
# Compile packs after we've compiled all other assets during precompilation
|
35
|
+
if Rake::Task.task_defined?('assets:precompile')
|
36
|
+
Rake::Task['assets:precompile'].enhance do
|
37
|
+
Rake::Task['frails:compile'].invoke
|
38
|
+
end
|
39
|
+
else
|
40
|
+
Rake::Task.define_task('assets:precompile' => ['frails:compile'])
|
41
|
+
Rake::Task.define_task('assets:clean') # null task just so Heroku builds don't fail
|
11
42
|
end
|
data/package.json
ADDED
@@ -0,0 +1,16 @@
|
|
1
|
+
{
|
2
|
+
"name": "frails",
|
3
|
+
"version": "0.3.0",
|
4
|
+
"description": "A Modern [F]ront End on [Rails] and Webpack",
|
5
|
+
"main": "index.js",
|
6
|
+
"files": [
|
7
|
+
"package"
|
8
|
+
],
|
9
|
+
"repository": "git@github.com:joelmoss/frails.git",
|
10
|
+
"author": "Joel Moss <joel@developwithstyle.com>",
|
11
|
+
"license": "MIT",
|
12
|
+
"dependencies": {
|
13
|
+
"glob": "^7.1.4",
|
14
|
+
"lodash.has": "^4.5.2"
|
15
|
+
}
|
16
|
+
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
const glob = require('glob')
|
2
|
+
const path = require('path')
|
3
|
+
const fs = require('fs')
|
4
|
+
|
5
|
+
const appPath = path.join(process.cwd(), 'app')
|
6
|
+
|
7
|
+
// Build entry points for HTML based components (components with an index.html.erb and index.css).
|
8
|
+
//
|
9
|
+
// NOTE: Adding new files will require a rebuild!
|
10
|
+
const buildComponents = () => {
|
11
|
+
const result = {}
|
12
|
+
|
13
|
+
// Find HTML partials and add its corresponding index.css as an entry point if it exists.
|
14
|
+
glob.sync(path.join(appPath, 'components/**/_index.html.erb')).forEach(paf => {
|
15
|
+
paf = paf.replace('_index.html.erb', 'index.css')
|
16
|
+
|
17
|
+
if (!fs.existsSync(paf)) return
|
18
|
+
|
19
|
+
const namespace = path.relative(path.join(appPath), path.dirname(paf))
|
20
|
+
const name = path.join(namespace, path.basename(paf, path.extname(paf)))
|
21
|
+
|
22
|
+
result[name] = paf
|
23
|
+
})
|
24
|
+
|
25
|
+
// Find components with no JSX and HTML index files, and add its corresponding index.css as an
|
26
|
+
// entry point if it exists. These will be components that render from within the Ruby class
|
27
|
+
// itself.
|
28
|
+
glob.sync(path.join(appPath, 'components/**/*_component.rb')).forEach(paf => {
|
29
|
+
css_paf = paf.replace('_component.rb', '/index.css')
|
30
|
+
html_paf = paf.replace('_component.rb', '/_index.html.erb')
|
31
|
+
jsx_paf = paf.replace('_component.rb', '/index.entry.jsx')
|
32
|
+
|
33
|
+
// Ignore if we have a JSX or HTML file, or no CSS file.
|
34
|
+
if (fs.existsSync(jsx_paf) || fs.existsSync(html_paf) || !fs.existsSync(css_paf)) return
|
35
|
+
|
36
|
+
const namespace = path.relative(path.join(appPath), path.dirname(css_paf))
|
37
|
+
const name = path.join(namespace, path.basename(css_paf, path.extname(css_paf)))
|
38
|
+
|
39
|
+
result[name] = css_paf
|
40
|
+
})
|
41
|
+
|
42
|
+
return result
|
43
|
+
}
|
44
|
+
|
45
|
+
module.exports = {
|
46
|
+
entry: { ...buildComponents() }
|
47
|
+
}
|
@@ -0,0 +1,25 @@
|
|
1
|
+
const glob = require("glob");
|
2
|
+
const path = require("path");
|
3
|
+
const has = require("lodash.has");
|
4
|
+
|
5
|
+
const appPath = path.join(process.cwd(), "app");
|
6
|
+
|
7
|
+
// Entry points for side-loaded CSS and JS, which are any .css and .js files that exist alongside
|
8
|
+
// the view template. For example, a view template at /app/views/pages/show.html.erb could have a
|
9
|
+
// css file alongside it at /app/views/pages/show.css.
|
10
|
+
const build = () => {
|
11
|
+
const result = {};
|
12
|
+
|
13
|
+
glob.sync(path.join(appPath, "views/**/*.{css,js}")).forEach(paf => {
|
14
|
+
const namespace = path.relative(appPath, path.dirname(paf));
|
15
|
+
const name = path.join(namespace, path.basename(paf, path.extname(paf)));
|
16
|
+
|
17
|
+
has(result, name) ? result[name].push(paf) : (result[name] = [paf]);
|
18
|
+
});
|
19
|
+
|
20
|
+
return result;
|
21
|
+
};
|
22
|
+
|
23
|
+
module.exports = {
|
24
|
+
entry: { ...build() }
|
25
|
+
};
|
data/yarn.lock
ADDED
@@ -0,0 +1,80 @@
|
|
1
|
+
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
|
2
|
+
# yarn lockfile v1
|
3
|
+
|
4
|
+
|
5
|
+
balanced-match@^1.0.0:
|
6
|
+
version "1.0.0"
|
7
|
+
resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767"
|
8
|
+
integrity sha1-ibTRmasr7kneFk6gK4nORi1xt2c=
|
9
|
+
|
10
|
+
brace-expansion@^1.1.7:
|
11
|
+
version "1.1.11"
|
12
|
+
resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd"
|
13
|
+
integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==
|
14
|
+
dependencies:
|
15
|
+
balanced-match "^1.0.0"
|
16
|
+
concat-map "0.0.1"
|
17
|
+
|
18
|
+
concat-map@0.0.1:
|
19
|
+
version "0.0.1"
|
20
|
+
resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
|
21
|
+
integrity sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=
|
22
|
+
|
23
|
+
fs.realpath@^1.0.0:
|
24
|
+
version "1.0.0"
|
25
|
+
resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f"
|
26
|
+
integrity sha1-FQStJSMVjKpA20onh8sBQRmU6k8=
|
27
|
+
|
28
|
+
glob@^7.1.4:
|
29
|
+
version "7.1.4"
|
30
|
+
resolved "https://registry.yarnpkg.com/glob/-/glob-7.1.4.tgz#aa608a2f6c577ad357e1ae5a5c26d9a8d1969255"
|
31
|
+
integrity sha512-hkLPepehmnKk41pUGm3sYxoFs/umurYfYJCerbXEyFIWcAzvpipAgVkBqqT9RBKMGjnq6kMuyYwha6csxbiM1A==
|
32
|
+
dependencies:
|
33
|
+
fs.realpath "^1.0.0"
|
34
|
+
inflight "^1.0.4"
|
35
|
+
inherits "2"
|
36
|
+
minimatch "^3.0.4"
|
37
|
+
once "^1.3.0"
|
38
|
+
path-is-absolute "^1.0.0"
|
39
|
+
|
40
|
+
inflight@^1.0.4:
|
41
|
+
version "1.0.6"
|
42
|
+
resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9"
|
43
|
+
integrity sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=
|
44
|
+
dependencies:
|
45
|
+
once "^1.3.0"
|
46
|
+
wrappy "1"
|
47
|
+
|
48
|
+
inherits@2:
|
49
|
+
version "2.0.4"
|
50
|
+
resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
|
51
|
+
integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
|
52
|
+
|
53
|
+
lodash.has@^4.5.2:
|
54
|
+
version "4.5.2"
|
55
|
+
resolved "https://registry.yarnpkg.com/lodash.has/-/lodash.has-4.5.2.tgz#d19f4dc1095058cccbe2b0cdf4ee0fe4aa37c862"
|
56
|
+
integrity sha1-0Z9NwQlQWMzL4rDN9O4P5Ko3yGI=
|
57
|
+
|
58
|
+
minimatch@^3.0.4:
|
59
|
+
version "3.0.4"
|
60
|
+
resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
|
61
|
+
integrity sha512-yJHVQEhyqPLUTgt9B83PXu6W3rx4MvvHvSUvToogpwoGDOUQ+yDrR0HRot+yOCdCO7u4hX3pWft6kWBBcqh0UA==
|
62
|
+
dependencies:
|
63
|
+
brace-expansion "^1.1.7"
|
64
|
+
|
65
|
+
once@^1.3.0:
|
66
|
+
version "1.4.0"
|
67
|
+
resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1"
|
68
|
+
integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E=
|
69
|
+
dependencies:
|
70
|
+
wrappy "1"
|
71
|
+
|
72
|
+
path-is-absolute@^1.0.0:
|
73
|
+
version "1.0.1"
|
74
|
+
resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f"
|
75
|
+
integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18=
|
76
|
+
|
77
|
+
wrappy@1:
|
78
|
+
version "1.0.2"
|
79
|
+
resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f"
|
80
|
+
integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=
|
metadata
CHANGED
@@ -1,85 +1,57 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: frails
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Joel Moss
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2019-
|
11
|
+
date: 2019-10-01 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: nokogiri
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
17
|
- - ">="
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.10.4
|
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:
|
26
|
+
version: 1.10.4
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: rack-proxy
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 0.6.5
|
34
34
|
type: :runtime
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - ">="
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
41
|
-
- !ruby/object:Gem::Dependency
|
42
|
-
name: bundler
|
43
|
-
requirement: !ruby/object:Gem::Requirement
|
44
|
-
requirements:
|
45
|
-
- - "~>"
|
46
|
-
- !ruby/object:Gem::Version
|
47
|
-
version: '2.0'
|
48
|
-
type: :development
|
49
|
-
prerelease: false
|
50
|
-
version_requirements: !ruby/object:Gem::Requirement
|
51
|
-
requirements:
|
52
|
-
- - "~>"
|
53
|
-
- !ruby/object:Gem::Version
|
54
|
-
version: '2.0'
|
55
|
-
- !ruby/object:Gem::Dependency
|
56
|
-
name: minitest
|
57
|
-
requirement: !ruby/object:Gem::Requirement
|
58
|
-
requirements:
|
59
|
-
- - "~>"
|
60
|
-
- !ruby/object:Gem::Version
|
61
|
-
version: '5.0'
|
62
|
-
type: :development
|
63
|
-
prerelease: false
|
64
|
-
version_requirements: !ruby/object:Gem::Requirement
|
65
|
-
requirements:
|
66
|
-
- - "~>"
|
67
|
-
- !ruby/object:Gem::Version
|
68
|
-
version: '5.0'
|
40
|
+
version: 0.6.5
|
69
41
|
- !ruby/object:Gem::Dependency
|
70
|
-
name:
|
42
|
+
name: rails
|
71
43
|
requirement: !ruby/object:Gem::Requirement
|
72
44
|
requirements:
|
73
|
-
- - "
|
45
|
+
- - ">="
|
74
46
|
- !ruby/object:Gem::Version
|
75
|
-
version: '
|
76
|
-
type: :
|
47
|
+
version: '6.0'
|
48
|
+
type: :runtime
|
77
49
|
prerelease: false
|
78
50
|
version_requirements: !ruby/object:Gem::Requirement
|
79
51
|
requirements:
|
80
|
-
- - "
|
52
|
+
- - ">="
|
81
53
|
- !ruby/object:Gem::Version
|
82
|
-
version: '
|
54
|
+
version: '6.0'
|
83
55
|
description:
|
84
56
|
email:
|
85
57
|
- joel@developwithstyle.com
|
@@ -98,18 +70,35 @@ files:
|
|
98
70
|
- Rakefile
|
99
71
|
- bin/console
|
100
72
|
- bin/setup
|
73
|
+
- bin/test
|
101
74
|
- frails.gemspec
|
75
|
+
- index.js
|
102
76
|
- lib/frails.rb
|
77
|
+
- lib/frails/component.rb
|
78
|
+
- lib/frails/component/abstract_component.rb
|
79
|
+
- lib/frails/component/component_renderer.rb
|
80
|
+
- lib/frails/component/plain_component.rb
|
81
|
+
- lib/frails/component/react_component.rb
|
82
|
+
- lib/frails/component/react_component_renderer.rb
|
83
|
+
- lib/frails/component/renderer_concerns.rb
|
103
84
|
- lib/frails/dev_server.rb
|
104
85
|
- lib/frails/dev_server_proxy.rb
|
105
86
|
- lib/frails/helper.rb
|
106
|
-
- lib/frails/
|
87
|
+
- lib/frails/log_subscriber.rb
|
107
88
|
- lib/frails/manifest.rb
|
89
|
+
- lib/frails/manifest_manager.rb
|
90
|
+
- lib/frails/monkey/action_view/abstract_renderer.rb
|
91
|
+
- lib/frails/monkey/action_view/partial_renderer.rb
|
92
|
+
- lib/frails/monkey/action_view/renderer.rb
|
93
|
+
- lib/frails/monkey/action_view/template_renderer.rb
|
108
94
|
- lib/frails/railtie.rb
|
109
|
-
- lib/frails/server_manifest.rb
|
110
95
|
- lib/frails/version.rb
|
111
96
|
- lib/install/template.rb
|
112
97
|
- lib/tasks/frails.rake
|
98
|
+
- package.json
|
99
|
+
- package/components.js
|
100
|
+
- package/side_load.js
|
101
|
+
- yarn.lock
|
113
102
|
homepage: https://github.com/joelmoss/frails
|
114
103
|
licenses: []
|
115
104
|
metadata:
|
@@ -135,5 +124,5 @@ requirements: []
|
|
135
124
|
rubygems_version: 3.0.3
|
136
125
|
signing_key:
|
137
126
|
specification_version: 4
|
138
|
-
summary: A Modern
|
127
|
+
summary: A Modern [F]ront End on [Rails] and Webpack
|
139
128
|
test_files: []
|
data/lib/frails/instance.rb
DELETED