appril-cli 0.0.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 +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
|
+
}
|