space 0.0.5 → 0.0.6
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.
- data/bin/space +6 -0
- data/lib/core_ext/string/deansi.rb +7 -0
- data/lib/core_ext/string/demodulize.rb +5 -0
- data/lib/space.rb +4 -4
- data/lib/space/action.rb +43 -0
- data/lib/space/action/builtin.rb +43 -0
- data/lib/space/action/development.rb +56 -0
- data/lib/space/{app → action}/handler.rb +17 -9
- data/lib/space/{app → action}/parser.rb +4 -7
- data/lib/space/app.rb +14 -30
- data/lib/space/events.rb +27 -20
- data/lib/space/events/sources.rb +34 -0
- data/lib/space/events/subscription.rb +23 -0
- data/lib/space/logger.rb +34 -0
- data/lib/space/model.rb +7 -0
- data/lib/space/{models → model}/project.rb +4 -10
- data/lib/space/{models → model}/project/bundler.rb +7 -8
- data/lib/space/model/project/bundler/config.rb +30 -0
- data/lib/space/model/repo.rb +38 -0
- data/lib/space/{models → model}/repo/bundle.rb +6 -7
- data/lib/space/{models → model}/repo/dependency.rb +1 -1
- data/lib/space/{models → model}/repo/git.rb +14 -16
- data/lib/space/{models → model}/repos.rb +18 -9
- data/lib/space/{models → model}/repos/collection.rb +1 -1
- data/lib/space/{models → model}/repos/scope.rb +1 -1
- data/lib/space/screen.rb +28 -11
- data/lib/space/screen/dashboard.rb +21 -5
- data/lib/space/screen/progress.rb +16 -5
- data/lib/space/screen/view.rb +2 -6
- data/lib/space/source.rb +51 -0
- data/lib/space/source/command.rb +70 -0
- data/lib/space/source/watch.rb +64 -0
- data/lib/space/source/watcher.rb +32 -0
- data/lib/space/version.rb +1 -1
- metadata +27 -24
- data/lib/space/app/command.rb +0 -45
- data/lib/space/app/command/builtin.rb +0 -43
- data/lib/space/app/command/development.rb +0 -60
- data/lib/space/app/logger.rb +0 -21
- data/lib/space/events/buffer.rb +0 -18
- data/lib/space/events/event.rb +0 -14
- data/lib/space/models.rb +0 -7
- data/lib/space/models/repo.rb +0 -57
- data/lib/space/shell.rb +0 -56
- data/lib/space/shell/command.rb +0 -63
- data/lib/space/shell/watch.rb +0 -50
- data/lib/space/shell/watcher.rb +0 -40
@@ -1,15 +1,26 @@
|
|
1
1
|
module Space
|
2
2
|
class Screen
|
3
3
|
class Progress < View
|
4
|
-
def
|
5
|
-
|
6
|
-
|
7
|
-
render_header
|
4
|
+
def initialize(*)
|
5
|
+
super
|
6
|
+
Events.subscribe(self, :start, :update)
|
8
7
|
end
|
9
8
|
|
10
9
|
def notify(event)
|
11
|
-
|
10
|
+
case event
|
11
|
+
when :start
|
12
|
+
clear
|
13
|
+
when :update
|
14
|
+
print '.'
|
15
|
+
end
|
12
16
|
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def clear
|
21
|
+
move 0, 5
|
22
|
+
print "\e[0J" # clear from cursor down
|
23
|
+
end
|
13
24
|
end
|
14
25
|
end
|
15
26
|
end
|
data/lib/space/screen/view.rb
CHANGED
@@ -13,12 +13,8 @@ module Space
|
|
13
13
|
|
14
14
|
private
|
15
15
|
|
16
|
-
def
|
17
|
-
print "\e[
|
18
|
-
end
|
19
|
-
|
20
|
-
def render_header
|
21
|
-
puts "Project #{project.name}\n\n"
|
16
|
+
def move(x, y)
|
17
|
+
print "\e[#{y};#{x}H"
|
22
18
|
end
|
23
19
|
|
24
20
|
def render_template(name, assigns)
|
data/lib/space/source.rb
ADDED
@@ -0,0 +1,51 @@
|
|
1
|
+
module Space
|
2
|
+
module Source
|
3
|
+
autoload :Command, 'space/source/command'
|
4
|
+
autoload :Watch, 'space/source/watch'
|
5
|
+
autoload :Watcher, 'space/source/watcher'
|
6
|
+
|
7
|
+
module ClassMethods
|
8
|
+
def commands(commands = nil)
|
9
|
+
commands ? @commands = commands : @commands
|
10
|
+
end
|
11
|
+
|
12
|
+
def watch(*paths)
|
13
|
+
paths.empty? ? (@paths || []) : (@paths = paths)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
include Events, Watcher
|
18
|
+
|
19
|
+
class << self
|
20
|
+
def included(base)
|
21
|
+
base.extend(ClassMethods)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
attr_reader :results
|
26
|
+
|
27
|
+
def initialize(path)
|
28
|
+
@results = {}
|
29
|
+
super
|
30
|
+
end
|
31
|
+
|
32
|
+
def commands
|
33
|
+
@commands ||= self.class.commands.inject({}) do |commands, (key, command)|
|
34
|
+
commands.merge(key => Command.new(self, key, command))
|
35
|
+
end
|
36
|
+
end
|
37
|
+
|
38
|
+
def result(key)
|
39
|
+
results[key] || ''
|
40
|
+
end
|
41
|
+
|
42
|
+
def refresh
|
43
|
+
commands.each { |key, command| command.refresh }
|
44
|
+
end
|
45
|
+
|
46
|
+
def update(key, result)
|
47
|
+
results[key] = result
|
48
|
+
notify(:update)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,70 @@
|
|
1
|
+
require 'open3'
|
2
|
+
require 'core_ext/string/deansi'
|
3
|
+
|
4
|
+
module Space
|
5
|
+
module Source
|
6
|
+
class Command
|
7
|
+
class << self
|
8
|
+
def execute(dir, command)
|
9
|
+
log "#{File.basename(dir)} $ #{command}"
|
10
|
+
Open3.capture2e("cd #{dir}; #{command}").first
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
attr_accessor :source, :key, :command
|
15
|
+
|
16
|
+
def initialize(source, key, command)
|
17
|
+
@source = source
|
18
|
+
@key = key
|
19
|
+
@command = command
|
20
|
+
end
|
21
|
+
|
22
|
+
def refresh
|
23
|
+
Thread.new(&method(:run))
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def run
|
29
|
+
chain.call
|
30
|
+
rescue Exception => e
|
31
|
+
log e.message, e.backtrace
|
32
|
+
end
|
33
|
+
|
34
|
+
def chain
|
35
|
+
@chain ||= filters.reverse.inject(method(:execute)) do |chain, method|
|
36
|
+
-> { method.call(&chain) }
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
def execute
|
41
|
+
self.class.execute(source.path, command)
|
42
|
+
end
|
43
|
+
|
44
|
+
def filters
|
45
|
+
[
|
46
|
+
Events.sources.method(:registered),
|
47
|
+
method(:update),
|
48
|
+
method(:clean),
|
49
|
+
::Bundler.method(:with_clean_env)
|
50
|
+
]
|
51
|
+
end
|
52
|
+
|
53
|
+
def update
|
54
|
+
source.update(key, yield)
|
55
|
+
end
|
56
|
+
|
57
|
+
def clean
|
58
|
+
strip_ansi(yield.chomp)
|
59
|
+
end
|
60
|
+
|
61
|
+
def chdir(&block)
|
62
|
+
Dir.chdir(source.path) { |path| block.call }
|
63
|
+
end
|
64
|
+
|
65
|
+
def strip_ansi(string)
|
66
|
+
string.deansi
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
end
|
@@ -0,0 +1,64 @@
|
|
1
|
+
require 'rb-fsevent'
|
2
|
+
|
3
|
+
module Space
|
4
|
+
module Source
|
5
|
+
class Watch
|
6
|
+
LATENCY = 0.1
|
7
|
+
NO_DEFER = FALSE
|
8
|
+
|
9
|
+
attr_reader :path, :callback, :suspended, :fsevent
|
10
|
+
|
11
|
+
def initialize(path, &block)
|
12
|
+
@path = File.expand_path(path)
|
13
|
+
@callback = block
|
14
|
+
# @suspended = []
|
15
|
+
@fsevent = FSEvent.new
|
16
|
+
end
|
17
|
+
|
18
|
+
def run
|
19
|
+
@thread = Thread.new do
|
20
|
+
log "WATCHING #{path}"
|
21
|
+
watch
|
22
|
+
end
|
23
|
+
self
|
24
|
+
end
|
25
|
+
|
26
|
+
# def suspended?
|
27
|
+
# !suspended.empty?
|
28
|
+
# end
|
29
|
+
|
30
|
+
# def suspend
|
31
|
+
# suspended << true
|
32
|
+
# end
|
33
|
+
|
34
|
+
# def unsuspend
|
35
|
+
# suspended.pop
|
36
|
+
# end
|
37
|
+
|
38
|
+
private
|
39
|
+
|
40
|
+
def watch
|
41
|
+
fsevent.watch(path, file: file?, latency: LATENCY, no_defer: NO_DEFER) do |paths|
|
42
|
+
unless git_dir?(paths)
|
43
|
+
log "=> WATCH triggered: #{paths.inspect}"
|
44
|
+
fsevent.stop
|
45
|
+
callback.call(paths)
|
46
|
+
fsevent.run
|
47
|
+
end
|
48
|
+
end
|
49
|
+
fsevent.run
|
50
|
+
rescue Exception => e
|
51
|
+
puts e.message, e.backtrace
|
52
|
+
end
|
53
|
+
|
54
|
+
def file?
|
55
|
+
File.file?(path)
|
56
|
+
end
|
57
|
+
|
58
|
+
def git_dir?(paths)
|
59
|
+
paths.size == 1 && File.basename(paths.first) == '.git'
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
64
|
+
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Space
|
2
|
+
module Source
|
3
|
+
module Watcher
|
4
|
+
attr_reader :path
|
5
|
+
|
6
|
+
def initialize(path)
|
7
|
+
@path = path
|
8
|
+
start
|
9
|
+
end
|
10
|
+
|
11
|
+
def watched_paths
|
12
|
+
@watched_paths ||= self.class.watch.map do |path|
|
13
|
+
path[0, 1] == '~' ? path : "#{self.path}/#{path}"
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
private
|
18
|
+
|
19
|
+
def start
|
20
|
+
watchers.map(&:run)
|
21
|
+
end
|
22
|
+
|
23
|
+
def watchers
|
24
|
+
@watchers ||= watched_paths.map do |path|
|
25
|
+
Watch.new(path) do |paths|
|
26
|
+
refresh
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
data/lib/space/version.rb
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: space
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.6
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-04-
|
12
|
+
date: 2012-04-09 00:00:00.000000000 Z
|
13
13
|
dependencies: []
|
14
14
|
description: space.
|
15
15
|
email:
|
@@ -20,37 +20,40 @@ extensions: []
|
|
20
20
|
extra_rdoc_files: []
|
21
21
|
files:
|
22
22
|
- lib/core_ext/enumerable/map_slice.rb
|
23
|
+
- lib/core_ext/string/deansi.rb
|
24
|
+
- lib/core_ext/string/demodulize.rb
|
23
25
|
- lib/core_ext/string/wrap.rb
|
24
|
-
- lib/space/
|
25
|
-
- lib/space/
|
26
|
-
- lib/space/
|
27
|
-
- lib/space/
|
28
|
-
- lib/space/
|
29
|
-
- lib/space/app/parser.rb
|
26
|
+
- lib/space/action/builtin.rb
|
27
|
+
- lib/space/action/development.rb
|
28
|
+
- lib/space/action/handler.rb
|
29
|
+
- lib/space/action/parser.rb
|
30
|
+
- lib/space/action.rb
|
30
31
|
- lib/space/app.rb
|
31
32
|
- lib/space/config.rb
|
32
|
-
- lib/space/events/
|
33
|
-
- lib/space/events/
|
33
|
+
- lib/space/events/sources.rb
|
34
|
+
- lib/space/events/subscription.rb
|
34
35
|
- lib/space/events.rb
|
35
36
|
- lib/space/helpers.rb
|
36
|
-
- lib/space/
|
37
|
-
- lib/space/
|
38
|
-
- lib/space/
|
39
|
-
- lib/space/
|
40
|
-
- lib/space/
|
41
|
-
- lib/space/
|
42
|
-
- lib/space/
|
43
|
-
- lib/space/
|
44
|
-
- lib/space/
|
45
|
-
- lib/space/
|
37
|
+
- lib/space/logger.rb
|
38
|
+
- lib/space/model/project/bundler/config.rb
|
39
|
+
- lib/space/model/project/bundler.rb
|
40
|
+
- lib/space/model/project.rb
|
41
|
+
- lib/space/model/repo/bundle.rb
|
42
|
+
- lib/space/model/repo/dependency.rb
|
43
|
+
- lib/space/model/repo/git.rb
|
44
|
+
- lib/space/model/repo.rb
|
45
|
+
- lib/space/model/repos/collection.rb
|
46
|
+
- lib/space/model/repos/scope.rb
|
47
|
+
- lib/space/model/repos.rb
|
48
|
+
- lib/space/model.rb
|
46
49
|
- lib/space/screen/dashboard.rb
|
47
50
|
- lib/space/screen/progress.rb
|
48
51
|
- lib/space/screen/view.rb
|
49
52
|
- lib/space/screen.rb
|
50
|
-
- lib/space/
|
51
|
-
- lib/space/
|
52
|
-
- lib/space/
|
53
|
-
- lib/space/
|
53
|
+
- lib/space/source/command.rb
|
54
|
+
- lib/space/source/watch.rb
|
55
|
+
- lib/space/source/watcher.rb
|
56
|
+
- lib/space/source.rb
|
54
57
|
- lib/space/templates/header.erb
|
55
58
|
- lib/space/templates/repo.erb
|
56
59
|
- lib/space/tmux.rb
|
data/lib/space/app/command.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module Space
|
2
|
-
class App
|
3
|
-
class Command
|
4
|
-
autoload :Execute, 'space/app/command/builtin'
|
5
|
-
autoload :Refresh, 'space/app/command/builtin'
|
6
|
-
autoload :Scope, 'space/app/command/builtin'
|
7
|
-
autoload :Unscope, 'space/app/command/builtin'
|
8
|
-
|
9
|
-
autoload :Local, 'space/app/command/development'
|
10
|
-
autoload :Remote, 'space/app/command/development'
|
11
|
-
|
12
|
-
attr_reader :project, :scope, :args
|
13
|
-
|
14
|
-
def initialize(project, scope, *args)
|
15
|
-
@project = project
|
16
|
-
@scope = scope
|
17
|
-
@args = args
|
18
|
-
end
|
19
|
-
|
20
|
-
def run
|
21
|
-
raise 'not implemented'
|
22
|
-
end
|
23
|
-
|
24
|
-
private
|
25
|
-
|
26
|
-
def repos
|
27
|
-
@repos ||= project.repos.select_by_names(scope)
|
28
|
-
end
|
29
|
-
|
30
|
-
def in_scope
|
31
|
-
repos.each { |repo| yield repo }
|
32
|
-
end
|
33
|
-
|
34
|
-
def system(cmd)
|
35
|
-
puts cmd
|
36
|
-
super
|
37
|
-
end
|
38
|
-
|
39
|
-
def confirm
|
40
|
-
puts "\n--- hit any key to continue ---\n"
|
41
|
-
STDIN.getc
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|
45
|
-
end
|
@@ -1,43 +0,0 @@
|
|
1
|
-
module Space
|
2
|
-
class App
|
3
|
-
class Command
|
4
|
-
class Execute < Command
|
5
|
-
def run
|
6
|
-
Bundler.with_clean_env do
|
7
|
-
in_scope do |repo|
|
8
|
-
repo.buffering do
|
9
|
-
puts
|
10
|
-
repo.execute(*args)
|
11
|
-
end
|
12
|
-
end
|
13
|
-
confirm
|
14
|
-
end
|
15
|
-
end
|
16
|
-
end
|
17
|
-
|
18
|
-
class Refresh < Command
|
19
|
-
def run
|
20
|
-
Bundler.with_clean_env do
|
21
|
-
project.bundler.refresh
|
22
|
-
in_scope do |repo|
|
23
|
-
repo.refresh
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
class Scope < Command
|
30
|
-
def run
|
31
|
-
project.repos.scope = repos
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
class Unscope < Command
|
36
|
-
def run
|
37
|
-
project.repos.scope = nil
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
|
@@ -1,60 +0,0 @@
|
|
1
|
-
module Space
|
2
|
-
class App
|
3
|
-
class Command
|
4
|
-
class Local < Command
|
5
|
-
def run
|
6
|
-
Shell::Watcher.suspend do
|
7
|
-
repos.each do |repo|
|
8
|
-
system "bundle config --global local.#{repo.name} #{repo.path}"
|
9
|
-
end
|
10
|
-
confirm
|
11
|
-
end
|
12
|
-
project.bundler.refresh
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class Remote < Command
|
17
|
-
def run
|
18
|
-
Shell::Watcher.suspend do
|
19
|
-
repos.each do |repo|
|
20
|
-
system "bundle config --delete local.#{repo.name}"
|
21
|
-
end
|
22
|
-
confirm
|
23
|
-
end
|
24
|
-
project.bundler.refresh
|
25
|
-
end
|
26
|
-
end
|
27
|
-
|
28
|
-
# class Install < Command
|
29
|
-
# def run
|
30
|
-
# in_scope do |repo|
|
31
|
-
# repo.execute 'bundle install'
|
32
|
-
# repo.refresh
|
33
|
-
# end
|
34
|
-
# end
|
35
|
-
# end
|
36
|
-
|
37
|
-
# class Update < Command
|
38
|
-
# def run
|
39
|
-
# in_scope do |repo|
|
40
|
-
# repo.execute 'bundle update'
|
41
|
-
# repo.execute 'git commit -am "bump dependencies"'
|
42
|
-
# repo.refresh
|
43
|
-
# end
|
44
|
-
# end
|
45
|
-
# end
|
46
|
-
|
47
|
-
# class Checkout < Command
|
48
|
-
# def run
|
49
|
-
# # check if branch exists, git co (-b)
|
50
|
-
# end
|
51
|
-
# end
|
52
|
-
|
53
|
-
# class PullDeps < Command
|
54
|
-
# def run
|
55
|
-
# # pull all dependencies
|
56
|
-
# end
|
57
|
-
# end
|
58
|
-
end
|
59
|
-
end
|
60
|
-
end
|