space 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +2 -0
- data/Gemfile.lock +17 -2
- data/Guardfile +5 -0
- data/README.md +4 -0
- data/Rakefile +1 -1
- data/bin/space +2 -1
- data/lib/core_ext/{enumerable.rb → enumerable/map_slice.rb} +2 -7
- data/lib/core_ext/{string.rb → string/wrap.rb} +1 -2
- data/lib/space.rb +6 -16
- data/lib/space/app.rb +36 -48
- data/lib/space/app/command.rb +45 -0
- data/lib/space/app/command/builtin.rb +43 -0
- data/lib/space/app/command/development.rb +60 -0
- data/lib/space/app/handler.rb +47 -0
- data/lib/space/app/logger.rb +21 -0
- data/lib/space/{action → app}/parser.rb +3 -2
- data/lib/space/config.rb +14 -6
- data/lib/space/events.rb +34 -0
- data/lib/space/events/buffer.rb +18 -0
- data/lib/space/events/event.rb +14 -0
- data/lib/space/helpers.rb +30 -15
- data/lib/space/models.rb +7 -0
- data/lib/space/models/project.rb +48 -0
- data/lib/space/models/project/bundler.rb +30 -0
- data/lib/space/models/repo.rb +46 -29
- data/lib/space/models/repo/bundle.rb +39 -0
- data/lib/space/models/repo/dependency.rb +22 -0
- data/lib/space/models/repo/git.rb +52 -0
- data/lib/space/models/repos.rb +31 -26
- data/lib/space/models/repos/collection.rb +26 -0
- data/lib/space/models/repos/scope.rb +18 -0
- data/lib/space/screen.rb +19 -15
- data/lib/space/screen/dashboard.rb +28 -0
- data/lib/space/screen/progress.rb +15 -0
- data/lib/space/screen/view.rb +43 -0
- data/lib/space/shell.rb +56 -0
- data/lib/space/shell/command.rb +63 -0
- data/lib/space/shell/watch.rb +50 -0
- data/lib/space/shell/watcher.rb +40 -0
- data/lib/space/templates/{project.erb → header.erb} +0 -1
- data/lib/space/templates/{repository.erb → repo.erb} +1 -1
- data/lib/space/tmux.rb +11 -0
- data/lib/space/version.rb +1 -1
- metadata +33 -15
- data/lib/space/action.rb +0 -84
- data/lib/space/models/bundle.rb +0 -44
- data/lib/space/models/command.rb +0 -28
- data/lib/space/models/commands.rb +0 -23
- data/lib/space/models/dependency.rb +0 -18
- data/lib/space/models/git.rb +0 -23
- data/lib/space/view.rb +0 -25
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,9 +1,21 @@
|
|
1
|
+
GIT
|
2
|
+
remote: git://github.com/niw/rb-fsevent.git
|
3
|
+
revision: 8754b16bd3b880a60621e01b0f7792c009c8e8a7
|
4
|
+
specs:
|
5
|
+
rb-fsevent (0.4.3)
|
6
|
+
|
1
7
|
GEM
|
2
8
|
remote: http://rubygems.org/
|
3
9
|
specs:
|
4
10
|
ansi (1.4.2)
|
5
11
|
diff-lcs (1.1.3)
|
6
|
-
|
12
|
+
ffi (1.0.11)
|
13
|
+
guard (1.0.1)
|
14
|
+
ffi (>= 0.5.0)
|
15
|
+
thor (~> 0.14.6)
|
16
|
+
guard-rspec (0.7.0)
|
17
|
+
guard (>= 0.10.0)
|
18
|
+
hashr (0.0.20)
|
7
19
|
metaclass (0.0.1)
|
8
20
|
mocha (0.10.5)
|
9
21
|
metaclass (~> 0.0.1)
|
@@ -13,16 +25,19 @@ GEM
|
|
13
25
|
rspec-expectations (~> 2.9.0)
|
14
26
|
rspec-mocks (~> 2.9.0)
|
15
27
|
rspec-core (2.9.0)
|
16
|
-
rspec-expectations (2.9.
|
28
|
+
rspec-expectations (2.9.1)
|
17
29
|
diff-lcs (~> 1.1.3)
|
18
30
|
rspec-mocks (2.9.0)
|
31
|
+
thor (0.14.6)
|
19
32
|
|
20
33
|
PLATFORMS
|
21
34
|
ruby
|
22
35
|
|
23
36
|
DEPENDENCIES
|
24
37
|
ansi
|
38
|
+
guard-rspec
|
25
39
|
hashr
|
26
40
|
mocha
|
27
41
|
rake
|
42
|
+
rb-fsevent!
|
28
43
|
rspec
|
data/Guardfile
ADDED
data/README.md
CHANGED
data/Rakefile
CHANGED
data/bin/space
CHANGED
@@ -1,13 +1,8 @@
|
|
1
1
|
module Enumerable
|
2
|
-
def map_with_index(&block)
|
3
|
-
result = []
|
4
|
-
each_with_index { |element, ix| result << yield(element, ix) }
|
5
|
-
result
|
6
|
-
end
|
7
|
-
|
8
2
|
def map_slice(num, &block)
|
9
3
|
result = []
|
10
4
|
each_slice(num) { |element| result << yield(element) }
|
11
5
|
result
|
12
|
-
end
|
6
|
+
end unless method_defined?(:map_slice)
|
13
7
|
end
|
8
|
+
|
data/lib/space.rb
CHANGED
@@ -1,25 +1,15 @@
|
|
1
1
|
require 'yaml'
|
2
2
|
require 'hashr'
|
3
|
-
require 'core_ext/enumerable'
|
4
3
|
|
5
4
|
module Space
|
6
|
-
autoload :Action, 'space/action'
|
5
|
+
# autoload :Action, 'space/action'
|
7
6
|
autoload :App, 'space/app'
|
8
7
|
autoload :Config, 'space/config'
|
8
|
+
autoload :Events, 'space/events'
|
9
9
|
autoload :Helpers, 'space/helpers'
|
10
|
-
autoload :
|
11
|
-
autoload :Commands, 'space/models/commands'
|
12
|
-
autoload :Command, 'space/models/command'
|
13
|
-
autoload :Dependency, 'space/models/dependency'
|
14
|
-
autoload :Git, 'space/models/git'
|
15
|
-
autoload :Repos, 'space/models/repos'
|
16
|
-
autoload :Repo, 'space/models/repo'
|
10
|
+
autoload :Models, 'space/models'
|
17
11
|
autoload :Screen, 'space/screen'
|
18
|
-
autoload :
|
19
|
-
autoload :
|
20
|
-
|
21
|
-
TEMPLATES = {
|
22
|
-
:project => 'lib/space/templates/project.erb',
|
23
|
-
:repo => 'lib/space/templates/repository.erb'
|
24
|
-
}
|
12
|
+
autoload :Shell, 'space/shell'
|
13
|
+
autoload :Tmux, 'space/tmux'
|
25
14
|
end
|
15
|
+
|
data/lib/space/app.rb
CHANGED
@@ -2,71 +2,59 @@ require 'readline'
|
|
2
2
|
|
3
3
|
module Space
|
4
4
|
class App
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
@instance = new(name)
|
10
|
-
instance.run
|
11
|
-
end
|
12
|
-
|
13
|
-
def name
|
14
|
-
instance.name
|
15
|
-
end
|
5
|
+
autoload :Command, 'space/app/command'
|
6
|
+
autoload :Handler, 'space/app/handler'
|
7
|
+
autoload :Logger, 'space/app/logger'
|
8
|
+
autoload :Parser, 'space/app/parser'
|
16
9
|
|
17
|
-
|
18
|
-
|
10
|
+
class << self
|
11
|
+
def logger
|
12
|
+
@logger ||= Logger.new
|
19
13
|
end
|
20
14
|
end
|
21
15
|
|
22
16
|
include Readline
|
23
17
|
|
24
|
-
|
18
|
+
attr_reader :name, :project, :screen
|
25
19
|
|
26
20
|
def initialize(name)
|
27
|
-
@
|
28
|
-
@
|
29
|
-
@
|
30
|
-
@bundle = Bundle.new(config.paths.first)
|
31
|
-
@path = File.expand_path('.')
|
32
|
-
end
|
21
|
+
@name = name
|
22
|
+
@project = Models::Project.new(name)
|
23
|
+
@screen = Screen.new(project)
|
33
24
|
|
34
|
-
|
35
|
-
# "#{repos.name} >".strip + ' '
|
36
|
-
'> '
|
37
|
-
end
|
38
|
-
|
39
|
-
def repos
|
40
|
-
@repos ||= Repos.all
|
25
|
+
project.subscribe(screen)
|
41
26
|
end
|
42
27
|
|
43
28
|
def run
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
break if line.nil?
|
48
|
-
handle(line) unless line.empty?
|
49
|
-
end
|
50
|
-
puts
|
29
|
+
refresh
|
30
|
+
screen.display(:dashboard)
|
31
|
+
cli_loop
|
51
32
|
end
|
52
33
|
|
53
|
-
|
54
|
-
Action.run(self, line)
|
55
|
-
screen.render
|
56
|
-
end
|
34
|
+
private
|
57
35
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
36
|
+
def refresh
|
37
|
+
screen.display(:progress)
|
38
|
+
project.refresh
|
39
|
+
end
|
62
40
|
|
63
|
-
|
64
|
-
|
65
|
-
|
41
|
+
def cli_loop
|
42
|
+
loop do
|
43
|
+
line = readline(prompt, true)
|
44
|
+
break if line.nil?
|
45
|
+
handle(line) unless line.empty?
|
46
|
+
end
|
47
|
+
end
|
66
48
|
|
67
|
-
|
68
|
-
|
69
|
-
|
49
|
+
def handle(line)
|
50
|
+
screen.display(:progress)
|
51
|
+
Handler.new(project).run(line)
|
52
|
+
screen.display(:dashboard)
|
53
|
+
end
|
54
|
+
|
55
|
+
def prompt
|
56
|
+
"#{project.repos.scoped? ? project.repos.scope.map { |r| r.name }.join(', ') : project.name} > "
|
57
|
+
end
|
70
58
|
end
|
71
59
|
end
|
72
60
|
|
@@ -0,0 +1,45 @@
|
|
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
|
@@ -0,0 +1,43 @@
|
|
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
|
+
|
@@ -0,0 +1,60 @@
|
|
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
|
@@ -0,0 +1,47 @@
|
|
1
|
+
module Space
|
2
|
+
class App
|
3
|
+
class Handler
|
4
|
+
ALIASES = {
|
5
|
+
'' => 'scope',
|
6
|
+
'-' => 'unscope',
|
7
|
+
'r' => 'refresh'
|
8
|
+
}
|
9
|
+
attr_reader :project
|
10
|
+
|
11
|
+
def initialize(project)
|
12
|
+
@project = project
|
13
|
+
end
|
14
|
+
|
15
|
+
def run(line)
|
16
|
+
scope, type = parse(line)
|
17
|
+
command = command_for(scope, type)
|
18
|
+
command.run
|
19
|
+
end
|
20
|
+
|
21
|
+
private
|
22
|
+
|
23
|
+
def command_for(scope, type)
|
24
|
+
const = const_for(type)
|
25
|
+
args = [project, scope]
|
26
|
+
args << type if const == Command::Execute
|
27
|
+
const.new(*args)
|
28
|
+
end
|
29
|
+
|
30
|
+
def parse(line)
|
31
|
+
Parser.new(project.names).parse(line)
|
32
|
+
end
|
33
|
+
|
34
|
+
def const_for(type)
|
35
|
+
Command.const_get(const_name(type))
|
36
|
+
rescue NameError
|
37
|
+
Command::Execute
|
38
|
+
end
|
39
|
+
|
40
|
+
def const_name(type)
|
41
|
+
type = (type || '').strip
|
42
|
+
type = ALIASES[type] if ALIASES.key?(type)
|
43
|
+
type.capitalize
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|