sombrero 0.0.3 → 0.0.5

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.
Files changed (36) hide show
  1. checksums.yaml +4 -4
  2. data/app/package.json +1 -1
  3. data/app/webpack.config.js +1 -2
  4. data/docker/base/build.sh +2 -4
  5. data/docker/{cleanup → skel/cleanup.sh} +0 -0
  6. data/lib/sombrero/cli/app/install.rb +21 -22
  7. data/lib/sombrero/cli/app/update.rb +12 -6
  8. data/lib/sombrero/cli/assertions.rb +60 -0
  9. data/lib/sombrero/cli/docker/build.rb +7 -27
  10. data/lib/sombrero/cli/docker/install.rb +7 -9
  11. data/lib/sombrero/cli/docker/update.rb +24 -0
  12. data/lib/sombrero/cli/docker.rb +2 -0
  13. data/lib/sombrero/cli/generator.rb +15 -0
  14. data/lib/sombrero/cli/helpers.rb +47 -0
  15. data/lib/sombrero/cli.rb +136 -70
  16. data/lib/sombrero/rtcp_controller.rb +0 -12
  17. data/sombrero.gemspec +1 -1
  18. metadata +8 -22
  19. data/.gitignore +0 -10
  20. data/LICENSE.txt +0 -21
  21. data/README.md +0 -41
  22. data/app/core/client/activity_observer.coffee +0 -37
  23. data/app/core/client/api.coffee +0 -248
  24. data/app/core/client/channels.coffee +0 -37
  25. data/app/core/client/load.coffee +0 -20
  26. data/app/core/client/page.coffee +0 -68
  27. data/app/core/client/polyfills/array.compact.coffee +0 -4
  28. data/app/core/client/polyfills/array.compact_join.coffee +0 -4
  29. data/app/core/client/polyfills/number.to_money.coffee +0 -3
  30. data/app/core/client/polyfills/string.capitalize.coffee +0 -4
  31. data/app/core/client/polyfills/string.strip.coffee +0 -5
  32. data/app/core/client/polyfills.coffee +0 -6
  33. data/app/core/client/render.coffee +0 -57
  34. data/app/core/client/util/alert.coffee +0 -50
  35. data/app/core/client/util/datetime.coffee +0 -47
  36. data/app/core/client/util.coffee +0 -38
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 51dd5e5538976b9b9aa7f5a00418977a64fa681d
4
- data.tar.gz: f6d7efa85002ef65ac32062f93a9011da236c34b
3
+ metadata.gz: a5b002e39512744bcfd75b264bf2cd820fcff6a6
4
+ data.tar.gz: 626e16bd372b366c5ffb30cddbb8d2cb1756e704
5
5
  SHA512:
6
- metadata.gz: a16bcd25b06c8f693d7deea1f2720c8e7bb94a8c1a1bf6a00cf935f3e072694818bbb06eeb3b6338bd70b4c1ad62f2a8a682a3e1a8c9ef75014d1a65f030d3ea
7
- data.tar.gz: ca2ca051ddebac6a4e40b10e1d3253c4c571f509cc447fb509442206b7900c455576b6685b14914b13a433468de52a758630e8224203f6f23253f407cc73877b
6
+ metadata.gz: 0e14d044b87844c5fca8b44a028832fadf43981bc91d5d14b718cb14e7ec51d2d56771f4c29d5dcab4a2592aa073c9a08bba07e3203911104dce58172565517a
7
+ data.tar.gz: 51f1eaf67c0313e120428138de8f78a410af012021daf46b7a383832048e6918760d12e3232f6a2f29b89b5e6b20b77da6de37cb285962198ce3011f3414e788
data/app/package.json CHANGED
@@ -1,5 +1,5 @@
1
1
  {
2
2
  "dependencies": {
3
-
3
+ "sombrero": "*"
4
4
  }
5
5
  }
@@ -39,9 +39,8 @@ module.exports = {
39
39
  resolve: {
40
40
  extensions: ['', '.js', '.css', '.json', '.coffee', '.html'],
41
41
  alias: {
42
- core: __dirname + '/core/client',
43
42
  base: __dirname + '/base',
44
- api: __dirname + '/base/api',
43
+ api: 'base/api',
45
44
  }
46
45
  },
47
46
  plugins: [
data/docker/base/build.sh CHANGED
@@ -15,11 +15,9 @@ echo "http://dl-4.alpinelinux.org/alpine/edge/testing" >> /etc/apk/repositories
15
15
  apk update
16
16
  apk upgrade
17
17
 
18
- apk add build-base runit nmap-ncat libxml2 libxml2-dev libxslt libxslt-dev \
18
+ apk add build-base runit curl nmap-ncat \
19
19
  ruby ruby-dev ruby-irb ruby-io-console ruby-bigdecimal \
20
- nodejs nodejs-dev python git \
21
- redis libpq postgresql-dev \
22
- imagemagick imagemagick-dev
20
+ nodejs nodejs-dev
23
21
 
24
22
  curl -fsSL curl.haxx.se/ca/cacert.pem -o "$(ruby -ropenssl -e 'puts OpenSSL::X509::DEFAULT_CERT_FILE')"
25
23
  echo 'gem: --no-ri --no-rdoc' > /root/.gemrc
File without changes
@@ -2,34 +2,33 @@ module Sombrero
2
2
  class CLI
3
3
  class App
4
4
  class Install
5
- include InstallHelpers
5
+ include Helpers
6
6
 
7
- def initialize dir, namespace
8
- ensure_dirname_exists(dir)
9
- assert_installable_dir(dir)
10
- install(dir, namespace)
7
+ def initialize dir, namespace: nil, working_dir_opted: false
8
+ install(dir, working_dir_opted)
9
+ make_executable(dir / 'core/generate_webpack_setup.rb', dir / 'core/generate_controllers_map.rb')
10
+ add_namespace(dir, namespace) if namespace
11
+ puts "Done. All files installed into #{dir}"
11
12
  end
12
13
 
13
- def install dir, namespace
14
- src = dir.to_path == '.' ? BASE_DIR.to_path + '/.' : BASE_DIR
14
+ def install dir, working_dir_opted
15
+ src = working_dir_opted ? BASE_DIR.to_path + '/.' : BASE_DIR
15
16
  FileUtils.cp_r(src, dir)
16
- FileUtils.chmod('+x', dir / 'core/generate_webpack_setup.rb')
17
- FileUtils.chmod('+x', dir / 'core/generate_controllers_map.rb')
18
- if namespace
19
- %w[
20
- base/base_controller.rb
21
- base/rtcp_controller.rb
22
- config/config.rb
23
- ].each do |file|
24
- code = File.read(dir / file)
25
- File.open dir / file, 'w' do |f|
26
- f.puts "module #{namespace}"
27
- code.split("\n").each {|l| f.puts " #{l}"}
28
- f.puts "end"
29
- end
17
+ end
18
+
19
+ def add_namespace dir, namespace
20
+ %w[
21
+ base/base_controller.rb
22
+ base/rtcp_controller.rb
23
+ config/config.rb
24
+ ].each do |file|
25
+ code = File.read(dir / file)
26
+ File.open dir / file, 'w' do |f|
27
+ f.puts "module #{namespace}"
28
+ code.split("\n").each {|l| f.puts " #{l}"}
29
+ f.puts "end"
30
30
  end
31
31
  end
32
- puts "Done. All files installed into #{dir}"
33
32
  end
34
33
 
35
34
  end
@@ -2,18 +2,24 @@ module Sombrero
2
2
  class CLI
3
3
  class App
4
4
  class Update
5
+ include Helpers
5
6
 
6
7
  def initialize dir
7
- assert_is_a_sombrero_dir(dir)
8
- end
8
+ FileUtils.rm_rf(dir / 'core')
9
+ Dir.chdir BASE_DIR do
9
10
 
10
- def assert_is_a_sombrero_dir dir
11
+ Dir['**/*'].select {|e| File.file?(e)}.each do |file|
12
+ next if File.file?(dir / file)
13
+ create_dirname_for(dir / file)
14
+ puts "Installing #{File.basename(dir)}/#{file}"
15
+ FileUtils.cp(file, dir / file)
16
+ end
11
17
 
18
+ end
19
+ make_executable(dir / 'core/generate_webpack_setup.rb', dir / 'core/generate_controllers_map.rb')
20
+ puts "Done"
12
21
  end
13
22
 
14
- def update
15
-
16
- end
17
23
  end
18
24
  end
19
25
  end
@@ -0,0 +1,60 @@
1
+ module Sombrero
2
+ class CLI
3
+ module Assertions
4
+
5
+ def assert_directory_provided dir
6
+ return if dir
7
+ fatal_error! "Please provide a directory"
8
+ end
9
+
10
+ def assert_installable_dir dir, working_dir_opted
11
+ if working_dir_opted
12
+ assert_empty_directory(dir)
13
+ else
14
+ assert_directory_does_not_exists(dir)
15
+ end
16
+ end
17
+
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 Sombrero docker dir"
21
+ end
22
+
23
+ def assert_is_app_dir dir
24
+ return if %w[
25
+ core
26
+ base/api
27
+ config
28
+ ].all? {|e| File.exists?(dir / e)}
29
+ fatal_error! "#{dir} does not look like a Sombrero app dir"
30
+ end
31
+
32
+ def assert_empty_directory dir
33
+ return if Dir[dir / '*'].empty?
34
+ fatal_error! "#{dir} should be empty"
35
+ end
36
+
37
+ def assert_directory_exists dir
38
+ return if File.directory?(dir)
39
+ fatal_error! "#{dir} should be a directory"
40
+ end
41
+
42
+ def assert_directory_does_not_exists dir
43
+ return unless File.exists?(dir)
44
+ fatal_error! "#{dir} already exists"
45
+ end
46
+
47
+ def assert_config_file_exists dir
48
+ return if File.file?(dir / Docker::CONFIG_FILE)
49
+ fatal_error! "#{dir / Docker::CONFIG_FILE} file is missing"
50
+ end
51
+
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
+ end
59
+ end
60
+ end
@@ -3,11 +3,8 @@ module Sombrero
3
3
  module Docker
4
4
  class Build
5
5
 
6
- def initialize dir, args
7
- check_working_dir(dir)
8
-
6
+ def initialize dir, update_runner_only: false, push_opted: false
9
7
  Dir.chdir dir do
10
- check_config_file
11
8
 
12
9
  config = load_config
13
10
  validate_config(config)
@@ -20,42 +17,25 @@ module Sombrero
20
17
 
21
18
  app_dir = Pathname.new(File.expand_path(config['APP_DIR']))
22
19
 
23
- unless skip_build?(args)
20
+ if update_runner_only
21
+ puts "Skipping image building"
22
+ else
24
23
  prepare_build(build_dir, app_dir)
25
24
 
26
25
  image_built = build_image(build_dir, config['IMAGE_NAME'], config['BUILD_OPTS'])
27
26
 
28
- if image_built && push_opted?(args)
27
+ if image_built && push_opted
29
28
  push_image(config['IMAGE_NAME'])
30
29
  end
31
30
  end
32
31
 
32
+ puts "Installing run script"
33
33
  install_run_script(app_dir, *config.values_at('IMAGE_NAME', 'CONTAINER_NAME', 'RUN_SCRIPT', 'RUN_OPTS'))
34
34
 
35
35
  FileUtils.rm_rf(build_dir)
36
36
  end
37
37
  end
38
38
 
39
- def push_opted? args
40
- args.find {|a| a == '-p'}
41
- end
42
-
43
- def skip_build? args
44
- args.find {|a| a == '-u'}
45
- end
46
-
47
- def check_working_dir dir
48
- return if File.directory?(dir)
49
- puts "#{dir} should be a directory"
50
- exit 1
51
- end
52
-
53
- def check_config_file
54
- return if File.file?(CONFIG_FILE)
55
- puts "#{dir}/config.yml file is missing"
56
- exit 1
57
- end
58
-
59
39
  def load_config
60
40
  YAML.load(File.read(CONFIG_FILE))
61
41
  end
@@ -117,7 +97,7 @@ module Sombrero
117
97
  end
118
98
 
119
99
  def install_cleanup_file dir
120
- FileUtils.cp(BASE_DIR / 'cleanup', dir / 'build')
100
+ FileUtils.cp(CLEANUP_FILE, dir / 'build/cleanup')
121
101
  end
122
102
 
123
103
  def prepare_build dir, app_dir
@@ -2,19 +2,17 @@ module Sombrero
2
2
  class CLI
3
3
  module Docker
4
4
  class Install
5
- include InstallHelpers
5
+ include Helpers
6
6
 
7
- def initialize dir
8
- ensure_dirname_exists(dir)
9
- assert_installable_dir(dir)
10
- install(dir)
7
+ def initialize dir, working_dir_opted: false
8
+ install(dir, working_dir_opted)
9
+ make_executable(dir / PREPARE_BUILD_FILE)
10
+ puts "Done. All files installed into #{dir}"
11
11
  end
12
12
 
13
- def install dir
14
- src = dir.to_path == '.' ? BASE_DIR.to_path + '/skel/.' : BASE_DIR / 'skel'
13
+ def install dir, working_dir_opted
14
+ src = working_dir_opted ? BASE_DIR.to_path + '/skel/.' : BASE_DIR / 'skel'
15
15
  FileUtils.cp_r(src, dir)
16
- FileUtils.chmod('+x', dir / PREPARE_BUILD_FILE)
17
- puts "Done. All files installed into #{dir}"
18
16
  end
19
17
 
20
18
  end
@@ -0,0 +1,24 @@
1
+ module Sombrero
2
+ class CLI
3
+ module Docker
4
+ class Update
5
+ include Helpers
6
+
7
+ def initialize dir
8
+ Dir.chdir BASE_DIR / 'skel' do
9
+
10
+ Dir['**/*'].select {|e| File.file?(e)}.each do |file|
11
+ next if File.file?(dir / file)
12
+ create_dirname_for(dir / file)
13
+ puts "Installing #{File.basename(dir)}/#{file}"
14
+ FileUtils.cp(file, dir / file)
15
+ end
16
+
17
+ end
18
+ puts "Done"
19
+ end
20
+
21
+ end
22
+ end
23
+ end
24
+ end
@@ -6,9 +6,11 @@ module Sombrero
6
6
  START_FILE = './start.sh'.freeze
7
7
  PREPARE_BUILD_FILE = './prepare_build.sh'.freeze
8
8
  BUILD_FILE = './build.sh'.freeze
9
+ CLEANUP_FILE = './cleanup.sh'.freeze
9
10
  end
10
11
  end
11
12
  end
12
13
 
13
14
  require 'sombrero/cli/docker/install'
14
15
  require 'sombrero/cli/docker/build'
16
+ require 'sombrero/cli/docker/update'
@@ -0,0 +1,15 @@
1
+ module Sombrero
2
+ class CLI
3
+ class Generator
4
+ class API
5
+ include Helpers
6
+
7
+ def initialize gen_dir, api_dir, api_name
8
+ FileUtils.cp_r(gen_dir, api_dir)
9
+ puts "Done"
10
+ end
11
+
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,47 @@
1
+ module Sombrero
2
+ class CLI
3
+ module Helpers
4
+
5
+ def display_error error
6
+ puts "", "\t::: #{error} :::", ""
7
+ end
8
+
9
+ def fatal_error! error, exit_code = 1
10
+ display_error(error)
11
+ exit exit_code
12
+ end
13
+
14
+ def expanded_path *path
15
+ Pathname.new(File.expand_path(File.join(*path.map(&:to_s))))
16
+ end
17
+
18
+ def create_dirname_for dir
19
+ FileUtils.mkdir_p(File.dirname(dir))
20
+ end
21
+
22
+ def make_executable *entries
23
+ entries.flatten.each {|e| FileUtils.chmod('+x', e)}
24
+ end
25
+
26
+ def working_dir_opted? opted_dir
27
+ opted_dir == '.'
28
+ end
29
+
30
+ def extract_namespace args
31
+ return unless index = args.index('-n')
32
+ return unless namespace = args[index + 1]
33
+ if namespace =~ /::/
34
+ fatal_error! "Nested namespaces not supported"
35
+ end
36
+ if namespace =~ /\W/
37
+ fatal_error! "Namespace may contain only alphanumerics"
38
+ end
39
+ unless namespace =~ /\A[A-Z]/
40
+ fatal_error! "Namespace should start with a capital letter"
41
+ end
42
+ namespace
43
+ end
44
+
45
+ end
46
+ end
47
+ end
data/lib/sombrero/cli.rb CHANGED
@@ -2,110 +2,175 @@ require 'fileutils'
2
2
  require 'pathname'
3
3
  require 'yaml'
4
4
  require 'pty'
5
+ require 'sombrero/cli/helpers'
6
+ require 'sombrero/cli/assertions'
5
7
 
6
8
  module Sombrero
7
9
  BASE_DIR = Pathname.new(File.expand_path('../../..', __FILE__)).freeze
8
10
 
9
11
  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
12
+ include Helpers
13
+ include Assertions
36
14
 
37
15
  def initialize args
38
16
  case command = args[0]
39
17
  when 'a', 'app'
40
18
  app(args)
19
+ when 'g', 'gen', 'generate'
20
+ generator(args)
41
21
  when 'd', 'docker'
42
22
  docker(args)
23
+ when nil, '-h', '--help'
24
+ usage
43
25
  else
44
- unknown_command_error!(command)
26
+ display_error "Unknown command #{command}"
27
+ usage
45
28
  end
46
29
  end
47
30
 
48
- def app args
49
- missing_destination_error! unless args[2]
50
- dir = Pathname.new(args[2])
51
31
 
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
32
+ def usage
33
+ puts "
34
+ === Install a new app ===
35
+ $ sombrero [app || a] [install || i] [dir || .]
36
+
37
+ === Update existing app ===
38
+ $ sombrero [app || a] [update || u] [dir || .]
39
+
40
+ === Generate a new API ===
41
+ $ sombrero [generate || g] [api || a] [api name] [dir || .]
42
+
43
+ === Install Docker recipes ===
44
+ $ sombrero [docker || d] [install || i] [dir || .]
45
+
46
+ === Update Docker recipes ===
47
+ $ sombrero [docker || d] [update || u] [dir || .]
48
+
49
+ === Build Docker image and install run script ===
50
+ $ sombrero [docker || d] [build || b] [dir || .] [-u] [-p]
51
+ If -u option provided it will only update the run script without building the image.
52
+ If -p option provided it will try to push the image to Docker registry after successful build.
53
+
54
+ === Usage ===
55
+ $ sombrero [-h || --help]
56
+ ".split("\n").map {|l| "\t" + l.strip}.join("\n")
60
57
  end
61
58
 
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
59
+
60
+ begin # App
61
+ def app args
62
+ opted_dir = args[2]
63
+ assert_directory_provided(opted_dir)
64
+ dir = expanded_path(opted_dir)
65
+
66
+ case instruction = args[1]
67
+ when 'i', 'install'
68
+
69
+ app_install(dir, {
70
+ working_dir_opted: working_dir_opted?(opted_dir),
71
+ namespace: extract_namespace(args)
72
+ })
73
+
74
+ when 'u', 'update'
75
+
76
+ app_update(dir)
77
+
78
+ else
79
+ unknown_instruction_error!(instruction, 'install (or i)', 'update (or u)')
80
+ end
68
81
  end
69
- if namespace =~ /\W/
70
- puts "", "\t::: Namespace may contain only alphanumerics :::", ""
71
- exit 1
82
+
83
+ def app_install dir, opts
84
+ create_dirname_for(dir)
85
+ assert_installable_dir(dir, opts[:working_dir_opted])
86
+ App::Install.new(dir, opts)
72
87
  end
73
- unless namespace =~ /\A[A-Z]/
74
- puts "", "\t::: Namespace should start with a capital letter :::", ""
75
- exit 1
88
+
89
+ def app_update dir
90
+ assert_is_app_dir(dir)
91
+ App::Update.new(dir)
76
92
  end
77
- namespace
78
93
  end
79
94
 
80
- def docker args
81
- missing_destination_error! unless args[2]
82
- dir = Pathname.new(args[2])
83
95
 
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)')
96
+ begin # Generator
97
+ def generator args
98
+
99
+ case instruction = args[1]
100
+ when 'api', 'a'
101
+ api_name = args[2]
102
+ assert_valid_api_name_given(api_name)
103
+
104
+ app_dir = args[3]
105
+ assert_directory_provided(app_dir)
106
+ app_dir = expanded_path(app_dir)
107
+ assert_is_app_dir(app_dir)
108
+
109
+ gen_dir = app_dir / 'generators/api'
110
+ assert_directory_exists(gen_dir)
111
+
112
+ api_dir = app_dir / "base/api/#{api_name}"
113
+ assert_directory_does_not_exists(api_dir)
114
+
115
+ Generator::API.new(gen_dir, api_dir, api_name)
116
+ else
117
+ unknown_instruction_error!(instruction, 'api (or a)')
118
+ end
91
119
  end
92
120
  end
93
121
 
94
- def missing_destination_error!
95
- puts "", "\t::: Please provide a directory to install files into :::", ""
96
- exit 1
97
- end
98
122
 
99
- def unknown_command_error! command, *available_commands
100
- puts "", "\t::: Unknown command #{command}. Use one of #{available_commands*', '} :::", ""
101
- exit 1
123
+ begin # Docker
124
+ def docker args
125
+ opted_dir = args[2]
126
+ assert_directory_provided(opted_dir)
127
+ dir = expanded_path(opted_dir)
128
+
129
+ case instruction = args[1]
130
+ when 'i', 'install'
131
+
132
+ docker_install(dir, working_dir_opted: working_dir_opted?(opted_dir))
133
+
134
+ when 'b', 'build'
135
+
136
+ docker_build(dir, {
137
+ update_runner_only: args.find {|a| a == '-u'},
138
+ push_opted: args.find {|a| a == '-p'}
139
+ })
140
+
141
+ when 'u', 'update'
142
+
143
+ docker_update(dir)
144
+
145
+ else
146
+ unknown_instruction_error!(instruction, 'install (or i)', 'build (or b)', 'update (or u)')
147
+ end
148
+ end
149
+
150
+ def docker_install dir, opts
151
+ create_dirname_for(dir)
152
+ assert_installable_dir(dir, opts[:working_dir_opted])
153
+ Docker::Install.new(dir, opts)
154
+ end
155
+
156
+ def docker_build dir, opts
157
+ assert_directory_exists(dir)
158
+ assert_config_file_exists(dir)
159
+ Docker::Build.new(dir, opts)
160
+ end
161
+
162
+ def docker_update dir
163
+ assert_is_docker_dir(dir)
164
+ Docker::Update.new(dir)
165
+ end
102
166
  end
103
167
 
168
+
104
169
  def unknown_instruction_error! instruction, *available_instructions
105
- puts "", "\t::: Unknown instruction #{instruction}. Use one of #{available_instructions*', '} :::", ""
106
- exit 1
170
+ fatal_error! "Unknown instruction #{instruction}. Use one of #{available_instructions*', '}"
107
171
  end
108
172
 
173
+
109
174
  def self.run cmd
110
175
  puts "", "$ #{cmd}"
111
176
  PTY.spawn cmd do |r, w, pid|
@@ -125,4 +190,5 @@ module Sombrero
125
190
  end
126
191
 
127
192
  require 'sombrero/cli/app'
193
+ require 'sombrero/cli/generator'
128
194
  require 'sombrero/cli/docker'
@@ -1,15 +1,3 @@
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
1
  module Sombrero
14
2
  class RTCPController < BaseController
15
3
  attr_reader :socket
data/sombrero.gemspec CHANGED
@@ -3,7 +3,7 @@
3
3
  Gem::Specification.new do |spec|
4
4
  spec.name, spec.version = %w[
5
5
  sombrero
6
- 0.0.3
6
+ 0.0.5
7
7
  ]
8
8
  spec.authors = ['Slee Woo']
9
9
  spec.email = ['mail@sleewoo.com']