appril-cli 0.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/Rakefile +1 -0
- data/appril-cli.gemspec +19 -0
- data/bin/appril +4 -0
- data/boilerplate/app/.gitignore +6 -0
- data/boilerplate/app/.pryrc +1 -0
- data/boilerplate/app/Gemfile +6 -0
- data/boilerplate/app/Rakefile +1 -0
- data/boilerplate/app/base/api/base_controller.rb +21 -0
- data/boilerplate/app/base/api/index/client.coffee +4 -0
- data/boilerplate/app/base/api/index/layout.html +3 -0
- data/boilerplate/app/base/api/index/server.rb +3 -0
- data/boilerplate/app/base/api/rtcp_controller.rb +22 -0
- data/boilerplate/app/base/assets/styles.css +0 -0
- data/boilerplate/app/base/boot.rb +2 -0
- data/boilerplate/app/base/core.coffee +143 -0
- data/boilerplate/app/base/helpers/application_helpers.coffee +1 -0
- data/boilerplate/app/base/helpers/application_helpers.rb +4 -0
- data/boilerplate/app/base/load.rb +0 -0
- data/boilerplate/app/base/models/base_model.rb +0 -0
- data/boilerplate/app/base/templates/access_denied.html +3 -0
- data/boilerplate/app/base/templates/layout.liquid +11 -0
- data/boilerplate/app/base/templates/layouts/main.html +1 -0
- data/boilerplate/app/base/templates/layouts/none.html +1 -0
- data/boilerplate/app/config/config.rb +9 -0
- data/boilerplate/app/config/config.yml +18 -0
- data/boilerplate/app/config/env/development.yml +0 -0
- data/boilerplate/app/config/env/production.yml +0 -0
- data/boilerplate/app/config/env/stage.yml +0 -0
- data/boilerplate/app/config/env/test.yml +0 -0
- data/boilerplate/app/config.ru +3 -0
- data/boilerplate/app/core/Gemfile +4 -0
- data/boilerplate/app/core/boot.rb +16 -0
- data/boilerplate/app/core/generate_configs.rb +125 -0
- data/boilerplate/app/core/load.rb +14 -0
- data/boilerplate/app/core/load_controllers.rb +14 -0
- data/boilerplate/app/generators/api/client.coffee +4 -0
- data/boilerplate/app/generators/api/layout.html +0 -0
- data/boilerplate/app/generators/api/server.rb +3 -0
- data/boilerplate/app/package.json +10 -0
- data/boilerplate/app/public/.ignore +0 -0
- data/boilerplate/app/tmp/.ignore +0 -0
- data/boilerplate/app/var/.ignore +0 -0
- data/boilerplate/app/webpack.config.js +53 -0
- data/boilerplate/crudle/Gemfile +7 -0
- data/boilerplate/crudle/base/core.coffee +128 -0
- data/boilerplate/crudle/base/templates/menu.html +3 -0
- data/boilerplate/crudle/generators/api/client.coffee +11 -0
- data/boilerplate/crudle/generators/api/editor.html +0 -0
- data/boilerplate/crudle/generators/api/server.rb +26 -0
- data/boilerplate/crudle/package.json +15 -0
- data/boilerplate/crudle/webpack.config.js +54 -0
- data/docker/Dockerfile +5 -0
- data/docker/run +66 -0
- data/docker/skel/build.sh +1 -0
- data/docker/skel/cleanup.sh +7 -0
- data/docker/skel/config.yml +24 -0
- data/docker/skel/prepare_build.sh +5 -0
- data/docker/skel/start.sh +1 -0
- data/docker/start +7 -0
- data/lib/appril-cli/app/install.rb +46 -0
- data/lib/appril-cli/app/update.rb +27 -0
- data/lib/appril-cli/app.rb +46 -0
- data/lib/appril-cli/assertions.rb +60 -0
- data/lib/appril-cli/docker/build.rb +152 -0
- data/lib/appril-cli/docker/install.rb +23 -0
- data/lib/appril-cli/docker/update.rb +26 -0
- data/lib/appril-cli/docker.rb +61 -0
- data/lib/appril-cli/generator/api.rb +16 -0
- data/lib/appril-cli/generator.rb +32 -0
- data/lib/appril-cli/helpers.rb +47 -0
- data/lib/appril-cli/version.rb +5 -0
- data/lib/appril-cli.rb +102 -0
- data/sandbox/.gitignore +6 -0
- data/sandbox/.pryrc +1 -0
- data/sandbox/Gemfile +7 -0
- data/sandbox/Rakefile +1 -0
- data/sandbox/base/api/base_controller.rb +21 -0
- data/sandbox/base/api/index/client.coffee +4 -0
- data/sandbox/base/api/index/layout.html +3 -0
- data/sandbox/base/api/index/server.rb +3 -0
- data/sandbox/base/api/rtcp_controller.rb +22 -0
- data/sandbox/base/assets/styles.css +0 -0
- data/sandbox/base/boot.rb +2 -0
- data/sandbox/base/core.coffee +128 -0
- data/sandbox/base/helpers/application_helpers.coffee +1 -0
- data/sandbox/base/helpers/application_helpers.rb +4 -0
- data/sandbox/base/load.rb +0 -0
- data/sandbox/base/models/base_model.rb +0 -0
- data/sandbox/base/templates/access_denied.html +3 -0
- data/sandbox/base/templates/layout.liquid +11 -0
- data/sandbox/base/templates/layouts/main.html +1 -0
- data/sandbox/base/templates/layouts/none.html +1 -0
- data/sandbox/base/templates/menu.html +3 -0
- data/sandbox/config/config.rb +9 -0
- data/sandbox/config/config.yml +18 -0
- 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 +3 -0
- data/sandbox/core/Gemfile +4 -0
- data/sandbox/core/boot.rb +16 -0
- data/sandbox/core/generate_configs.rb +125 -0
- data/sandbox/core/load.rb +14 -0
- data/sandbox/core/load_controllers.rb +14 -0
- data/sandbox/generators/api/client.coffee +11 -0
- data/sandbox/generators/api/editor.html +0 -0
- data/sandbox/generators/api/layout.html +0 -0
- data/sandbox/generators/api/server.rb +26 -0
- data/sandbox/package.json +15 -0
- data/sandbox/webpack.config.js +54 -0
- metadata +157 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8a468b9220ed3756961ef37806e0938466aa53af
|
4
|
+
data.tar.gz: 4736ac8b5010e66752ef32408d618d4182c34957
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: e4f4202bb9d97ece3954089d69d26fc0176f0cc18cca2d2a7cb29c2d811fd0d4066f5a0cbe3ce6a3ba37c98cf1e9e33cd720402b21d37becce6e012add85e8fb
|
7
|
+
data.tar.gz: f3f8421cd5b27f03a65d6163d3922ae1874f52e32da2699a09e1bf8cd7504fa5ad1d75ac0ac0595c35f86c3a470b7121238c3fa85c99e69a4f90e05ad02cc354
|
data/.gitignore
ADDED
data/Rakefile
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require 'bundler/gem_tasks'
|
data/appril-cli.gemspec
ADDED
@@ -0,0 +1,19 @@
|
|
1
|
+
# coding: utf-8
|
2
|
+
require File.expand_path('../lib/appril-cli/version', __FILE__)
|
3
|
+
|
4
|
+
Gem::Specification.new do |spec|
|
5
|
+
spec.name = 'appril-cli'
|
6
|
+
spec.version = Appril::CLI::VERSION
|
7
|
+
spec.authors = ['Slee Woo']
|
8
|
+
spec.email = ['mail@sleewoo.com']
|
9
|
+
spec.summary = [spec.name, spec.version]*'-',
|
10
|
+
spec.description = 'Appril CLI'
|
11
|
+
spec.homepage = 'https://github.com/appril/appril-cli'
|
12
|
+
spec.license = 'MIT'
|
13
|
+
|
14
|
+
spec.files = Dir['**/{*,.[a-z]*}'].reject {|e| e =~ /(gem|lock)\z/}
|
15
|
+
spec.require_paths = ['lib']
|
16
|
+
spec.executables = Dir['bin/*'].map {|f| File.basename(f)}
|
17
|
+
|
18
|
+
spec.required_ruby_version = '~> 2.0'
|
19
|
+
end
|
data/bin/appril
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path('../core/load', __FILE__)
|
@@ -0,0 +1 @@
|
|
1
|
+
require File.expand_path('../core/load', __FILE__)
|
@@ -0,0 +1,21 @@
|
|
1
|
+
class BaseController < Appril::BaseController
|
2
|
+
include Helpers
|
3
|
+
|
4
|
+
map Cfg.server_url
|
5
|
+
|
6
|
+
define_layout :layout, file: '../templates/layout'
|
7
|
+
layout :layout
|
8
|
+
engine :Liquid
|
9
|
+
define_template(:get) {''}
|
10
|
+
define_template_var(:client_url, Cfg.client_url)
|
11
|
+
|
12
|
+
def get
|
13
|
+
render
|
14
|
+
end
|
15
|
+
|
16
|
+
error 500 do |e|
|
17
|
+
puts "\e[0;31m%s\e[0m" % e.inspect
|
18
|
+
e.backtrace && e.backtrace.each {|l| puts " \e[0;36m%s\e[0m" % l}
|
19
|
+
e.message
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
class RTCPController < Appril::RTCPController
|
2
|
+
map File.join(Cfg.server_url, '__rtcp__')
|
3
|
+
|
4
|
+
private
|
5
|
+
# called after socket connection established
|
6
|
+
def connected
|
7
|
+
end
|
8
|
+
|
9
|
+
# data sent to client after connection established
|
10
|
+
def initialization_data
|
11
|
+
{}
|
12
|
+
end
|
13
|
+
|
14
|
+
# merged into original env when calling a controller
|
15
|
+
def rtcp_env
|
16
|
+
{}
|
17
|
+
end
|
18
|
+
|
19
|
+
# called when socket connection closed
|
20
|
+
def disconnected
|
21
|
+
end
|
22
|
+
end
|
File without changes
|
@@ -0,0 +1,143 @@
|
|
1
|
+
_ =
|
2
|
+
merge: require('lodash/merge')
|
3
|
+
has: require('lodash/has')
|
4
|
+
isFunction: require('lodash/isFunction')
|
5
|
+
#end
|
6
|
+
|
7
|
+
Core = require('appril')
|
8
|
+
Page = require('appril-page')
|
9
|
+
Render = require('appril-ractive')
|
10
|
+
Reporter = require('appril-reporter')
|
11
|
+
require 'appril-polyfills'
|
12
|
+
require 'assets/styles.css'
|
13
|
+
|
14
|
+
CONSIDER_IDLE_AFTER = 5 * 60
|
15
|
+
|
16
|
+
window.Cfg = {}
|
17
|
+
window.Util = {}
|
18
|
+
window.App = {}
|
19
|
+
# window.Alert = require('appril-alert')
|
20
|
+
|
21
|
+
for k, v of require('appril-util')
|
22
|
+
Util[k] = v
|
23
|
+
#end
|
24
|
+
|
25
|
+
# for k, v of require('appril-datetime')
|
26
|
+
# Util[k] = v
|
27
|
+
# #end
|
28
|
+
|
29
|
+
for k, v of require('helpers/application_helpers.coffee')
|
30
|
+
Util[k] = v
|
31
|
+
#end
|
32
|
+
|
33
|
+
Object.freeze(Util)
|
34
|
+
|
35
|
+
Render.default_el = -> '#content'
|
36
|
+
Render.global_data = -> {App: App, Cfg: Cfg, Util: Util}
|
37
|
+
Render.global_handlers = -> {}
|
38
|
+
|
39
|
+
for name, controller of Core.controllers
|
40
|
+
App[name] = controller
|
41
|
+
#end
|
42
|
+
|
43
|
+
Core.on_initialize = (msg) ->
|
44
|
+
if window.Cfg = msg.data.cfg
|
45
|
+
delete msg.data.cfg
|
46
|
+
Object.freeze(Cfg)
|
47
|
+
#end
|
48
|
+
|
49
|
+
for k, v of msg.data
|
50
|
+
App[k] = v
|
51
|
+
#end
|
52
|
+
|
53
|
+
Reporter CONSIDER_IDLE_AFTER, (status) ->
|
54
|
+
# close connection if user went away
|
55
|
+
Core.disconnect() if status == 'away'
|
56
|
+
#end
|
57
|
+
#end
|
58
|
+
|
59
|
+
templates =
|
60
|
+
none: require('templates/layouts/none')
|
61
|
+
main: require('templates/layouts/main')
|
62
|
+
access_denied: require('templates/access_denied')
|
63
|
+
#end
|
64
|
+
|
65
|
+
partials = {}
|
66
|
+
|
67
|
+
deploy_api = (api) ->
|
68
|
+
|
69
|
+
env = _.merge({
|
70
|
+
render: Render,
|
71
|
+
render_component: Render.component,
|
72
|
+
render_string: Render.string
|
73
|
+
}, new Page)
|
74
|
+
|
75
|
+
layout = if _.has(api, 'layout')
|
76
|
+
if api.layout == false
|
77
|
+
'none'
|
78
|
+
else
|
79
|
+
api.layout
|
80
|
+
else
|
81
|
+
'main'
|
82
|
+
#end
|
83
|
+
|
84
|
+
if App.body
|
85
|
+
# do not re-render body if current api uses same layout as previous one
|
86
|
+
return new api(env) if App.body.layout == layout
|
87
|
+
#end
|
88
|
+
|
89
|
+
components = {}
|
90
|
+
|
91
|
+
App.body = env.render
|
92
|
+
el: 'body'
|
93
|
+
template: templates[layout] || templates.none
|
94
|
+
partials: partials
|
95
|
+
components: components
|
96
|
+
data: {}
|
97
|
+
|
98
|
+
oncomplete: ->
|
99
|
+
this.layout = layout
|
100
|
+
new api(env)
|
101
|
+
#end
|
102
|
+
#end
|
103
|
+
#end
|
104
|
+
|
105
|
+
previous_api = null
|
106
|
+
Core.on_controller_matched = (controller, context) ->
|
107
|
+
|
108
|
+
controller.load (api) ->
|
109
|
+
context.save()
|
110
|
+
|
111
|
+
api.controller = controller
|
112
|
+
|
113
|
+
if previous_api?.teardown
|
114
|
+
previous_api.teardown()
|
115
|
+
#end
|
116
|
+
previous_api = api
|
117
|
+
|
118
|
+
if _.has(api, 'acl')
|
119
|
+
unless _.isFunction(api.acl)
|
120
|
+
throw new Error("#{controller.name}.acl should be a function")
|
121
|
+
|
122
|
+
if api.acl()
|
123
|
+
deploy_api(api)
|
124
|
+
else
|
125
|
+
Render
|
126
|
+
el: 'body'
|
127
|
+
template: templates.main
|
128
|
+
partials: partials
|
129
|
+
oncomplete: ->
|
130
|
+
Render(template: templates.access_denied)
|
131
|
+
#end
|
132
|
+
|
133
|
+
else
|
134
|
+
deploy_api(api)
|
135
|
+
#end
|
136
|
+
|
137
|
+
#end
|
138
|
+
#end
|
139
|
+
|
140
|
+
document.addEventListener 'DOMContentLoaded', ->
|
141
|
+
# make sure this matches the RTCPController URL
|
142
|
+
Core.connect('__rtcp__')
|
143
|
+
#end
|
@@ -0,0 +1 @@
|
|
1
|
+
# this file will be loaded before other files found in helpers/ folder
|
File without changes
|
File without changes
|
@@ -0,0 +1,11 @@
|
|
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
|
+
<script src="{{client_url}}/core.js"></script>
|
8
|
+
<link rel="stylesheet" href="{{client_url}}/core.css">
|
9
|
+
</head>
|
10
|
+
<body></body>
|
11
|
+
</html>
|
@@ -0,0 +1 @@
|
|
1
|
+
<div id="content"></div>
|
@@ -0,0 +1 @@
|
|
1
|
+
<div id="content"></div>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
|
2
|
+
# loading .yml configs from current directory. config.yml will be loaded first.
|
3
|
+
Cfg = Appril.load_config(File.expand_path('..', __FILE__))
|
4
|
+
|
5
|
+
# it is highly recommended to freeze configs so they stay unaltered on runtime.
|
6
|
+
Cfg.freeze
|
7
|
+
|
8
|
+
# loading any .rb files in current dir. this one will be skipped automatically.
|
9
|
+
Dir[File.expand_path('../**/*.rb', __FILE__)].each {|f| require(f)}
|
@@ -0,0 +1,18 @@
|
|
1
|
+
|
2
|
+
# configs here will be the same on all environments.
|
3
|
+
# if some configs differs on some environment,
|
4
|
+
# put them into appropriate env/[ENVIRONMENT].yml file
|
5
|
+
|
6
|
+
# multiple .yml files allowed in config folder.
|
7
|
+
# for example config/db.yml file will be loaded into Cfg.db in server app.
|
8
|
+
# arbitrary .yml files can have environment related configs.
|
9
|
+
|
10
|
+
|
11
|
+
# base URL for server app
|
12
|
+
server_url: /
|
13
|
+
|
14
|
+
# base URL for compiled client app
|
15
|
+
client_url: /app
|
16
|
+
|
17
|
+
# where webpack should install compiled app. relative to webpack.config.js
|
18
|
+
client_path: ./public
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# do NOT edit this file, edit base/boot.rb instead
|
2
|
+
|
3
|
+
require 'yaml'
|
4
|
+
|
5
|
+
Dir.chdir File.expand_path('../..', __FILE__) do
|
6
|
+
require './base/boot'
|
7
|
+
|
8
|
+
require 'bundler/setup'
|
9
|
+
Bundler.require(:default)
|
10
|
+
Bundler.require(RocketIO.environment)
|
11
|
+
|
12
|
+
require './config/config'
|
13
|
+
|
14
|
+
require './base/helpers/application_helpers'
|
15
|
+
Dir['./base/helpers/**/*.rb'].each {|f| require(f)}
|
16
|
+
end
|
@@ -0,0 +1,125 @@
|
|
1
|
+
#!/usr/bin/env ruby
|
2
|
+
|
3
|
+
# do NOT edit this file
|
4
|
+
|
5
|
+
require File.expand_path('../load', __FILE__)
|
6
|
+
|
7
|
+
module ApprilTools
|
8
|
+
extend self
|
9
|
+
|
10
|
+
def load_config dir, env = RocketIO.environment
|
11
|
+
|
12
|
+
config = load_config_file("#{dir}/config.yml")
|
13
|
+
config.update(load_config_file("#{dir}/env/#{env}.yml"))
|
14
|
+
config[:environment] = env.to_s.freeze
|
15
|
+
|
16
|
+
Dir["#{dir}/**/*.yml"].each do |file|
|
17
|
+
next if File.dirname(file) == './env'
|
18
|
+
|
19
|
+
key = File.basename(file, '.yml')
|
20
|
+
next if key == 'config' || key == 'appril'
|
21
|
+
|
22
|
+
key_config = load_config_file(file)
|
23
|
+
key_config_keys = key_config.keys.map(&:to_s)
|
24
|
+
|
25
|
+
config[key] = if key_config_keys.include?(env.to_s)
|
26
|
+
# current environment found, use it
|
27
|
+
key_config[env]
|
28
|
+
else
|
29
|
+
if RocketIO::ENVIRONMENTS.keys.find {|k| key_config_keys.include?(k)}
|
30
|
+
# there are some environment(s), but no current one so set current environment to nil
|
31
|
+
nil
|
32
|
+
else
|
33
|
+
# there are no environments, so this config is available on any environment
|
34
|
+
key_config
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
end
|
39
|
+
|
40
|
+
def config.method_missing key
|
41
|
+
self[key]
|
42
|
+
end
|
43
|
+
|
44
|
+
config
|
45
|
+
end
|
46
|
+
|
47
|
+
|
48
|
+
def load_config_file file
|
49
|
+
RocketIO.indifferent_params(YAML.load(File.read(file)) || {})
|
50
|
+
end
|
51
|
+
|
52
|
+
|
53
|
+
def controllers_map dir
|
54
|
+
path_to_api = File.expand_path('base/api', dir)
|
55
|
+
RocketIO.controllers.each_with_object([]) do |controller,o|
|
56
|
+
next unless controller.superclass == ::BaseController
|
57
|
+
|
58
|
+
o << {
|
59
|
+
path: controller.dirname.sub(path_to_api, '').gsub(/\A\/|\/\Z/, ''),
|
60
|
+
url: controller.url,
|
61
|
+
url_pattern: url_pattern(controller),
|
62
|
+
name: controller.name.gsub('::', '__'),
|
63
|
+
api: controller.api
|
64
|
+
}
|
65
|
+
end.sort do |a,b|
|
66
|
+
b[:url].split('/').size <=> a[:url].split('/').size
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
|
71
|
+
def webpack_entries dir, controllers
|
72
|
+
entries = controllers.each_with_object({}) do |controller,o|
|
73
|
+
|
74
|
+
next unless entry = %w[
|
75
|
+
./base/api/%s/client.js
|
76
|
+
./base/api/%s/client.coffee
|
77
|
+
].map {|p| p % controller[:path]}.find {|f| File.file?(File.expand_path(f, dir))}
|
78
|
+
|
79
|
+
o[controller[:path]] = File.join('./base/api', controller[:path], File.basename(entry))
|
80
|
+
end
|
81
|
+
|
82
|
+
if core = %w[
|
83
|
+
./base/core.js
|
84
|
+
./base/core.coffee
|
85
|
+
].find {|f| File.file?(File.expand_path(f, dir))}
|
86
|
+
entries[:core] = core
|
87
|
+
end
|
88
|
+
|
89
|
+
entries
|
90
|
+
end
|
91
|
+
|
92
|
+
|
93
|
+
def generate_configs dir
|
94
|
+
config = load_config("#{dir}/config", :development)
|
95
|
+
|
96
|
+
controllers = controllers_map(dir)
|
97
|
+
webpack_entries = webpack_entries(dir, controllers)
|
98
|
+
|
99
|
+
File.open File.expand_path('config.json', dir), 'w' do |f|
|
100
|
+
f << JSON.pretty_generate({
|
101
|
+
controllers: controllers,
|
102
|
+
webpack: {
|
103
|
+
path: config[:client_path],
|
104
|
+
url: config[:client_url],
|
105
|
+
entries: webpack_entries
|
106
|
+
}
|
107
|
+
})
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
def url_pattern controller
|
112
|
+
controller.url *controller.instance_method(:get).parameters.each_with_object([]) {|param,o|
|
113
|
+
pattern = if param[0] == :rest
|
114
|
+
"*"
|
115
|
+
elsif param[0] == :req
|
116
|
+
":#{param[1]}"
|
117
|
+
elsif param[0] == :opt
|
118
|
+
":#{param[1]}?"
|
119
|
+
end
|
120
|
+
o << pattern if pattern
|
121
|
+
}
|
122
|
+
end
|
123
|
+
end
|
124
|
+
|
125
|
+
ApprilTools.generate_configs(File.expand_path('../..', __FILE__))
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# do NOT edit this file, edit base/load.rb instead
|
2
|
+
|
3
|
+
%w[
|
4
|
+
boot
|
5
|
+
../base/load
|
6
|
+
].each {|f| require File.expand_path("../#{f}", __FILE__)}
|
7
|
+
|
8
|
+
%w[
|
9
|
+
base_model.rb
|
10
|
+
*.rb
|
11
|
+
**/*.rb
|
12
|
+
].each {|p| Dir[File.expand_path("../../base/models/#{p}", __FILE__)].each {|f| require(f)}}
|
13
|
+
|
14
|
+
require File.expand_path('../load_controllers', __FILE__)
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# do NOT edit this file, edit base/load_controllers.rb instead
|
2
|
+
|
3
|
+
Dir.chdir File.expand_path('../../base/api', __FILE__) do
|
4
|
+
|
5
|
+
require './base_controller'
|
6
|
+
require './rtcp_controller'
|
7
|
+
|
8
|
+
%w[
|
9
|
+
./**/server.rb
|
10
|
+
].each_with_object([]) {|pattern,o| o.concat(Dir[pattern])}.sort {|a,b|
|
11
|
+
a.split(/\/+/).size <=> b.split(/\/+/).size
|
12
|
+
}.each {|f| require(f)}
|
13
|
+
|
14
|
+
end
|
File without changes
|
File without changes
|
File without changes
|
File without changes
|
@@ -0,0 +1,53 @@
|
|
1
|
+
var webpack = require('webpack'),
|
2
|
+
fs = require('fs'),
|
3
|
+
ExtractTextPlugin = require("extract-text-webpack-plugin"),
|
4
|
+
child_process = require('child_process')
|
5
|
+
;
|
6
|
+
|
7
|
+
if (process.env.APP_ENV == 'development') {
|
8
|
+
console.log('Generating configs...');
|
9
|
+
child_process.execSync('./core/generate_configs.rb');
|
10
|
+
}
|
11
|
+
|
12
|
+
var setup = JSON.parse(fs.readFileSync('./config.json')).webpack;
|
13
|
+
console.log(JSON.stringify(setup, null, 2))
|
14
|
+
|
15
|
+
module.exports = {
|
16
|
+
entry: setup.entries,
|
17
|
+
output: {
|
18
|
+
path: [setup.path, setup.url].join('/'),
|
19
|
+
filename: '[name].js',
|
20
|
+
publicPath: setup.url + '/', // trailing slash required
|
21
|
+
libraryTarget: 'commonjs2'
|
22
|
+
},
|
23
|
+
module: {
|
24
|
+
loaders: [
|
25
|
+
{ test: /\.coffee$/, loader: 'coffee-loader' },
|
26
|
+
{ test: /\.css$/, loader: ExtractTextPlugin.extract("style-loader", "css-loader") },
|
27
|
+
{ test: /\.json$/, loader: 'json-loader' },
|
28
|
+
{ test: /\.otf($|\?)/, loader: require.resolve('file-loader') },
|
29
|
+
{ test: /\.ttf($|\?)/, loader: require.resolve('file-loader') },
|
30
|
+
{ test: /\.eot($|\?)/, loader: require.resolve('file-loader') },
|
31
|
+
{ test: /\.svg($|\?)/, loader: require.resolve('file-loader') },
|
32
|
+
{ test: /\.png($|\?)/, loader: require.resolve('url-loader') + '?limit=10000&mimetype=image/png' },
|
33
|
+
{ test: /\.jpg($|\?)/, loader: require.resolve('file-loader') },
|
34
|
+
{ test: /\.gif($|\?)/, loader: require.resolve('file-loader') },
|
35
|
+
{ test: /\.woff[2]?($|\?)/, loader: require.resolve('url-loader') + '?limit=10000&mimetype=application/font-woff' },
|
36
|
+
]
|
37
|
+
},
|
38
|
+
resolve: {
|
39
|
+
extensions: ['', '.js', '.css', '.json', '.coffee', '.html'],
|
40
|
+
alias: {
|
41
|
+
app: __dirname,
|
42
|
+
base: 'app/base',
|
43
|
+
api: 'base/api',
|
44
|
+
helpers: 'base/helpers',
|
45
|
+
assets: 'base/assets',
|
46
|
+
templates: 'base/templates'
|
47
|
+
}
|
48
|
+
},
|
49
|
+
plugins: [
|
50
|
+
new webpack.optimize.CommonsChunkPlugin('core', 'core.js'),
|
51
|
+
new ExtractTextPlugin("[name].css")
|
52
|
+
]
|
53
|
+
}
|