hyper-backend-roda 0.0.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA256:
3
+ metadata.gz: 0cd9bc52929209476172104bb8601e5409eca8856ee856e7170293357ed5f97c
4
+ data.tar.gz: 4038401652c1c8d949ab8a6ceb4a011a5647753b86a95472a44077809156cce2
5
+ SHA512:
6
+ metadata.gz: 255d3ab9bb86ec75dbdc1ec992b02dc97ec4915fb97221c4bc744c377c32308a5fc3c6e9d67ce4e9ad4cd8134be91cef0af1fcd4f54e089fd5d050200bb9de55
7
+ data.tar.gz: b274f36b728933cac3f91a70ef0fc4d2ee16154c8f9d4827f16038dcd85655e770fa1257e08d4aef827f84c47f855caebab11d983ecdc672c7c3c72079a37358
data/Gemfile ADDED
@@ -0,0 +1 @@
1
+ gemspec
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2018 Jan Biedermann
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,18 @@
1
+ # hyper-be-roda
2
+
3
+ Server side configuration and helpers for using hyper-stack with roda
4
+
5
+ ## usage
6
+ `gem install hyper-backend-roda` - install the gem
7
+
8
+ `roda-hyper-it-make` - will setup a roda project with the necessary configuration
9
+
10
+ options:
11
+
12
+ `roda-hyper-it-make cordova` in addition to the web setup, install config for cordova
13
+
14
+ `roda-hyper-it-make react-native` in addition to the web setup, install config for react-native (not implemented yet)
15
+
16
+ ## community
17
+
18
+ Lets meet in the ruby-hyperloop gitter channel.
@@ -0,0 +1,144 @@
1
+ #!/usr/bin/env ruby_executable_hooks
2
+ #
3
+ # http://roda.jeremyevans.net/rdoc/files/doc/conventions_rdoc.html
4
+
5
+ # this helps to find out which gems and versions are already there
6
+ require 'fileutils'
7
+ require 'json'
8
+ require 'bundler'
9
+ Bundler.require if File.exist?('Gemfile')
10
+
11
+ cordova = ARGV[1] == 'cordova'
12
+ # react_native = ARGV[1] == 'react-native'
13
+
14
+ # helper methods
15
+ def mkdir(dir_name)
16
+ if Dir.exist?(dir_name)
17
+ puts "Directory #{dir_name} exists, very nice."
18
+ else
19
+ puts "Creating directory: #{dir_name}"
20
+ Dir.mkdir(dir_name)
21
+ end
22
+ end
23
+
24
+ def copy(filename, source_dir, target_dir)
25
+ target_path = File.join(target_dir, filename)
26
+ source_path = File.join(File.dirname(__FILE__),'..', source_dir, filename)
27
+ if File.exist?(target_path)
28
+ puts "File #{target_path} exists, not overwriting, you may check #{source_path} for necessary adjustments."
29
+ else
30
+ puts "Creating file: #{target_path}"
31
+ FileUtils.cp(source_path, target_path)
32
+ end
33
+ end
34
+
35
+ def package_json
36
+ if File.exist?('package.json')
37
+ # read existing package.json
38
+ target = JSON.parse(File.read('package.json'))
39
+ # read wanted config
40
+ source = JSON.parse(File.read(File.join(File.dirname(__FILE__),'..', 'config', 'package.json')))
41
+ # merge
42
+ target.merge!(source)
43
+ # write
44
+ File.write('package.json', JSON.pretty_generate(target, indent: ' ', object_nl: "\n", array_nl: "\n"))
45
+ else
46
+ copy('package.json', 'config', '.')
47
+ end
48
+ end
49
+
50
+ def gemfile
51
+ #
52
+ es6 = "Please make sure the 'es6_import_export' branch is used for opal"
53
+ ulysses = "Please make sure the 'ulysses' branch is used for hyper-* gems"
54
+ # gem lines
55
+ c_lexer = "\ngem 'c_lexer'"
56
+ opal = "\ngem 'opal', github: 'janbiedermann/opal', branch: 'es6_import_export'"
57
+ auto = "\ngem 'opal-autoloader'"
58
+ owcs = "\ngem 'opal-webpack-compile-server', '~> 0.1.8', require: false"
59
+ store = "\ngem 'hyper-store', github: 'janbiedermann/hyper-store', branch: 'ulysses'"
60
+ component = "\ngem 'hyper-react', github: 'janbiedermann/hyper-react', branch: 'ulysses'"
61
+
62
+ if File.exist?('Gemfile')
63
+ content = File.read('Gemfile')
64
+
65
+ content << c_lexer unless defined?(CLexer)
66
+ unless defined?(Opal)
67
+ content << opal
68
+ content << owcs
69
+ else
70
+ puts es6
71
+ end
72
+ unless defined?(HyperStore)
73
+ content << store
74
+ else
75
+ puts
76
+ end
77
+ unless defined?(Hyperloop::Component)
78
+ content << component
79
+ else
80
+ puts ulysses
81
+ end
82
+ content << "\n"
83
+ File.write('Gemfile', content)
84
+ else
85
+ require 'bundler/cli'
86
+ require 'bundler/cli/init'
87
+ Bundler::CLI::Init.new({}).run
88
+ content = File.read('Gemfile')
89
+ content << "\ngem 'roda'"
90
+ content << "\ngem 'rake'"
91
+ content << "\ngem 'puma'"
92
+ content << c_lexer
93
+ content << opal
94
+ content << auto
95
+ content << owcs
96
+ content << store
97
+ content << component
98
+ content << "\n"
99
+ File.write('Gemfile', content)
100
+ end
101
+ end
102
+
103
+ # create directories for configuration and code
104
+ mkdir('assets')
105
+ mkdir('assets/stylesheets')
106
+ mkdir('public')
107
+ mkdir('webpack')
108
+ mkdir('hyperloop')
109
+ mkdir('hyperloop/components')
110
+ mkdir('hyperloop/models')
111
+ mkdir('hyperloop/stores')
112
+ puts
113
+ puts 'Webpack config:'
114
+ copy('production.js', 'config/webpack', 'webpack')
115
+ copy('development.js', 'config/webpack', 'webpack')
116
+ copy('test.js', 'config/webpack', 'webpack')
117
+ copy('cordova.js', 'config/webpack', 'webpack') if cordova
118
+ # copy('react-native.js', 'config/webpack', 'webpack') if react_native
119
+ puts
120
+ puts 'Application entry points:'
121
+ copy('app.js', 'config/entry', 'assets')
122
+ copy('cordova.js', 'config/entry', 'assets') if cordova
123
+ # copy('react-native.js', 'config/entry', 'assets') if react_native
124
+ puts
125
+ puts 'Procfile:'
126
+ copy('Procfile', 'config', '.')
127
+ puts
128
+ puts 'package.json:'
129
+ package_json
130
+ puts
131
+ puts 'Gemfile:'
132
+ gemfile
133
+ puts
134
+ puts 'Hyperloop loader:'
135
+ copy('hyperloop_webpack_loader.rb', 'config/hyperloop', 'hyperloop')
136
+ puts
137
+ puts 'Things to do:'
138
+ puts 'Please run:'
139
+ puts '1. yarn install'
140
+ puts '2. bundle install'
141
+ puts '3. Check Procfile if it starts the server you want'
142
+ puts '4. Add necessary requires to the server entry, e.g. config.ru:'
143
+ puts " require 'bundler'"
144
+ puts ' Bundler.require'
data/config/Procfile ADDED
@@ -0,0 +1,2 @@
1
+ web: bundle exec puma
2
+ webpack_dev: yarn run start
@@ -0,0 +1,48 @@
1
+ // import stylesheets
2
+ // import '../assets/stylesheets/app.scss';
3
+
4
+ // basics for hyperloop
5
+ import React from 'react';
6
+ import ReactDOM from 'react-dom';
7
+ import * as History from 'history';
8
+ import * as ReactRouter from 'react-router';
9
+ import * as ReactRouterDOM from 'react-router-dom';
10
+
11
+ // for opal/hyperloop modules to find React and others they must explicitly be saved
12
+ // to the global space, otherwise webpack will encapsulate them locally here
13
+ global.React = React;
14
+ global.ReactDOM = ReactDOM;
15
+ global.History = History;
16
+ global.ReactRouter = ReactRouter;
17
+ global.ReactRouterDOM = ReactRouterDOM;
18
+
19
+ // for lazy loading
20
+ // import ReactLoadable from 'react-loadable';
21
+ // global.ReactLoadable = ReactLoadable;
22
+
23
+ // example for importing a component framework
24
+ // import * as Sem from 'semantic-ui-react';
25
+ // global.Sem = Sem;
26
+
27
+ // sometime accessing the .default is necessary
28
+ // import * as React_TimeAgo from 'react-timeago';
29
+ // global.ReactTimeAgo = React_TimeAgo.default;
30
+
31
+ // example for pusher
32
+ // import Pusher from 'pusher-js';
33
+ // global.Pusher = Pusher;
34
+
35
+ // all the hyperloop requires go in this file
36
+ // it needs to be imported first
37
+ import init_app from 'hyperloop_webpack_loader.rb';
38
+ // then it needs to initalized, this will register the available opal ruby modules
39
+ init_app();
40
+ // then it needs to be loaded, this will actually run the code and start the application
41
+ Opal.require('hyperloop_webpack_loader');
42
+
43
+ // this is required for hot reloading to work
44
+ if (module.hot) {
45
+ module.hot.accept('./app.js', function() {
46
+ console.log('Accepting the updated app_packs module!');
47
+ })
48
+ }
@@ -0,0 +1,56 @@
1
+ // import stylesheets
2
+ import '../assets/stylesheets/app.scss';
3
+
4
+ // basics for hyperloop
5
+ import React from 'react';
6
+ import ReactDOM from 'react-dom';
7
+ import * as History from 'history';
8
+ import * as ReactRouter from 'react-router';
9
+ import * as ReactRouterDOM from 'react-router-dom';
10
+
11
+ // for opal/hyperloop modules to find React and others they must explicitly be saved
12
+ // to the global space, otherwise webpack will encapsulate them locally here
13
+ global.React = React;
14
+ global.ReactDOM = ReactDOM;
15
+ global.History = History;
16
+ global.ReactRouter = ReactRouter;
17
+ global.ReactRouterDOM = ReactRouterDOM;
18
+
19
+ // for lazy laoding
20
+ // import * as ReactRailsUJS from 'react_ujs';
21
+ // global.ReactLoadable = ReactLoadable;
22
+
23
+ // example for importing a component framework
24
+ // import * as Sem from 'semantic-ui-react';
25
+ // global.Sem = Sem;
26
+
27
+ // sometime accessing the .default is necessary
28
+ // import * as React_TimeAgo from 'react-timeago';
29
+ // global.ReactTimeAgo = React_TimeAgo.default;
30
+
31
+ // example for pusher
32
+ // import Pusher from 'pusher-js';
33
+ // global.Pusher = Pusher;
34
+
35
+ // set global Cordova, this allows for:
36
+ // if `Cordova == true`
37
+ // # ON CORDOVA APP
38
+ // else
39
+ // # ON WEBSITE
40
+ // end
41
+ global.Cordova = true;
42
+
43
+ // all the hyperloop requires go in this file
44
+ // it needs to be imported first
45
+ import init_app from 'hyperloop_webpack_loader.rb';
46
+ // then it needs to initalized, this will register the available opal ruby modules
47
+ init_app();
48
+ // then it needs to be loaded, this will actually run the code and start the application
49
+ Opal.require('hyperloop_webpack_loader');
50
+
51
+ // this is required for hot reloading to work
52
+ if (module.hot) {
53
+ module.hot.accept('./app.js', function() {
54
+ console.log('Accepting the updated app_packs module!');
55
+ })
56
+ }
@@ -0,0 +1,14 @@
1
+ require 'opal'
2
+ require 'browser' # CLIENT ONLY
3
+ require 'browser/delay' # CLIENT ONLY
4
+ require 'opal-autoloader'
5
+ require 'hyper-store'
6
+ require 'hyper-react'
7
+ require 'react/auto-import'
8
+
9
+ require_tree 'stores'
10
+ require_tree 'models'
11
+ require_tree 'components'
12
+
13
+ # mount your top level component
14
+ # Hyperloop::TopLevel.on_ready_mount(App)
@@ -0,0 +1,37 @@
1
+ {
2
+ "engines": {
3
+ "node": "^10.4.0",
4
+ "yarn": "^1.7.0"
5
+ },
6
+ "dependencies": {
7
+ "history": "^4.7.2",
8
+ "react": "^16.3.2",
9
+ "react-dom": "^16.3.2",
10
+ "react-loadable": "^5.4.0",
11
+ "react-router": "^4.2.0",
12
+ "react-router-dom": "^4.2.2"
13
+ },
14
+ "scripts": {
15
+ "test": "bundle exec opal-webpack-compile-server kill; bundle exec opal-webpack-compile-server && webpack --config=webpack/test.js; bundle exec opal-webpack-compile-server kill",
16
+ "watch": "bundle exec opal-webpack-compile-server kill; bundle exec opal-webpack-compile-server && webpack --watch; bundle exec opal-webpack-compile-server kill",
17
+ "start": "bundle exec opal-webpack-compile-server kill; bundle exec opal-webpack-compile-server && bundle exec webpack-serve --config ./webpack/development.js; bundle exec opal-webpack-compile-server kill",
18
+ "build": "bundle exec opal-webpack-compile-server kill; bundle exec opal-webpack-compile-server && webpack --config=webpack/production.js; bundle exec opal-webpack-compile-server kill",
19
+ "cordova": "bundle exec opal-webpack-compile-server kill; bundle exec opal-webpack-compile-server && webpack --config=webpack/cordova.js; bundle exec opal-webpack-compile-server kill"
20
+ },
21
+ "devDependencies": {
22
+ "chokidar": "^2.0.3",
23
+ "compression-webpack-plugin": "^1.1.11",
24
+ "css-loader": "^0.28.11",
25
+ "file-loader": "^1.1.11",
26
+ "json-stringify-safe": "^5.0.1",
27
+ "node-sass": "^4.9.0",
28
+ "opal-webpack-loader": "^0.2.0",
29
+ "opal-webpack-resolver-plugin": "^0.1.0",
30
+ "sass-loader": "^7.0.3",
31
+ "style-loader": "^0.21.0",
32
+ "webpack": "^4.11.1",
33
+ "webpack-cli": "^3.0.2",
34
+ "webpack-manifest-plugin": "^2.0.3",
35
+ "webpack-serve": "^1.0.2"
36
+ }
37
+ }
@@ -0,0 +1,78 @@
1
+ const path = require('path');
2
+ const OpalWebpackResolverPlugin = require('opal-webpack-resolver-plugin');
3
+
4
+ module.exports = {
5
+ context: path.resolve(__dirname, '../..'),
6
+ mode: "production",
7
+ optimization: {
8
+ minimize: false
9
+ },
10
+ performance: {
11
+ maxAssetSize: 20000000,
12
+ maxEntrypointSize: 20000000
13
+ },
14
+ entry: {
15
+ cordova: './assets/cordova.js'
16
+ },
17
+ output: {
18
+ filename: 'app.js',
19
+ path: path.resolve(__dirname, '../cordova/www/js/app'),
20
+ publicPath: '/js/app/'
21
+ },
22
+ resolve: {
23
+ plugins: [
24
+ new OpalWebpackResolverPlugin('resolve', 'resolved')
25
+ ]
26
+ },
27
+ module: {
28
+ rules: [
29
+ {
30
+ test: /\.scss$/,
31
+ use: [
32
+ {
33
+ loader: "style-loader",
34
+ options: {
35
+ hmr: false
36
+ }
37
+ },
38
+ {
39
+ loader: "css-loader"
40
+ },
41
+ {
42
+ loader: "sass-loader",
43
+ options: {
44
+ includePath: [
45
+ path.resolve(__dirname, './assets')
46
+ ]
47
+ }
48
+ }
49
+ ]
50
+ },
51
+ {
52
+ test: /\.css$/,
53
+ use: [
54
+ 'style-loader',
55
+ 'css-loader'
56
+ ]
57
+ },
58
+ {
59
+ test: /\.(png|svg|jpg|gif)$/,
60
+ use: [
61
+ 'file-loader'
62
+ ]
63
+ },
64
+ {
65
+ test: /\.(woff|woff2|eot|ttf|otf)$/,
66
+ use: [
67
+ 'file-loader'
68
+ ]
69
+ },
70
+ {
71
+ test: /\.(rb|js.rb)$/,
72
+ use: [
73
+ 'opal-webpack-loader'
74
+ ]
75
+ }
76
+ ]
77
+ }
78
+ };
@@ -0,0 +1,163 @@
1
+ // require requirements used below
2
+ const path = require('path');
3
+ const webpack = require('webpack');
4
+ const chokidar = require('chokidar'); // for watching app/view
5
+ const stringify = require('json-stringify-safe');
6
+ const WebSocket = require('ws');
7
+ const OpalWebpackResolverPlugin = require('opal-webpack-resolver-plugin'); // to resolve ruby files
8
+
9
+ module.exports = {
10
+ context: path.resolve(__dirname, '..'),
11
+ mode: "development",
12
+ optimization: {
13
+ minimize: false // dont minimize in development, to speed up hot reloads
14
+ },
15
+ performance: {
16
+ maxAssetSize: 20000000, // hyperloop is a lot of code
17
+ maxEntrypointSize: 20000000
18
+ },
19
+ // use this or others below, disable for faster hot reloads
20
+ devtool: 'source-map', // this works well, good compromise between accuracy and performance
21
+ // devtool: 'cheap-eval-source-map', // less accurate
22
+ // devtool: 'inline-source-map', // slowest
23
+ // devtool: 'inline-cheap-source-map',
24
+ entry: {
25
+ app: ['./assets/app.js'], // entrypoint for hyperloop
26
+ // have to add 'webpack-hot-client/client' for each additional entry point for hot reloading to work
27
+ // website: ['webpack-hot-client/client', './assets/website.js'] // entrypoint for website
28
+ },
29
+ output: {
30
+ // webpack-serve keeps the output in memory
31
+ filename: '[name]_development.js',
32
+ path: path.resolve(__dirname, '../public/'),
33
+ publicPath: 'http://localhost:3035/'
34
+ },
35
+ resolve: {
36
+ plugins: [
37
+ // this makes it possible for webpack to find ruby files
38
+ new OpalWebpackResolverPlugin('resolve', 'resolved')
39
+ ]
40
+ },
41
+ plugins: [
42
+ // both for hot reloading
43
+ new webpack.NamedModulesPlugin(),
44
+ new webpack.HotModuleReplacementPlugin()
45
+ ],
46
+ module: {
47
+ rules: [
48
+ {
49
+ // loader for .scss files
50
+ // test means "test for for file endings"
51
+ test: /\.scss$/,
52
+ use: [
53
+ {
54
+ loader: "style-loader",
55
+ options: {
56
+ hmr: true
57
+ }
58
+ },
59
+ {
60
+ loader: "css-loader",
61
+ options: {
62
+ sourceMap: true, // set to false to speed up hot reloads
63
+ minimize: false // set to false to speed up hot reloads
64
+ }
65
+ },
66
+ {
67
+ loader: "sass-loader",
68
+ options: {
69
+ includePaths: [path.resolve(__dirname, '../assets')],
70
+ sourceMap: true // set to false to speed up hot reloads
71
+ }
72
+ }
73
+ ]
74
+ },
75
+ {
76
+ // loader for .css files
77
+ test: /\.css$/,
78
+ use: [
79
+ {
80
+ loader: "style-loader",
81
+ options: {
82
+ hmr: true
83
+ }
84
+ },
85
+ {
86
+ loader: "css-loader",
87
+ options: {
88
+ sourceMap: true, // set to false to speed up hot reloads
89
+ minimize: false // set to false to speed up hot reloads
90
+ }
91
+ }
92
+ ]
93
+ },
94
+ {
95
+ test: /\.(png|svg|jpg|gif)$/,
96
+ use: [
97
+ 'file-loader'
98
+ ]
99
+ },
100
+ {
101
+ test: /\.(woff|woff2|eot|ttf|otf)$/,
102
+ use: [
103
+ 'file-loader'
104
+ ]
105
+ },
106
+ {
107
+ // opal-webpack-loader will compile and include ruby files in the pack
108
+ test: /\.(rb|js.rb)$/,
109
+ use: [
110
+ 'opal-webpack-loader'
111
+ ]
112
+ }
113
+ ]
114
+ },
115
+ // configuration for webpack serve
116
+ serve: {
117
+ dev: {
118
+ publicPath: '/',
119
+ headers: {
120
+ 'Access-Control-Allow-Origin': '*'
121
+ },
122
+ watchOptions: {
123
+
124
+ }
125
+ },
126
+ hot: {
127
+ host: 'localhost',
128
+ port: '8081',
129
+ allEntries: true, // this doesn't seem to work
130
+ hmr: true
131
+ },
132
+ host: "localhost",
133
+ port: 3035,
134
+ content: path.resolve(__dirname, '../public'),
135
+ clipboard: false, // dont copy url to clipboard
136
+ open: false, // dont open browser
137
+ on: {
138
+ // this configuration is for triggering a hot reload for views
139
+ "listening": function (server) {
140
+ const socket = new WebSocket('ws://localhost:8081');
141
+ const watchPath = path.resolve(__dirname, '../views'); // adjust path here if needed
142
+ const options = {};
143
+ const watcher = chokidar.watch(watchPath, options);
144
+
145
+ watcher.on('change', () => {
146
+ const data = {
147
+ type: 'broadcast',
148
+ data: {
149
+ type: 'window-reload',
150
+ data: {},
151
+ },
152
+ };
153
+
154
+ socket.send(stringify(data));
155
+ });
156
+
157
+ server.server.on('close', () => {
158
+ watcher.close();
159
+ });
160
+ }
161
+ }
162
+ }
163
+ };
@@ -0,0 +1,86 @@
1
+ const path = require('path');
2
+ const OpalWebpackResolverPlugin = require('opal-webpack-resolver-plugin');
3
+ const CompressionPlugin = require("compression-webpack-plugin"); // for gzipping the packs
4
+ const ManifestPlugin = require('webpack-manifest-plugin'); // for generating the manifest
5
+
6
+ module.exports = {
7
+ context: path.resolve(__dirname, '..'),
8
+ mode: "production",
9
+ optimization: {
10
+ minimize: true // minimize
11
+ },
12
+ performance: {
13
+ maxAssetSize: 20000000, // hyperloop generates a lot of code
14
+ maxEntrypointSize: 20000000
15
+ },
16
+ entry: {
17
+ app: './assets/app.js',
18
+ },
19
+ plugins: [
20
+ new CompressionPlugin({ test: /\.js/ }), // gzip compress
21
+ new ManifestPlugin() // generate manifest
22
+ ],
23
+ output: {
24
+ filename: '[name]-[chunkhash].js', // include fingerprint in file name, so browsers get the latest
25
+ path: path.resolve(__dirname, '../public'),
26
+ publicPath: '/'
27
+ },
28
+ resolve: {
29
+ plugins: [
30
+ // resolve ruby files
31
+ new OpalWebpackResolverPlugin('resolve', 'resolved')
32
+ ]
33
+ },
34
+ module: {
35
+ rules: [
36
+ {
37
+ test: /\.scss$/,
38
+ use: [
39
+ {
40
+ loader: "style-loader",
41
+ options: {
42
+ hmr: false
43
+ }
44
+ },
45
+ {
46
+ loader: "css-loader"
47
+ },
48
+ {
49
+ loader: "sass-loader",
50
+ options: {
51
+ includePath: [
52
+ path.resolve(__dirname, '../assets')
53
+ ]
54
+ }
55
+ }
56
+ ]
57
+ },
58
+ {
59
+ test: /\.css$/,
60
+ use: [
61
+ 'style-loader',
62
+ 'css-loader'
63
+ ]
64
+ },
65
+ {
66
+ test: /\.(png|svg|jpg|gif)$/,
67
+ use: [
68
+ 'file-loader'
69
+ ]
70
+ },
71
+ {
72
+ test: /\.(woff|woff2|eot|ttf|otf)$/,
73
+ use: [
74
+ 'file-loader'
75
+ ]
76
+ },
77
+ {
78
+ // compile and load ruby files
79
+ test: /\.(rb|js.rb)$/,
80
+ use: [
81
+ 'opal-webpack-loader'
82
+ ]
83
+ }
84
+ ]
85
+ }
86
+ };
@@ -0,0 +1,70 @@
1
+ const path = require('path');
2
+ const OpalWebpackResolverPlugin = require('opal-webpack-resolver-plugin');
3
+
4
+ module.exports = {
5
+ context: path.resolve(__dirname, '..'),
6
+ mode: "test",
7
+ optimization: {
8
+ minimize: false
9
+ },
10
+ performance: {
11
+ maxAssetSize: 20000000,
12
+ maxEntrypointSize: 20000000
13
+ },
14
+ entry: {
15
+ app: './assets/app.js',
16
+ },
17
+ output: {
18
+ filename: '[name]_test.js',
19
+ path: path.resolve(__dirname, '../public'),
20
+ publicPath: '/'
21
+ },
22
+ resolve: {
23
+ plugins: [
24
+ new OpalWebpackResolverPlugin('resolve', 'resolved')
25
+ ]
26
+ },
27
+ module: {
28
+ rules: [
29
+ {
30
+ test: /\.scss$/,
31
+ use: [
32
+ { loader: "style-loader" },
33
+ { loader: "css-loader" },
34
+ {
35
+ loader: "sass-loader",
36
+ options: {
37
+ includePaths: [path.resolve(__dirname, '../assets')]
38
+ }
39
+ }
40
+ ]
41
+ },
42
+ {
43
+ test: /\.css$/,
44
+ use: [
45
+ 'style-loader',
46
+ 'css-loader'
47
+ ]
48
+ },
49
+ {
50
+ test: /\.(png|svg|jpg|gif)$/,
51
+ use: [
52
+ 'file-loader'
53
+ ]
54
+ },
55
+ {
56
+ test: /\.(woff|woff2|eot|ttf|otf)$/,
57
+ use: [
58
+ 'file-loader'
59
+ ]
60
+ },
61
+ {
62
+ test: /\.(rb|js.rb)$/,
63
+ use: [
64
+ 'opal-webpack-loader'
65
+ ]
66
+ }
67
+ ]
68
+ }
69
+ };
70
+
@@ -0,0 +1,19 @@
1
+ require_relative 'lib/hyper-backend-roda/version'
2
+
3
+ Gem::Specification.new do |s|
4
+ s.name = 'hyper-backend-roda'
5
+ s.version = HyperBackendRoda::VERSION
6
+ s.author = 'Jan Biedermann'
7
+ s.email = 'jan@kursator.de'
8
+ s.homepage = 'https://github.com/hyperstack-org/hyper-backend-roda'
9
+ s.summary = 'Backend support for using hyper-stack with roda'
10
+ s.description = "Write Browser Apps that transparently access server side resources like 'MyModel.first_name', with ease"
11
+ s.license = 'MIT'
12
+
13
+ s.executables << 'roda-hyper-it-make'
14
+ s.files = `git ls-files`.split("\n")
15
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
16
+ s.require_paths = ['lib']
17
+
18
+ s.add_runtime_dependency 'bundler', '~> 1.16', '>= 1.16.0'
19
+ end
@@ -0,0 +1,3 @@
1
+ module HyperBackendRoda
2
+ VERSION = '0.0.7'
3
+ end
metadata ADDED
@@ -0,0 +1,80 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: hyper-backend-roda
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.7
5
+ platform: ruby
6
+ authors:
7
+ - Jan Biedermann
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2018-06-23 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.16'
20
+ - - ">="
21
+ - !ruby/object:Gem::Version
22
+ version: 1.16.0
23
+ type: :runtime
24
+ prerelease: false
25
+ version_requirements: !ruby/object:Gem::Requirement
26
+ requirements:
27
+ - - "~>"
28
+ - !ruby/object:Gem::Version
29
+ version: '1.16'
30
+ - - ">="
31
+ - !ruby/object:Gem::Version
32
+ version: 1.16.0
33
+ description: Write Browser Apps that transparently access server side resources like
34
+ 'MyModel.first_name', with ease
35
+ email: jan@kursator.de
36
+ executables:
37
+ - roda-hyper-it-make
38
+ extensions: []
39
+ extra_rdoc_files: []
40
+ files:
41
+ - Gemfile
42
+ - LICENSE
43
+ - README.md
44
+ - bin/roda-hyper-it-make
45
+ - config/Procfile
46
+ - config/entry/app.js
47
+ - config/entry/cordova.js
48
+ - config/hyperloop/hyperloop_webpack_loader.rb
49
+ - config/package.json
50
+ - config/webpack/cordova.js
51
+ - config/webpack/development.js
52
+ - config/webpack/production.js
53
+ - config/webpack/test.js
54
+ - hyper-backend-roda.gemspec
55
+ - lib/hyper-backend-roda/version.rb
56
+ homepage: https://github.com/hyperstack-org/hyper-backend-roda
57
+ licenses:
58
+ - MIT
59
+ metadata: {}
60
+ post_install_message:
61
+ rdoc_options: []
62
+ require_paths:
63
+ - lib
64
+ required_ruby_version: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
69
+ required_rubygems_version: !ruby/object:Gem::Requirement
70
+ requirements:
71
+ - - ">="
72
+ - !ruby/object:Gem::Version
73
+ version: '0'
74
+ requirements: []
75
+ rubyforge_project:
76
+ rubygems_version: 2.7.6
77
+ signing_key:
78
+ specification_version: 4
79
+ summary: Backend support for using hyper-stack with roda
80
+ test_files: []