appril-cli 0.1.1 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/base/assets/styles.css +2 -0
- data/{boilerplate/app/base/api → app/base/components}/base_controller.rb +3 -1
- data/app/base/components/deploy.js +25 -0
- data/app/base/components/index/index.js +3 -0
- data/app/base/components/index/server.rb +13 -0
- data/{boilerplate/app/base/api → app/base/components}/rtcp_controller.rb +5 -7
- data/app/base/core.js +77 -0
- data/app/base/templates/layout.liquid +13 -0
- data/app/config/config.rb +11 -0
- data/{sandbox → app}/config/config.yml +8 -4
- data/{boilerplate/app → app}/core/Gemfile +2 -2
- data/{sandbox → app}/core/boot.rb +2 -4
- data/app/core/generate_configs.rb +7 -0
- data/{boilerplate/app → app}/core/load.rb +2 -2
- data/{boilerplate/app/core/load_api.rb → app/core/load_components.rb} +2 -1
- data/app/generators/_component/index.js +3 -0
- data/app/generators/_component/template.html +3 -0
- data/app/generators/component +29 -0
- data/app/package.json +30 -0
- data/{boilerplate/app → app}/webpack/alias.js +3 -3
- data/app/webpack/entry.js +3 -0
- data/{boilerplate/app → app}/webpack/extensions.js +1 -2
- data/app/webpack/loaders.js +47 -0
- data/app/webpack/output.js +9 -0
- data/app/webpack/plugins.js +38 -0
- data/app/webpack.config.js +29 -0
- data/lib/appril-cli/assertions.rb +5 -21
- data/lib/appril-cli/docker/build.rb +35 -31
- data/lib/appril-cli/docker/install.rb +18 -11
- data/lib/appril-cli/docker/update.rb +20 -11
- data/lib/appril-cli/docker.rb +14 -43
- data/lib/appril-cli/helpers.rb +7 -9
- data/lib/appril-cli/install.rb +30 -0
- data/lib/appril-cli/update.rb +34 -0
- data/lib/appril-cli/version.rb +1 -1
- data/lib/appril-cli.rb +62 -47
- metadata +52 -109
- data/boilerplate/app/base/api/deploy.coffee +0 -45
- data/boilerplate/app/base/api/index/client.coffee +0 -4
- data/boilerplate/app/base/api/index/server.rb +0 -3
- data/boilerplate/app/base/core.coffee +0 -113
- data/boilerplate/app/base/helpers/application_helpers.coffee +0 -1
- data/boilerplate/app/base/templates/access_denied.html +0 -3
- data/boilerplate/app/base/templates/layout.liquid +0 -11
- data/boilerplate/app/base/templates/layouts/main.html +0 -1
- data/boilerplate/app/base/templates/layouts/none.html +0 -1
- data/boilerplate/app/config/config.rb +0 -14
- data/boilerplate/app/config/config.yml +0 -18
- data/boilerplate/app/core/boot.rb +0 -72
- data/boilerplate/app/core/generate_configs.rb +0 -79
- data/boilerplate/app/generators/api/client.coffee +0 -4
- data/boilerplate/app/generators/api/server.rb +0 -3
- data/boilerplate/app/package.json +0 -10
- data/boilerplate/app/webpack/config.js +0 -6
- data/boilerplate/app/webpack/entry.js +0 -3
- data/boilerplate/app/webpack/loaders.js +0 -15
- data/boilerplate/app/webpack/output.js +0 -11
- data/boilerplate/app/webpack/plugins.js +0 -19
- data/boilerplate/app/webpack.config.js +0 -19
- data/boilerplate/crudle/Gemfile +0 -7
- data/boilerplate/crudle/base/api/deploy.coffee +0 -51
- data/boilerplate/crudle/base/api/index/client.coffee +0 -5
- data/boilerplate/crudle/base/api/index/layout.html +0 -5
- data/boilerplate/crudle/base/api/index/server.rb +0 -7
- data/boilerplate/crudle/base/templates/menu.html +0 -3
- data/boilerplate/crudle/generators/api/client.coffee +0 -17
- data/boilerplate/crudle/generators/api/editor/layout.html +0 -3
- data/boilerplate/crudle/generators/api/list/item.html +0 -3
- data/boilerplate/crudle/generators/api/server.rb +0 -26
- data/boilerplate/crudle/package.json +0 -13
- data/boilerplate/crudle/webpack/loaders.js +0 -16
- data/lib/appril-cli/app/install.rb +0 -47
- data/lib/appril-cli/app/update.rb +0 -28
- data/lib/appril-cli/app.rb +0 -46
- data/lib/appril-cli/generator/api.rb +0 -16
- data/lib/appril-cli/generator.rb +0 -32
- data/sandbox/.gitignore +0 -6
- data/sandbox/.pryrc +0 -1
- data/sandbox/Gemfile +0 -7
- data/sandbox/Rakefile +0 -1
- data/sandbox/base/api/base_controller.rb +0 -21
- data/sandbox/base/api/index/client.coffee +0 -4
- data/sandbox/base/api/index/layout.html +0 -3
- data/sandbox/base/api/index/server.rb +0 -3
- data/sandbox/base/api/rtcp_controller.rb +0 -22
- data/sandbox/base/assets/styles.css +0 -0
- data/sandbox/base/boot.rb +0 -2
- data/sandbox/base/core.coffee +0 -128
- data/sandbox/base/helpers/application_helpers.coffee +0 -1
- data/sandbox/base/helpers/application_helpers.rb +0 -4
- data/sandbox/base/load.rb +0 -0
- data/sandbox/base/models/base_model.rb +0 -0
- data/sandbox/base/templates/access_denied.html +0 -3
- data/sandbox/base/templates/layout.liquid +0 -11
- data/sandbox/base/templates/layouts/main.html +0 -1
- data/sandbox/base/templates/layouts/none.html +0 -1
- data/sandbox/base/templates/menu.html +0 -3
- data/sandbox/config/config.rb +0 -9
- data/sandbox/config/env/development.yml +0 -0
- data/sandbox/config/env/production.yml +0 -0
- data/sandbox/config/env/stage.yml +0 -0
- data/sandbox/config/env/test.yml +0 -0
- data/sandbox/config.ru +0 -3
- data/sandbox/core/Gemfile +0 -4
- data/sandbox/core/generate_configs.rb +0 -125
- data/sandbox/core/load.rb +0 -14
- data/sandbox/core/load_controllers.rb +0 -14
- data/sandbox/generators/api/client.coffee +0 -11
- data/sandbox/generators/api/editor.html +0 -0
- data/sandbox/generators/api/layout.html +0 -0
- data/sandbox/generators/api/server.rb +0 -26
- data/sandbox/package.json +0 -15
- data/sandbox/webpack.config.js +0 -54
- /data/{boilerplate/app → app}/.gitignore +0 -0
- /data/{boilerplate/app → app}/.pryrc +0 -0
- /data/{boilerplate/app → app}/Gemfile +0 -0
- /data/{boilerplate/app → app}/Rakefile +0 -0
- /data/{boilerplate/app → app}/base/boot.rb +0 -0
- /data/{boilerplate/app/base/api/index/layout.html → app/base/components/index/template.html} +0 -0
- /data/{boilerplate/app → app}/base/helpers/application_helpers.rb +0 -0
- /data/{boilerplate/app/base/assets/styles.css → app/base/helpers/index.js} +0 -0
- /data/{boilerplate/app → app}/base/load.rb +0 -0
- /data/{boilerplate/app → app}/base/models/base_model.rb +0 -0
- /data/{boilerplate/app/public → app/compiled}/.ignore +0 -0
- /data/{boilerplate/app → app}/config/env/development.yml +0 -0
- /data/{boilerplate/app → app}/config/env/production.yml +0 -0
- /data/{boilerplate/app → app}/config/env/stage.yml +0 -0
- /data/{boilerplate/app → app}/config/env/test.yml +0 -0
- /data/{boilerplate/app → app}/config.ru +0 -0
- /data/{boilerplate/app → app}/core/load_helpers.rb +0 -0
- /data/{boilerplate/app → app}/core/load_models.rb +0 -0
- /data/{boilerplate/app/tmp → app/public}/.ignore +0 -0
- /data/{boilerplate/app/var → app/tmp}/.ignore +0 -0
- /data/{boilerplate/app/generators/api/layout.html → app/var/.ignore} +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 8622cacea4e9095a3daeb67ca1bdba3d8605b7d3
|
4
|
+
data.tar.gz: 5faf96d70dae4558522bc115a79a92bbe9f4e0e7
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6941fa537bc497e8bc123348a4f80d721872ad2c4c4ad4a51c515df5e375e5efd19508c5c6360ee627f83c342c32d15909c8df9bbfa972abdf341505187a6951
|
7
|
+
data.tar.gz: c96ab1b7493828767ed27771fa7717a8e59aeac5cbf80d719ec3826c60e90aa9ac5418dd25d3f843d3e70e78ea201ba1d6b880f4d0fca64ba0f014962f75b014
|
@@ -7,7 +7,9 @@ class BaseController < Appril::BaseController
|
|
7
7
|
layout :layout
|
8
8
|
engine :Liquid
|
9
9
|
define_template(:index) {''}
|
10
|
-
|
10
|
+
|
11
|
+
# highly important setup, do NOT remove
|
12
|
+
define_template_var(:client_url, File.join(Cfg.client_url, environment).freeze)
|
11
13
|
|
12
14
|
def index
|
13
15
|
render
|
@@ -0,0 +1,25 @@
|
|
1
|
+
import {find} from 'lodash'
|
2
|
+
import Vue from 'vue/dist/vue.js'
|
3
|
+
|
4
|
+
import 'assets/styles'
|
5
|
+
// import 'appril-polyfills'
|
6
|
+
|
7
|
+
/** default deployer */
|
8
|
+
export default function(components, component, constructor) {
|
9
|
+
return constructor
|
10
|
+
} /* */
|
11
|
+
|
12
|
+
/** Crudle deployer
|
13
|
+
import Crudle from 'crudle'
|
14
|
+
export default function(components, component, constructor) {
|
15
|
+
Crudle.Menu = {
|
16
|
+
template: require('templates/menu'),
|
17
|
+
data() {
|
18
|
+
return {
|
19
|
+
...components,
|
20
|
+
is_active(...a) {return find(a, (c) => c.url == component.url) ? true : false}
|
21
|
+
}
|
22
|
+
}
|
23
|
+
}
|
24
|
+
return Crudle(constructor)
|
25
|
+
} /* */
|
@@ -7,15 +7,13 @@ class RTCPController < Appril::RTCPController
|
|
7
7
|
def connected
|
8
8
|
end
|
9
9
|
|
10
|
-
# data sent to client
|
11
|
-
def
|
12
|
-
{
|
13
|
-
client_url: Cfg.client_url, # this is highly important setup, do NOT remove
|
14
|
-
}
|
10
|
+
# environmental data to be sent to client at App initialization
|
11
|
+
def _env
|
12
|
+
{}
|
15
13
|
end
|
16
14
|
|
17
|
-
# merged into original env when calling a controller
|
18
|
-
def
|
15
|
+
# merged into original env when calling a controller method
|
16
|
+
def controller_env
|
19
17
|
{}
|
20
18
|
end
|
21
19
|
|
data/app/base/core.js
ADDED
@@ -0,0 +1,77 @@
|
|
1
|
+
import {merge, cloneDeep} from 'lodash'
|
2
|
+
import deep_freeze from 'deep-freeze-strict'
|
3
|
+
import Router from 'appril/router'
|
4
|
+
import Vue from 'vue/dist/vue.js'
|
5
|
+
import Vuex from 'vuex'
|
6
|
+
import VuexLogger from 'vuex/logger'
|
7
|
+
|
8
|
+
import {server_url, client_url, default_api} from 'app/config.js'
|
9
|
+
|
10
|
+
import {state, mutations} from 'appril/store'
|
11
|
+
import {vue_plugin, vuex_plugins} from 'appril/plugins'
|
12
|
+
import components from 'appril/components'
|
13
|
+
import async_components_loader from 'appril/components/async_loader'
|
14
|
+
import ApiBuilder from 'appril/api'
|
15
|
+
|
16
|
+
/** delete or comment this line if your components piped through Crudle
|
17
|
+
import {state as crudle_state, mutations as crudle_mutations} from 'crudle/store'
|
18
|
+
merge(state, crudle_state)
|
19
|
+
merge(mutations, crudle_mutations) /* */
|
20
|
+
|
21
|
+
const DEVELOPMENT = APP_ENV === 'development'
|
22
|
+
|
23
|
+
Vue.use(Vuex)
|
24
|
+
if (DEVELOPMENT) {
|
25
|
+
Vue.config.devtools = true
|
26
|
+
vuex_plugins.push(VuexLogger())
|
27
|
+
}
|
28
|
+
|
29
|
+
const api = ApiBuilder(default_api)
|
30
|
+
|
31
|
+
const initialize = function(data) {
|
32
|
+
deep_freeze(data)
|
33
|
+
|
34
|
+
// /* uncomment this line to disable RealTime Communication Protocol
|
35
|
+
api.rtcp.connect({
|
36
|
+
// make sure this url to match RTCPController url
|
37
|
+
path: server_url + '__rtcp__',
|
38
|
+
// disconnect if user is idle for N seconds
|
39
|
+
disconnect_after: 60
|
40
|
+
}) /* */
|
41
|
+
|
42
|
+
Vue.use(vue_plugin({
|
43
|
+
...data,
|
44
|
+
api,
|
45
|
+
components
|
46
|
+
}))
|
47
|
+
|
48
|
+
const router = new Router(components)
|
49
|
+
|
50
|
+
const store = new Vuex.Store({
|
51
|
+
state: cloneDeep(state),
|
52
|
+
mutations,
|
53
|
+
strict: DEVELOPMENT,
|
54
|
+
plugins: vuex_plugins
|
55
|
+
})
|
56
|
+
|
57
|
+
new Vue({
|
58
|
+
store,
|
59
|
+
el: '#app',
|
60
|
+
template: `<component :is="$store.state.__ROOT_COMPONENT__"></component>`,
|
61
|
+
components: async_components_loader(components, client_url + APP_ENV, api[default_api])
|
62
|
+
})
|
63
|
+
|
64
|
+
router.component_matched = function(component) {
|
65
|
+
if (store.state.__ROOT_COMPONENT__ === component.name)
|
66
|
+
return
|
67
|
+
store.replaceState(merge(cloneDeep(state), {__ROOT_COMPONENT__: component.name}))
|
68
|
+
}
|
69
|
+
|
70
|
+
router.start()
|
71
|
+
}
|
72
|
+
|
73
|
+
document.addEventListener('DOMContentLoaded', function() {
|
74
|
+
api.Index._env().get({
|
75
|
+
success: initialize
|
76
|
+
})
|
77
|
+
})
|
@@ -0,0 +1,13 @@
|
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<meta charset="utf-8">
|
5
|
+
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0">
|
6
|
+
<script type="text/javascript">window.module = {}</script>
|
7
|
+
<link rel="stylesheet" media="all" href="{{client_url}}/core.css">
|
8
|
+
<script src="{{client_url}}/core.js"></script>
|
9
|
+
</head>
|
10
|
+
<body>
|
11
|
+
<div id="app"></div>
|
12
|
+
</body>
|
13
|
+
</html>
|
@@ -0,0 +1,11 @@
|
|
1
|
+
# loading .yml configs from current directory (config.yml will be loaded first)
|
2
|
+
Cfg = Appril.load_configs(File.expand_path('..', __FILE__))
|
3
|
+
|
4
|
+
# it is highly recommended to freeze configs so they stay unaltered on runtime
|
5
|
+
Cfg.freeze
|
6
|
+
|
7
|
+
# loading all .rb files in current dir (this one will be skipped automatically)
|
8
|
+
%w[
|
9
|
+
../*.rb
|
10
|
+
../**/*.rb
|
11
|
+
].each {|p| Dir[File.expand_path(p, __FILE__)].each {|f| require(f)} }
|
@@ -9,10 +9,14 @@
|
|
9
9
|
|
10
10
|
|
11
11
|
# base URL for server app
|
12
|
-
server_url: /
|
12
|
+
server_url: / # trailing slash required
|
13
13
|
|
14
14
|
# base URL for compiled client app
|
15
|
-
client_url: /
|
15
|
+
client_url: /compiled/ # trailing slash required
|
16
16
|
|
17
|
-
# where webpack should install compiled app
|
18
|
-
|
17
|
+
# where webpack should install compiled app (relative to webpack.config.js)
|
18
|
+
# will append client_url so by default it will be installed in ./compiled/
|
19
|
+
build_path: ./
|
20
|
+
|
21
|
+
# either xhr or rtcp
|
22
|
+
default_api: xhr
|
@@ -1,6 +1,7 @@
|
|
1
1
|
# do NOT edit this file, edit base/boot.rb instead
|
2
2
|
|
3
|
-
require '
|
3
|
+
require 'appril'
|
4
|
+
require 'appril/load_configs'
|
4
5
|
|
5
6
|
Dir.chdir File.expand_path('../..', __FILE__) do
|
6
7
|
require './base/boot'
|
@@ -10,7 +11,4 @@ Dir.chdir File.expand_path('../..', __FILE__) do
|
|
10
11
|
Bundler.require(RocketIO.environment)
|
11
12
|
|
12
13
|
require './config/config'
|
13
|
-
|
14
|
-
require './base/helpers/application_helpers'
|
15
|
-
Dir['./base/helpers/**/*.rb'].each {|f| require(f)}
|
16
14
|
end
|
@@ -1,9 +1,9 @@
|
|
1
|
-
# do NOT edit this file, edit
|
1
|
+
# do NOT edit this file, edit base/load.rb instead
|
2
2
|
|
3
3
|
Dir.chdir File.expand_path('../..', __FILE__) do
|
4
4
|
require './core/boot'
|
5
5
|
require './base/load'
|
6
6
|
require './core/load_helpers'
|
7
7
|
require './core/load_models'
|
8
|
-
require './core/
|
8
|
+
require './core/load_components'
|
9
9
|
end
|
@@ -3,8 +3,9 @@
|
|
3
3
|
base_controller.rb
|
4
4
|
rtcp_controller.rb
|
5
5
|
**/server.rb
|
6
|
+
**/*.rb
|
6
7
|
].each do |p|
|
7
|
-
Dir[File.expand_path("../../base/
|
8
|
+
Dir[File.expand_path("../../base/components/#{p}", __FILE__)].sort {|a,b|
|
8
9
|
a.split(/\/+/).size <=> b.split(/\/+/).size
|
9
10
|
}.each {|f| require(f)}
|
10
11
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
require 'fileutils'
|
3
|
+
require 'pathname'
|
4
|
+
|
5
|
+
opts, args = $*.partition {|x| x =~ /\A\-/}
|
6
|
+
args[0] || fail("\n\n\t\u2716 No destination path provided\n\n")
|
7
|
+
|
8
|
+
dst = Pathname.new(args[0] =~ /\A\// ? args[0] : File.expand_path("../../base/components/#{args[0].sub(/\Abase\/+components/, '')}", __FILE__))
|
9
|
+
File.exists?(dst) && fail("\n\n\t\u2716 #{dst.sub(/.*(base\/components\/.+)/, '\1')} already exists\n\n")
|
10
|
+
|
11
|
+
FileUtils.mkdir_p(dst.dirname)
|
12
|
+
FileUtils.cp_r(File.expand_path("../_component", __FILE__), dst)
|
13
|
+
|
14
|
+
puts "\n\t\u2713 Installed #{dst.sub(/.*(base\/components\/.+)/, '\1')}"
|
15
|
+
|
16
|
+
parent_component = dst.dirname / 'index.js'
|
17
|
+
if File.file?(parent_component)
|
18
|
+
header = "import %s from './%s'\n" % [
|
19
|
+
dst.basename.to_path.split(/\W+/).map(&:capitalize).join,
|
20
|
+
dst.basename
|
21
|
+
]
|
22
|
+
content = File.read(parent_component)
|
23
|
+
unless content =~ /#{header}/
|
24
|
+
content = header + content
|
25
|
+
File.open(parent_component, 'w') {|f| f << content}
|
26
|
+
puts "\t\u2713 Updated #{parent_component.sub(/.*(base\/components\/.+)/, '\1')}"
|
27
|
+
end
|
28
|
+
end
|
29
|
+
puts
|
data/app/package.json
ADDED
@@ -0,0 +1,30 @@
|
|
1
|
+
{
|
2
|
+
"name": "MyApp",
|
3
|
+
"version": "0.0.0",
|
4
|
+
"description": "...",
|
5
|
+
"devDependencies": {
|
6
|
+
"appril": ">= 0.2.8",
|
7
|
+
"appril-polyfills": ">= 0.0.2",
|
8
|
+
"appril-url": ">= 0.0.5",
|
9
|
+
"appril-utils": ">= 0.1.5",
|
10
|
+
"babel-core": "6",
|
11
|
+
"babel-loader": "6",
|
12
|
+
"babel-plugin-transform-object-rest-spread": "6",
|
13
|
+
"babel-plugin-transform-runtime": "6",
|
14
|
+
"babel-preset-es2015": "6",
|
15
|
+
"babel-preset-stage-2": "6",
|
16
|
+
"babel-preset-stage-3": "6",
|
17
|
+
"css-loader": "*",
|
18
|
+
"deep-freeze-strict": "1",
|
19
|
+
"extract-text-webpack-plugin": "^2.0.0-beta.2",
|
20
|
+
"file-loader": "*",
|
21
|
+
"json-loader": "*",
|
22
|
+
"optimize-css-assets-webpack-plugin": "1",
|
23
|
+
"style-loader": "*",
|
24
|
+
"url-loader": "*",
|
25
|
+
"vue": "^2.0.0-beta.3",
|
26
|
+
"vue-html-loader": "1",
|
27
|
+
"vuex": "^2.0.0-rc.3",
|
28
|
+
"webpack": "^2.1.0-beta.18"
|
29
|
+
}
|
30
|
+
}
|
@@ -1,10 +1,10 @@
|
|
1
|
-
|
1
|
+
const path = require('path')
|
2
2
|
|
3
3
|
module.exports = {
|
4
4
|
app: path.resolve(__dirname, '..'),
|
5
5
|
base: 'app/base',
|
6
|
-
api: 'base/api',
|
7
|
-
helpers: 'base/helpers',
|
8
6
|
assets: 'base/assets',
|
7
|
+
components: 'base/components',
|
8
|
+
helpers: 'base/helpers',
|
9
9
|
templates: 'base/templates'
|
10
10
|
}
|
@@ -0,0 +1,47 @@
|
|
1
|
+
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
2
|
+
|
3
|
+
const babel_query = {
|
4
|
+
presets: ['es2015', 'stage-2'],
|
5
|
+
plugins: ['transform-runtime']
|
6
|
+
}
|
7
|
+
|
8
|
+
const assets_regex = /base\/+assets\/[^/]+\.css$/
|
9
|
+
|
10
|
+
module.exports = [
|
11
|
+
{
|
12
|
+
test: /\.js$/,
|
13
|
+
exclude: /node_modules/,
|
14
|
+
loader: 'babel',
|
15
|
+
query: babel_query
|
16
|
+
},
|
17
|
+
{ // libs published as ES6 modules
|
18
|
+
test: /node_modules\/+(appril|crudle).*\.js$/,
|
19
|
+
loader: 'babel',
|
20
|
+
query: babel_query
|
21
|
+
},
|
22
|
+
{ // css files inside base/assets/
|
23
|
+
test: assets_regex,
|
24
|
+
loader: ExtractTextPlugin.extract({
|
25
|
+
notExtractLoader: "style-loader",
|
26
|
+
loader: "css-loader"
|
27
|
+
})
|
28
|
+
},
|
29
|
+
{ // css files outside base/assets/
|
30
|
+
test: function(path) {
|
31
|
+
if (!path.match(/\.css$/))
|
32
|
+
return false
|
33
|
+
return path.match(assets_regex) ? false : true
|
34
|
+
},
|
35
|
+
loader: 'style-loader!css-loader'
|
36
|
+
},
|
37
|
+
{ test: /\.html$/, loader: 'vue-html' },
|
38
|
+
{ test: /\.json$/, loader: 'json-loader' },
|
39
|
+
{ test: /\.otf($|\?)/, loader: require.resolve('file-loader') },
|
40
|
+
{ test: /\.ttf($|\?)/, loader: require.resolve('file-loader') },
|
41
|
+
{ test: /\.eot($|\?)/, loader: require.resolve('file-loader') },
|
42
|
+
{ test: /\.svg($|\?)/, loader: require.resolve('file-loader') },
|
43
|
+
{ test: /\.png($|\?)/, loader: require.resolve('url-loader') + '?limit=10000&mimetype=image/png' },
|
44
|
+
{ test: /\.jpg($|\?)/, loader: require.resolve('file-loader') },
|
45
|
+
{ test: /\.gif($|\?)/, loader: require.resolve('file-loader') },
|
46
|
+
{ test: /\.woff[2]?($|\?)/, loader: require.resolve('url-loader') + '?limit=10000&mimetype=application/font-woff' },
|
47
|
+
]
|
@@ -0,0 +1,9 @@
|
|
1
|
+
const path = require('path')
|
2
|
+
const config = require('../config.js')
|
3
|
+
|
4
|
+
module.exports = {
|
5
|
+
path: path.join(config.build_path, config.client_url, APP_ENV),
|
6
|
+
filename: '[name].js',
|
7
|
+
publicPath: path.join(config.client_url, APP_ENV, '/'), // trailing slash required
|
8
|
+
libraryTarget: 'commonjs2'
|
9
|
+
}
|
@@ -0,0 +1,38 @@
|
|
1
|
+
const webpack = require('webpack')
|
2
|
+
const ExtractTextPlugin = require('extract-text-webpack-plugin')
|
3
|
+
const OptimizeCssAssetsPlugin = require('optimize-css-assets-webpack-plugin')
|
4
|
+
|
5
|
+
const plugins = [
|
6
|
+
new webpack.optimize.CommonsChunkPlugin({names: ['core'], minChunks: 2}),
|
7
|
+
|
8
|
+
// new webpack.ProvidePlugin({
|
9
|
+
// $: 'jquery',
|
10
|
+
// jQuery: 'jquery'
|
11
|
+
// }),
|
12
|
+
|
13
|
+
new webpack.DefinePlugin({
|
14
|
+
APP_ENV: JSON.stringify(APP_ENV),
|
15
|
+
'process.env': {
|
16
|
+
NODE_ENV: JSON.stringify(APP_ENV)
|
17
|
+
}
|
18
|
+
}),
|
19
|
+
|
20
|
+
new ExtractTextPlugin('[name].css')
|
21
|
+
]
|
22
|
+
|
23
|
+
if (APP_ENV === 'production') {
|
24
|
+
plugins.push(
|
25
|
+
new webpack.optimize.UglifyJsPlugin({
|
26
|
+
compress: { warnings: false },
|
27
|
+
screwIE8: true,
|
28
|
+
sourceMap: false,
|
29
|
+
mangle: true
|
30
|
+
})
|
31
|
+
),
|
32
|
+
|
33
|
+
plugins.push(
|
34
|
+
new OptimizeCssAssetsPlugin
|
35
|
+
)
|
36
|
+
}
|
37
|
+
|
38
|
+
module.exports = plugins
|
@@ -0,0 +1,29 @@
|
|
1
|
+
const child_process = require('child_process')
|
2
|
+
|
3
|
+
APP_ENV = process.env.APP_ENV || 'development'
|
4
|
+
|
5
|
+
if (APP_ENV === 'development') {
|
6
|
+
process.stdout.write('Generating configs... ')
|
7
|
+
try {
|
8
|
+
child_process.execSync('./core/generate_configs.rb')
|
9
|
+
console.log('done')
|
10
|
+
} catch(e) {
|
11
|
+
console.log(e.stdout.toString() + e.stderr.toString())
|
12
|
+
process.exit(1)
|
13
|
+
}
|
14
|
+
}
|
15
|
+
|
16
|
+
process.stdout.write('Webpacking... ')
|
17
|
+
|
18
|
+
module.exports = {
|
19
|
+
entry: require('./webpack/entry.js'),
|
20
|
+
output: require('./webpack/output.js'),
|
21
|
+
module: {
|
22
|
+
loaders: require('./webpack/loaders.js')
|
23
|
+
},
|
24
|
+
resolve: {
|
25
|
+
extensions: require('./webpack/extensions.js'),
|
26
|
+
alias: require('./webpack/alias.js')
|
27
|
+
},
|
28
|
+
plugins: require('./webpack/plugins.js')
|
29
|
+
}
|
@@ -2,28 +2,18 @@ module Appril
|
|
2
2
|
class CLI
|
3
3
|
module Assertions
|
4
4
|
|
5
|
-
def
|
6
|
-
|
7
|
-
|
8
|
-
end
|
9
|
-
|
10
|
-
def assert_installable_dir dir, working_dir_opted
|
11
|
-
if working_dir_opted
|
12
|
-
assert_empty_directory(dir)
|
5
|
+
def assert_installable_path path
|
6
|
+
if path == WORKING_DIR
|
7
|
+
assert_empty_directory(path)
|
13
8
|
else
|
14
|
-
assert_directory_does_not_exists(
|
9
|
+
assert_directory_does_not_exists(path)
|
15
10
|
end
|
16
11
|
end
|
17
12
|
|
18
|
-
def assert_is_docker_dir dir
|
19
|
-
return if File.exists?(dir / Docker::CONFIG_FILE)
|
20
|
-
fatal_error! "#{dir} does not look like a Appril docker dir"
|
21
|
-
end
|
22
|
-
|
23
13
|
def assert_is_app_dir dir
|
24
14
|
return if %w[
|
25
15
|
core
|
26
|
-
base/
|
16
|
+
base/components
|
27
17
|
config
|
28
18
|
].all? {|e| File.exists?(dir / e)}
|
29
19
|
fatal_error! "#{dir} does not look like a Appril app dir"
|
@@ -49,12 +39,6 @@ module Appril
|
|
49
39
|
fatal_error! "#{dir / Docker::CONFIG_FILE} file is missing"
|
50
40
|
end
|
51
41
|
|
52
|
-
def assert_valid_api_name_given api_name
|
53
|
-
api_name || fatal_error!('Please provide api name')
|
54
|
-
api_name =~ /\W/ && fatal_error!('Api name should contain only alphanumerics')
|
55
|
-
api_name =~ /\A[a-z]/i || fatal_error!('Api name should start with a letter')
|
56
|
-
end
|
57
|
-
|
58
42
|
end
|
59
43
|
end
|
60
44
|
end
|