sombrero 0.0.1 → 0.0.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/Rakefile +1 -2
- data/app/.gitignore +6 -0
- data/app/.pryrc +1 -0
- data/app/Gemfile +6 -0
- data/app/Rakefile +1 -0
- data/app/base/base_controller.rb +3 -0
- data/app/base/boot.rb +2 -0
- data/app/base/helpers/application_helpers.rb +1 -0
- data/app/base/load_controllers.rb +2 -0
- data/app/base/rtcp_controller.rb +22 -0
- data/app/config/config.rb +11 -0
- data/app/config/config.yml +11 -0
- data/app/config/env/development.yml +0 -0
- data/app/config/env/production.yml +0 -0
- data/app/config/env/stage.yml +0 -0
- data/app/config/env/test.yml +0 -0
- data/app/config.ru +3 -0
- data/app/core/Gemfile +5 -0
- data/app/core/boot.rb +17 -0
- data/app/core/client/activity_observer.coffee +37 -0
- data/app/core/client/api.coffee +248 -0
- data/app/core/client/channels.coffee +37 -0
- data/app/core/client/load.coffee +20 -0
- data/app/core/client/page.coffee +68 -0
- data/app/core/client/polyfills/array.compact.coffee +4 -0
- data/app/core/client/polyfills/array.compact_join.coffee +4 -0
- data/app/core/client/polyfills/number.to_money.coffee +3 -0
- data/app/core/client/polyfills/string.capitalize.coffee +4 -0
- data/app/core/client/polyfills/string.strip.coffee +5 -0
- data/app/core/client/polyfills.coffee +6 -0
- data/app/core/client/render.coffee +57 -0
- data/app/core/client/util/alert.coffee +50 -0
- data/app/core/client/util/datetime.coffee +47 -0
- data/app/core/client/util.coffee +38 -0
- data/app/core/generate_controllers_map.rb +4 -0
- data/app/core/generate_webpack_setup.rb +4 -0
- data/app/core/load.rb +5 -0
- data/app/core/load_controllers.rb +16 -0
- data/app/package.json +5 -0
- data/app/webpack.config.js +51 -0
- data/bin/sombrero +5 -0
- data/docker/Dockerfile +5 -0
- data/docker/base/Dockerfile +3 -0
- data/docker/base/build +10 -0
- data/docker/base/build.sh +25 -0
- data/docker/cleanup +7 -0
- data/docker/run +68 -0
- data/docker/skel/build.sh +1 -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/sombrero/{version.rb → app.rb} +3 -1
- data/lib/sombrero/base_controller.rb +5 -0
- data/lib/sombrero/cli/app/install.rb +38 -0
- data/lib/sombrero/cli/app/update.rb +20 -0
- data/lib/sombrero/cli/app.rb +10 -0
- data/lib/sombrero/cli/docker/build.rb +170 -0
- data/lib/sombrero/cli/docker/install.rb +23 -0
- data/lib/sombrero/cli/docker.rb +14 -0
- data/lib/sombrero/cli.rb +128 -0
- data/lib/sombrero/rtcp_controller.rb +93 -0
- data/lib/sombrero.rb +110 -2
- data/sombrero.gemspec +6 -1
- metadata +91 -4
@@ -0,0 +1,23 @@
|
|
1
|
+
module Sombrero
|
2
|
+
class CLI
|
3
|
+
module Docker
|
4
|
+
class Install
|
5
|
+
include InstallHelpers
|
6
|
+
|
7
|
+
def initialize dir
|
8
|
+
ensure_dirname_exists(dir)
|
9
|
+
assert_installable_dir(dir)
|
10
|
+
install(dir)
|
11
|
+
end
|
12
|
+
|
13
|
+
def install dir
|
14
|
+
src = dir.to_path == '.' ? BASE_DIR.to_path + '/skel/.' : BASE_DIR / 'skel'
|
15
|
+
FileUtils.cp_r(src, dir)
|
16
|
+
FileUtils.chmod('+x', dir / PREPARE_BUILD_FILE)
|
17
|
+
puts "Done. All files installed into #{dir}"
|
18
|
+
end
|
19
|
+
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Sombrero
|
2
|
+
class CLI
|
3
|
+
module Docker
|
4
|
+
BASE_DIR = (Sombrero::BASE_DIR / 'docker').freeze
|
5
|
+
CONFIG_FILE = './config.yml'.freeze
|
6
|
+
START_FILE = './start.sh'.freeze
|
7
|
+
PREPARE_BUILD_FILE = './prepare_build.sh'.freeze
|
8
|
+
BUILD_FILE = './build.sh'.freeze
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
require 'sombrero/cli/docker/install'
|
14
|
+
require 'sombrero/cli/docker/build'
|
data/lib/sombrero/cli.rb
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
require 'fileutils'
|
2
|
+
require 'pathname'
|
3
|
+
require 'yaml'
|
4
|
+
require 'pty'
|
5
|
+
|
6
|
+
module Sombrero
|
7
|
+
BASE_DIR = Pathname.new(File.expand_path('../../..', __FILE__)).freeze
|
8
|
+
|
9
|
+
class CLI
|
10
|
+
module InstallHelpers
|
11
|
+
|
12
|
+
def ensure_dirname_exists dir
|
13
|
+
FileUtils.mkdir_p(File.dirname(dir))
|
14
|
+
end
|
15
|
+
|
16
|
+
def assert_installable_dir dir
|
17
|
+
if dir.to_path == '.'
|
18
|
+
assert_empty_dir(dir)
|
19
|
+
else
|
20
|
+
assert_dir_does_not_exists(dir)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def assert_empty_dir dir
|
25
|
+
return if Dir[dir / '*'].empty?
|
26
|
+
puts "", "\t::: #{dir} should be empty :::", ""
|
27
|
+
exit 1
|
28
|
+
end
|
29
|
+
|
30
|
+
def assert_dir_does_not_exists dir
|
31
|
+
return unless File.exists?(dir)
|
32
|
+
puts "", "\t::: #{dir} already exists :::", ""
|
33
|
+
exit 1
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
def initialize args
|
38
|
+
case command = args[0]
|
39
|
+
when 'a', 'app'
|
40
|
+
app(args)
|
41
|
+
when 'd', 'docker'
|
42
|
+
docker(args)
|
43
|
+
else
|
44
|
+
unknown_command_error!(command)
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
def app args
|
49
|
+
missing_destination_error! unless args[2]
|
50
|
+
dir = Pathname.new(args[2])
|
51
|
+
|
52
|
+
case instruction = args[1]
|
53
|
+
when 'i', 'install'
|
54
|
+
App::Install.new(dir, extract_namespace(args))
|
55
|
+
when 'u', 'update'
|
56
|
+
App::Update.new(dir, args)
|
57
|
+
else
|
58
|
+
unknown_instruction_error!(instruction, 'install or (i)', 'update or (u)')
|
59
|
+
end
|
60
|
+
end
|
61
|
+
|
62
|
+
def extract_namespace args
|
63
|
+
return unless index = args.index('-n')
|
64
|
+
return unless namespace = args[index + 1]
|
65
|
+
if namespace =~ /::/
|
66
|
+
puts "", "\t::: Nested namespaces not supported :::", ""
|
67
|
+
exit 1
|
68
|
+
end
|
69
|
+
if namespace =~ /\W/
|
70
|
+
puts "", "\t::: Namespace may contain only alphanumerics :::", ""
|
71
|
+
exit 1
|
72
|
+
end
|
73
|
+
unless namespace =~ /\A[A-Z]/
|
74
|
+
puts "", "\t::: Namespace should start with a capital letter :::", ""
|
75
|
+
exit 1
|
76
|
+
end
|
77
|
+
namespace
|
78
|
+
end
|
79
|
+
|
80
|
+
def docker args
|
81
|
+
missing_destination_error! unless args[2]
|
82
|
+
dir = Pathname.new(args[2])
|
83
|
+
|
84
|
+
case instruction = args[1]
|
85
|
+
when 'i', 'install'
|
86
|
+
Docker::Install.new(dir)
|
87
|
+
when 'b', 'build'
|
88
|
+
Docker::Build.new(dir, args)
|
89
|
+
else
|
90
|
+
unknown_instruction_error!(instruction, 'install or (i)', 'build or (b)')
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
def missing_destination_error!
|
95
|
+
puts "", "\t::: Please provide a directory to install files into :::", ""
|
96
|
+
exit 1
|
97
|
+
end
|
98
|
+
|
99
|
+
def unknown_command_error! command, *available_commands
|
100
|
+
puts "", "\t::: Unknown command #{command}. Use one of #{available_commands*', '} :::", ""
|
101
|
+
exit 1
|
102
|
+
end
|
103
|
+
|
104
|
+
def unknown_instruction_error! instruction, *available_instructions
|
105
|
+
puts "", "\t::: Unknown instruction #{instruction}. Use one of #{available_instructions*', '} :::", ""
|
106
|
+
exit 1
|
107
|
+
end
|
108
|
+
|
109
|
+
def self.run cmd
|
110
|
+
puts "", "$ #{cmd}"
|
111
|
+
PTY.spawn cmd do |r, w, pid|
|
112
|
+
begin
|
113
|
+
r.sync
|
114
|
+
r.each_char do |char|
|
115
|
+
print(char)
|
116
|
+
end
|
117
|
+
rescue Errno::EIO => e
|
118
|
+
# simply ignoring this
|
119
|
+
ensure
|
120
|
+
Process.wait(pid)
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|
124
|
+
end
|
125
|
+
end
|
126
|
+
|
127
|
+
require 'sombrero/cli/app'
|
128
|
+
require 'sombrero/cli/docker'
|
@@ -0,0 +1,93 @@
|
|
1
|
+
# dirty hack until this is merged and released
|
2
|
+
# github.com/ngauthier/tubesock/pull/50
|
3
|
+
class Tubesock
|
4
|
+
def close!
|
5
|
+
if @socket.respond_to?(:closed?)
|
6
|
+
@socket.close unless @socket.closed?
|
7
|
+
else
|
8
|
+
@socket.close
|
9
|
+
end
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
module Sombrero
|
14
|
+
class RTCPController < BaseController
|
15
|
+
attr_reader :socket
|
16
|
+
|
17
|
+
def get
|
18
|
+
return unless websocket?
|
19
|
+
|
20
|
+
@router = RocketIO::Router.new(*RocketIO.controllers)
|
21
|
+
|
22
|
+
@socket = Tubesock.hijack(env)
|
23
|
+
@socket.onopen(&method(:on_open))
|
24
|
+
@socket.onmessage(&method(:on_message))
|
25
|
+
@socket.onclose(&method(:on_close))
|
26
|
+
@socket.listen
|
27
|
+
|
28
|
+
halt websocket_response
|
29
|
+
end
|
30
|
+
|
31
|
+
private
|
32
|
+
|
33
|
+
def on_open
|
34
|
+
connected
|
35
|
+
write(serial: 0, data: initialization_data.update(__initialization_data__))
|
36
|
+
end
|
37
|
+
|
38
|
+
def __initialization_data__
|
39
|
+
{
|
40
|
+
app_url: Cfg.app[:url][RocketIO.environment] || Cfg.app[:url][:development]
|
41
|
+
}
|
42
|
+
end
|
43
|
+
|
44
|
+
def on_message msg
|
45
|
+
|
46
|
+
msg = indifferent_params(JSON.parse(msg))
|
47
|
+
if controller = resolve_controller(msg[:controller])
|
48
|
+
status, _, body = call_controller(controller, msg[:method], msg[:arguments])
|
49
|
+
if status == 200
|
50
|
+
write(serial: msg[:serial], data: body) if msg[:reply]
|
51
|
+
return
|
52
|
+
end
|
53
|
+
else
|
54
|
+
body = '404: Not Found'
|
55
|
+
end
|
56
|
+
|
57
|
+
error = if body.is_a?(Array) && body.size == 1
|
58
|
+
body[0]
|
59
|
+
else
|
60
|
+
body
|
61
|
+
end
|
62
|
+
|
63
|
+
if msg && msg[:serial]
|
64
|
+
write(serial: msg[:serial], data: {__rtcp_error__: error})
|
65
|
+
else
|
66
|
+
write(error: error)
|
67
|
+
end
|
68
|
+
|
69
|
+
rescue Errno::EPIPE => e
|
70
|
+
close
|
71
|
+
rescue Exception => e
|
72
|
+
__error__(500, e)
|
73
|
+
end
|
74
|
+
|
75
|
+
def on_close
|
76
|
+
@socket.close! if @socket
|
77
|
+
@socket, @user, @router = nil
|
78
|
+
disconnected
|
79
|
+
end
|
80
|
+
|
81
|
+
def resolve_controller url
|
82
|
+
@router.resolve_path(url)[0]
|
83
|
+
end
|
84
|
+
|
85
|
+
def call_controller controller, method, arguments
|
86
|
+
controller.initialize_controller(method, arguments).call(env.merge(rtcp_env))
|
87
|
+
end
|
88
|
+
|
89
|
+
def write data
|
90
|
+
@socket.send_data(data.to_json)
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
data/lib/sombrero.rb
CHANGED
@@ -1,5 +1,113 @@
|
|
1
|
-
require
|
1
|
+
require 'rocketio'
|
2
2
|
|
3
3
|
module Sombrero
|
4
|
-
|
4
|
+
extend self
|
5
|
+
|
6
|
+
def load_config dir, env = RocketIO.environment
|
7
|
+
|
8
|
+
config = load_config_file("#{dir}/config.yml")
|
9
|
+
config.update(load_config_file("#{dir}/env/#{env}.yml"))
|
10
|
+
config[:environment] = env.to_s.freeze
|
11
|
+
|
12
|
+
Dir["#{dir}/**/*.yml"].each do |file|
|
13
|
+
next if File.dirname(file) == './env'
|
14
|
+
|
15
|
+
key = File.basename(file, '.yml')
|
16
|
+
next if key == 'config' || key == 'sombrero'
|
17
|
+
|
18
|
+
key_config = load_config_file(file)
|
19
|
+
key_config_keys = key_config.keys.map(&:to_s)
|
20
|
+
|
21
|
+
config[key] = if key_config_keys.include?(env.to_s)
|
22
|
+
# current environment found, use it
|
23
|
+
key_config[env]
|
24
|
+
else
|
25
|
+
if RocketIO::ENVIRONMENTS.keys.find {|k| key_config_keys.include?(k)}
|
26
|
+
# there are some environment(s), but no current one so set current environment to nil
|
27
|
+
nil
|
28
|
+
else
|
29
|
+
# there are no environments, so this config is available on any environment
|
30
|
+
key_config
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
end
|
35
|
+
|
36
|
+
def config.method_missing key
|
37
|
+
self[key]
|
38
|
+
end
|
39
|
+
|
40
|
+
config
|
41
|
+
end
|
42
|
+
|
43
|
+
def load_config_file file
|
44
|
+
RocketIO.indifferent_params(YAML.load(File.read(file)) || {})
|
45
|
+
end
|
46
|
+
|
47
|
+
def generate_controllers_map dir
|
48
|
+
File.open File.expand_path('controllers.json', dir), 'w' do |f|
|
49
|
+
f << controllers_map(dir).to_json
|
50
|
+
end
|
51
|
+
end
|
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.dirname[path_to_api]
|
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
|
66
|
+
end
|
67
|
+
|
68
|
+
def generate_webpack_setup dir
|
69
|
+
config = load_config_file(File.expand_path('config/config.yml', dir))
|
70
|
+
|
71
|
+
entries = controllers_map(dir).each_with_object({}) do |controller,o|
|
72
|
+
|
73
|
+
next unless entry = %w[
|
74
|
+
./base/api/%s/client.js
|
75
|
+
./base/api/%s/client.coffee
|
76
|
+
].map {|p| p % controller[:path]}.find {|f| File.file?(File.expand_path(f, dir))}
|
77
|
+
|
78
|
+
o[controller[:path]] = File.join('./base/api', controller[:path], File.basename(entry))
|
79
|
+
end
|
80
|
+
|
81
|
+
if core = %w[
|
82
|
+
./base/core.js
|
83
|
+
./base/core.coffee
|
84
|
+
].find {|f| File.file?(File.expand_path(f, dir))}
|
85
|
+
entries[:core] = core
|
86
|
+
end
|
87
|
+
|
88
|
+
File.open File.expand_path('webpack_setup.json', dir), 'w' do |f|
|
89
|
+
f << {
|
90
|
+
path: config[:app][:dir],
|
91
|
+
url: config[:app][:url][:development],
|
92
|
+
entries: entries
|
93
|
+
}.to_json
|
94
|
+
end
|
95
|
+
end
|
96
|
+
|
97
|
+
def url_pattern controller
|
98
|
+
controller.url *controller.instance_method(:get).parameters.each_with_object([]) {|param,o|
|
99
|
+
pattern = if param[0] == :rest
|
100
|
+
"*"
|
101
|
+
elsif param[0] == :req
|
102
|
+
":#{param[1]}"
|
103
|
+
elsif param[0] == :opt
|
104
|
+
":#{param[1]}?"
|
105
|
+
end
|
106
|
+
o << pattern if pattern
|
107
|
+
}
|
108
|
+
end
|
109
|
+
|
5
110
|
end
|
111
|
+
|
112
|
+
require 'sombrero/base_controller'
|
113
|
+
require 'sombrero/rtcp_controller'
|
data/sombrero.gemspec
CHANGED
@@ -1,7 +1,10 @@
|
|
1
1
|
# coding: utf-8
|
2
2
|
|
3
3
|
Gem::Specification.new do |spec|
|
4
|
-
spec.name, spec.version = %w[
|
4
|
+
spec.name, spec.version = %w[
|
5
|
+
sombrero
|
6
|
+
0.0.2
|
7
|
+
]
|
5
8
|
spec.authors = ['Slee Woo']
|
6
9
|
spec.email = ['mail@sleewoo.com']
|
7
10
|
spec.summary = [spec.name, spec.version]*'-',
|
@@ -16,4 +19,6 @@ Gem::Specification.new do |spec|
|
|
16
19
|
spec.required_ruby_version = '~> 2.0'
|
17
20
|
|
18
21
|
spec.add_runtime_dependency 'rocketio', '~> 0'
|
22
|
+
spec.add_development_dependency 'pry'
|
23
|
+
spec.add_development_dependency 'pry-byebug'
|
19
24
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: sombrero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Slee Woo
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-02
|
11
|
+
date: 2016-03-02 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rocketio
|
@@ -24,6 +24,34 @@ dependencies:
|
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: pry
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: pry-byebug
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - ">="
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
27
55
|
description: Opinionated stack for building opinionated web applications
|
28
56
|
email:
|
29
57
|
- mail@sleewoo.com
|
@@ -37,9 +65,68 @@ files:
|
|
37
65
|
- LICENSE.txt
|
38
66
|
- README.md
|
39
67
|
- Rakefile
|
68
|
+
- app/.gitignore
|
69
|
+
- app/.pryrc
|
70
|
+
- app/Gemfile
|
71
|
+
- app/Rakefile
|
72
|
+
- app/base/base_controller.rb
|
73
|
+
- app/base/boot.rb
|
74
|
+
- app/base/helpers/application_helpers.rb
|
75
|
+
- app/base/load_controllers.rb
|
76
|
+
- app/base/rtcp_controller.rb
|
77
|
+
- app/config.ru
|
78
|
+
- app/config/config.rb
|
79
|
+
- app/config/config.yml
|
80
|
+
- app/config/env/development.yml
|
81
|
+
- app/config/env/production.yml
|
82
|
+
- app/config/env/stage.yml
|
83
|
+
- app/config/env/test.yml
|
84
|
+
- app/core/Gemfile
|
85
|
+
- app/core/boot.rb
|
86
|
+
- app/core/client/activity_observer.coffee
|
87
|
+
- app/core/client/api.coffee
|
88
|
+
- app/core/client/channels.coffee
|
89
|
+
- app/core/client/load.coffee
|
90
|
+
- app/core/client/page.coffee
|
91
|
+
- app/core/client/polyfills.coffee
|
92
|
+
- app/core/client/polyfills/array.compact.coffee
|
93
|
+
- app/core/client/polyfills/array.compact_join.coffee
|
94
|
+
- app/core/client/polyfills/number.to_money.coffee
|
95
|
+
- app/core/client/polyfills/string.capitalize.coffee
|
96
|
+
- app/core/client/polyfills/string.strip.coffee
|
97
|
+
- app/core/client/render.coffee
|
98
|
+
- app/core/client/util.coffee
|
99
|
+
- app/core/client/util/alert.coffee
|
100
|
+
- app/core/client/util/datetime.coffee
|
101
|
+
- app/core/generate_controllers_map.rb
|
102
|
+
- app/core/generate_webpack_setup.rb
|
103
|
+
- app/core/load.rb
|
104
|
+
- app/core/load_controllers.rb
|
105
|
+
- app/package.json
|
106
|
+
- app/webpack.config.js
|
40
107
|
- bin/sombrero
|
108
|
+
- docker/Dockerfile
|
109
|
+
- docker/base/Dockerfile
|
110
|
+
- docker/base/build
|
111
|
+
- docker/base/build.sh
|
112
|
+
- docker/cleanup
|
113
|
+
- docker/run
|
114
|
+
- docker/skel/build.sh
|
115
|
+
- docker/skel/config.yml
|
116
|
+
- docker/skel/prepare_build.sh
|
117
|
+
- docker/skel/start.sh
|
118
|
+
- docker/start
|
41
119
|
- lib/sombrero.rb
|
42
|
-
- lib/sombrero/
|
120
|
+
- lib/sombrero/app.rb
|
121
|
+
- lib/sombrero/base_controller.rb
|
122
|
+
- lib/sombrero/cli.rb
|
123
|
+
- lib/sombrero/cli/app.rb
|
124
|
+
- lib/sombrero/cli/app/install.rb
|
125
|
+
- lib/sombrero/cli/app/update.rb
|
126
|
+
- lib/sombrero/cli/docker.rb
|
127
|
+
- lib/sombrero/cli/docker/build.rb
|
128
|
+
- lib/sombrero/cli/docker/install.rb
|
129
|
+
- lib/sombrero/rtcp_controller.rb
|
43
130
|
- sombrero.gemspec
|
44
131
|
homepage: https://github.com/sleewoo/sombrero
|
45
132
|
licenses:
|
@@ -64,5 +151,5 @@ rubyforge_project:
|
|
64
151
|
rubygems_version: 2.5.1
|
65
152
|
signing_key:
|
66
153
|
specification_version: 4
|
67
|
-
summary: '["sombrero-0.0.
|
154
|
+
summary: '["sombrero-0.0.2", "Opinionated stack for building opinionated web applications"]'
|
68
155
|
test_files: []
|