work-on 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/.document ADDED
@@ -0,0 +1,5 @@
1
+ lib/**/*.rb
2
+ bin/*
3
+ -
4
+ features/**/*.feature
5
+ LICENSE.txt
data/Gemfile ADDED
@@ -0,0 +1,17 @@
1
+ source "http://rubygems.org"
2
+ # Add dependencies required to use your gem here.
3
+ # Example:
4
+ # gem "activesupport", ">= 2.3.5"
5
+
6
+ gem 'abstract'
7
+ gem 'rb-appscript'
8
+
9
+ # Add dependencies to develop your gem here.
10
+ # Include everything needed to run rake, tests, features, etc.
11
+ group :development do
12
+ gem "riot", ">= 0"
13
+ gem "bundler", "~> 1.0.0"
14
+ gem "jeweler", "~> 1.6.4"
15
+ gem "rcov"
16
+ gem "rdoc"
17
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,28 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ abstract (1.0.0)
5
+ git (1.2.5)
6
+ jeweler (1.6.4)
7
+ bundler (~> 1.0)
8
+ git (>= 1.2.5)
9
+ rake
10
+ rake (0.9.2)
11
+ rb-appscript (0.6.1)
12
+ rcov (0.9.10)
13
+ rdoc (3.9.4)
14
+ riot (0.12.5)
15
+ rr
16
+ rr (1.0.4)
17
+
18
+ PLATFORMS
19
+ ruby
20
+
21
+ DEPENDENCIES
22
+ abstract
23
+ bundler (~> 1.0.0)
24
+ jeweler (~> 1.6.4)
25
+ rb-appscript
26
+ rcov
27
+ rdoc
28
+ riot
data/LICENSE.txt ADDED
@@ -0,0 +1,20 @@
1
+ Copyright (c) 2011 Toon Willems
2
+
3
+ Permission is hereby granted, free of charge, to any person obtaining
4
+ a copy of this software and associated documentation files (the
5
+ "Software"), to deal in the Software without restriction, including
6
+ without limitation the rights to use, copy, modify, merge, publish,
7
+ distribute, sublicense, and/or sell copies of the Software, and to
8
+ permit persons to whom the Software is furnished to do so, subject to
9
+ the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be
12
+ included in all copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
15
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
16
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
17
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
18
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
19
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
20
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/README.rdoc ADDED
@@ -0,0 +1,19 @@
1
+ = work-on
2
+
3
+ Description goes here.
4
+
5
+ == Contributing to work-on
6
+
7
+ * Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
8
+ * Check out the issue tracker to make sure someone already hasn't requested it and/or contributed it
9
+ * Fork the project
10
+ * Start a feature/bugfix branch
11
+ * Commit and push until you are happy with your contribution
12
+ * Make sure to add tests for it. This is important so I don't break it in a future version unintentionally.
13
+ * Please try not to mess with the Rakefile, version, or history. If you want to have your own version, or is otherwise necessary, that is fine, but please isolate to its own commit so I can cherry-pick around it.
14
+
15
+ == Copyright
16
+
17
+ Copyright (c) 2011 Toon Willems. See LICENSE.txt for
18
+ further details.
19
+
data/Rakefile ADDED
@@ -0,0 +1,54 @@
1
+ # encoding: utf-8
2
+
3
+ require 'rubygems'
4
+ require 'bundler'
5
+ begin
6
+ Bundler.setup(:default, :development)
7
+ rescue Bundler::BundlerError => e
8
+ $stderr.puts e.message
9
+ $stderr.puts "Run `bundle install` to install missing gems"
10
+ exit e.status_code
11
+ end
12
+ require 'rake'
13
+
14
+ require 'jeweler'
15
+ Jeweler::Tasks.new do |gem|
16
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
17
+ gem.name = "work-on"
18
+ gem.homepage = "http://github.com/nudded/work-on"
19
+ gem.license = "MIT"
20
+ gem.summary = %Q{Commandline Terminal Automation}
21
+ gem.description = %Q{utility to manage projects and the terminal windows you open when you work on them.}
22
+ gem.email = "willemstoon@gmail.com"
23
+ gem.authors = ["Toon Willems"]
24
+ gem.executables = ['work-on']
25
+ # dependencies defined in Gemfile
26
+ end
27
+ Jeweler::RubygemsDotOrgTasks.new
28
+
29
+ require 'rake/testtask'
30
+ Rake::TestTask.new(:test) do |test|
31
+ test.libs << 'lib' << 'test'
32
+ test.pattern = 'test/**/*_test.rb'
33
+ test.verbose = true
34
+ end
35
+
36
+ require 'rcov/rcovtask'
37
+ Rcov::RcovTask.new do |test|
38
+ test.libs << 'test' << 'lib'
39
+ test.pattern = 'test/**/*_test.rb'
40
+ test.verbose = true
41
+ test.rcov_opts << '--exclude "gems/*"'
42
+ end
43
+
44
+ task :default => :test
45
+
46
+ require 'rdoc/task'
47
+ RDoc::Task.new do |rdoc|
48
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
49
+
50
+ rdoc.rdoc_dir = 'rdoc'
51
+ rdoc.title = "work-on #{version}"
52
+ rdoc.rdoc_files.include('README*')
53
+ rdoc.rdoc_files.include('lib/**/*.rb')
54
+ end
data/VERSION ADDED
@@ -0,0 +1 @@
1
+ 0.0.1
data/bin/work-on ADDED
@@ -0,0 +1,4 @@
1
+ #!/usr/bin/env ruby
2
+ require 'work-on'
3
+
4
+ WorkOn::Cli.start
data/lib/work-on.rb ADDED
@@ -0,0 +1,9 @@
1
+ module WorkOn
2
+ autoload :Terminal , 'work_on/terminal.rb'
3
+ autoload :AbstractTerminal , 'work_on/terminal.rb'
4
+ autoload :MacTerminal , 'work_on/terminals/mac_terminal.rb'
5
+ autoload :Config , 'work_on/config.rb'
6
+ autoload :Project , 'work_on/project.rb'
7
+ autoload :Cli , 'work_on/cli.rb'
8
+
9
+ end
@@ -0,0 +1,16 @@
1
+ require 'thor'
2
+
3
+ module WorkOn
4
+ class Cli < Thor
5
+
6
+ desc "start PROJECT", "start working on the given project"
7
+ def start(project_name)
8
+ Config.default[project_name].work!
9
+ end
10
+
11
+ # use method_missing to start the project
12
+ def method_missing(name, *args)
13
+ start(name.to_s)
14
+ end
15
+ end
16
+ end
@@ -0,0 +1,30 @@
1
+ require 'yaml'
2
+
3
+ module WorkOn
4
+
5
+ class Config
6
+
7
+ def self.default
8
+ @default ||= Config.new(File.expand_path '~/.config/work_on')
9
+ end
10
+
11
+ attr_reader :file_name
12
+
13
+ def initialize(file_name)
14
+ self.file_name = file_name
15
+ end
16
+
17
+ def file_name=(file_name)
18
+ @file_name = file_name
19
+ @hash = YAML.load_file file_name
20
+ end
21
+
22
+ def [](project)
23
+ config = @hash[project]
24
+ raise ArgumentError, "No config found for that project" unless config
25
+ Project.new project, config
26
+ end
27
+
28
+ end
29
+
30
+ end
@@ -0,0 +1,61 @@
1
+ module WorkOn
2
+
3
+ class Project
4
+
5
+ def initialize(name, config)
6
+ @name = name
7
+ @config = config
8
+ @project_dir = @config['project-dir']
9
+ @terminal = Terminal.instance
10
+ end
11
+
12
+ # Start working on this project
13
+ def work!
14
+ initialize_windows
15
+ end
16
+
17
+ private
18
+
19
+ # Sets up the terminal according the config file
20
+ def initialize_windows
21
+ windows = @config.select {|k,v| /window/ === k }
22
+ # if there is no window specified, i will assume the users wants to open the tabs in the current
23
+ # terminal window
24
+ if windows.empty?
25
+ tabs = @config.select {|k,v| /tab/ === k }
26
+ create_tabs(@terminal.selected_window, tabs, false)
27
+ else
28
+ windows.each do |window, tabs_hash|
29
+ create_window(tabs_hash)
30
+ end
31
+ end
32
+ end
33
+
34
+ # Create a new window with the commands defined in tabs
35
+ def create_window(tabs)
36
+ window = @terminal.new_window
37
+ create_tabs(window, tabs)
38
+ end
39
+
40
+ def create_tabs(window, hash, use_current = true)
41
+ # create as many tabs as needed
42
+ # if use_current is true, create one less and use the current one
43
+ count = hash.keys.size
44
+ if use_current
45
+ count -= 1
46
+ first_tab = window.selected_tab
47
+ end
48
+ tabs = count.times.map { window.new_tab }
49
+ tabs.unshift first_tab if use_current
50
+
51
+ hash.values.each.with_index do |commands, i|
52
+ tabs[i].execute "cd #{@project_dir}"
53
+ commands.each do |command|
54
+ tabs[i].execute(command)
55
+ end
56
+ end
57
+ end
58
+
59
+ end
60
+
61
+ end
@@ -0,0 +1,106 @@
1
+ require 'abstract'
2
+ require 'singleton'
3
+
4
+ module WorkOn
5
+
6
+ # Base class for Terminals
7
+ # only tabs allow for command execution
8
+ # So the idea is that you only call execute on a tab
9
+ #
10
+ # This means that every window should have at least 1 tab (even though it will not be visible gui-wise)
11
+ class AbstractTerminal
12
+
13
+ include Singleton
14
+
15
+ # Base class for windows of a terminal
16
+ class Window
17
+
18
+ # should return an Array of Tab objects
19
+ def tabs
20
+ not_implemented
21
+ end
22
+
23
+ # Create a new Tab and return the reference to it
24
+ def new_tab
25
+ not_implemented
26
+ end
27
+
28
+ # is this window currently selected?
29
+ def selected?
30
+ not_implemented
31
+ end
32
+
33
+ # returns the selected tab in this window
34
+ # NOTE: it is better to overwrite Terminal#selected_tab if you need the speed boost
35
+ def selected_tab
36
+ tabs.find {|tab| tab.selected? }
37
+ end
38
+
39
+ end
40
+
41
+ # Base class for tabs, this is the class that should implement an #execute method
42
+ class Tab
43
+
44
+ def selected?
45
+ not_implemented
46
+ end
47
+
48
+ def execute(cmd)
49
+ not_implemented
50
+ end
51
+
52
+ end
53
+
54
+ def new_window
55
+ not_implemented
56
+ end
57
+
58
+ def windows
59
+ not_implemented
60
+ end
61
+
62
+ # it is possible to overwrite this method if you feel the speed boost is necessary
63
+ def selected_window
64
+ windows.find {|w| w.selected?}
65
+ end
66
+
67
+ # it is possible to overwrite this method if you feel the speed boost is necessary
68
+ def selected_tab
69
+ selected_window.selected_tab
70
+ end
71
+
72
+ ########################################
73
+ # Below here, no more abstract methods #
74
+ ########################################
75
+
76
+ class Window
77
+
78
+ # executes @cmd in the selected tab
79
+ def execute(cmd)
80
+ selected_tab.execute(cmd)
81
+ end
82
+
83
+ end
84
+
85
+ def execute(cmd)
86
+ selected_tab.execute(cmd)
87
+ end
88
+
89
+ end
90
+
91
+ # Interface to the outside world
92
+ # Terminal.new will check the current platform and return a AbstractTerminal subclass based on it
93
+ class Terminal
94
+
95
+ def self.instance
96
+ case RUBY_PLATFORM
97
+ when /darwin/
98
+ MacTerminal.instance
99
+ else
100
+ raise "no implementation found for your platform"
101
+ end
102
+ end
103
+
104
+ end
105
+
106
+ end
@@ -0,0 +1,91 @@
1
+ require 'appscript'
2
+ module WorkOn
3
+
4
+ # Native Mac OS X implementation
5
+ # uses rb-appscript
6
+ class MacTerminal < AbstractTerminal
7
+
8
+ include Appscript
9
+
10
+ def initialize
11
+ @appscript = app("Terminal.app")
12
+ @process = app("System Events").application_processes['Terminal']
13
+ end
14
+
15
+ def windows
16
+ @appscript.windows.get.map! do |window|
17
+ # it seems this returns far too many windows (some of them don't even exist)
18
+ # so we check a property which will error when something is wrong
19
+ begin
20
+ window.selected.get
21
+ MacWindow.new self, @process, window
22
+ rescue
23
+ nil
24
+ end
25
+ end.compact! # don't forget to remove the nil values
26
+ end
27
+
28
+ def new_window
29
+ prev = selected_window
30
+ @process.keystroke('n', :using => :command_down)
31
+ window = selected_window
32
+ prev.select!
33
+ window
34
+ end
35
+
36
+ class MacTab < Tab
37
+ def initialize(terminal, appscript)
38
+ @terminal = terminal
39
+ @appscript = appscript
40
+ end
41
+
42
+ def selected?
43
+ @appscript.selected.get
44
+ end
45
+
46
+ def execute(cmd)
47
+ Appscript.app("Terminal.app").do_script(cmd, :in => @appscript)
48
+ end
49
+
50
+ end
51
+ class MacWindow < Window
52
+ def initialize(terminal, process, appscript)
53
+ @terminal = terminal
54
+ @process = process
55
+ @appscript = appscript
56
+ end
57
+
58
+ def selected?
59
+ @appscript.frontmost.get
60
+ end
61
+
62
+ # Selects this window
63
+ #
64
+ # NOTE:
65
+ # This is not publicly exported since it is only used on the mac Where i
66
+ # need to send keystrokes to the process, so i need to be able to control
67
+ # the currently selected window
68
+ def select!
69
+ @appscript.frontmost.set(true)
70
+ end
71
+
72
+ def tabs
73
+ @appscript.tabs.get.map {|tab| MacTab.new @terminal, tab }
74
+ end
75
+
76
+ def new_tab
77
+ prev = @terminal.selected_window
78
+ self.select!
79
+ @process.keystroke('t', :using => :command_down)
80
+ prev.select!
81
+ self.tabs.last
82
+ end
83
+
84
+ def to_s
85
+ @appscript.id_.get
86
+ end
87
+ end
88
+
89
+
90
+ end
91
+ end
@@ -0,0 +1,17 @@
1
+ require 'teststrap'
2
+ require 'yaml' # otherwise mock fails
3
+
4
+ context "Config" do
5
+ setup do
6
+ mock(YAML).load_file("test_name") do
7
+ {'test' => {'project-dir' => 'test-dir'}}
8
+ end
9
+ WorkOn::Config.new("test_name")
10
+ end
11
+
12
+ denies(:[], 'test').nil
13
+ asserts_topic.assigns(:file_name)
14
+
15
+ asserts(:[], 'blah').raises(ArgumentError)
16
+
17
+ end
@@ -0,0 +1,20 @@
1
+ context "Project" do
2
+ helper(:config_hash) do
3
+ {'project-dir' => '~/test',
4
+ 'tab1' => [],
5
+ 'tab2' => []
6
+ }
7
+ end
8
+
9
+ setup { WorkOn::Project.new 'test', config_hash }
10
+
11
+ hookup do
12
+ terminal = stub(WorkOn::Terminal.instance)
13
+ # new_tab should be called twice
14
+ terminal.selected_window.mock!.new_tab.twice.stub!.execute
15
+ topic.work!
16
+ end
17
+
18
+ asserts_topic.assigns(:project_dir, '~/test')
19
+
20
+ end
@@ -0,0 +1,43 @@
1
+ require 'teststrap'
2
+
3
+ context "Terminal" do
4
+ setup { WorkOn::Terminal.instance }
5
+
6
+ asserts_topic.responds_to(:windows)
7
+ asserts_topic.responds_to(:new_window)
8
+ asserts_topic.responds_to(:execute)
9
+ asserts_topic.responds_to(:selected_window)
10
+ asserts_topic.responds_to(:selected_tab)
11
+
12
+ asserts("window count increases") do
13
+ topic.windows.size == topic.tap(&:new_window).windows.size - 1
14
+ end
15
+
16
+ context "Window" do
17
+ setup { topic.selected_window }
18
+ asserts_topic.responds_to(:new_tab)
19
+ asserts_topic.responds_to(:execute)
20
+ end
21
+
22
+ context "Tab" do
23
+ setup { topic.selected_tab }
24
+ asserts_topic.responds_to(:execute)
25
+ end
26
+
27
+ end
28
+
29
+ context "Window" do
30
+ setup { WorkOn::Terminal.instance }
31
+
32
+ setup do
33
+ window1 = topic.new_window
34
+ window1.new_tab
35
+ window2 = topic.new_window
36
+ window2.new_tab
37
+ [window1, window2]
38
+ end
39
+
40
+ asserts("tabs of first window") { topic.first.tabs }.size(2)
41
+ asserts("tabs of second window") { topic.last.tabs }.size(2)
42
+
43
+ end
data/test/teststrap.rb ADDED
@@ -0,0 +1,4 @@
1
+ require 'riot'
2
+ require 'riot/rr'
3
+ require 'work-on'
4
+ Riot.verbose
data/work-on.gemspec ADDED
@@ -0,0 +1,77 @@
1
+ # Generated by jeweler
2
+ # DO NOT EDIT THIS FILE DIRECTLY
3
+ # Instead, edit Jeweler::Tasks in Rakefile, and run 'rake gemspec'
4
+ # -*- encoding: utf-8 -*-
5
+
6
+ Gem::Specification.new do |s|
7
+ s.name = %q{work-on}
8
+ s.version = "0.0.1"
9
+
10
+ s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
+ s.authors = [%q{Toon Willems}]
12
+ s.date = %q{2011-09-19}
13
+ s.description = %q{utility to manage projects and the terminal windows you open when you work on them.}
14
+ s.email = %q{willemstoon@gmail.com}
15
+ s.executables = [%q{work-on}]
16
+ s.extra_rdoc_files = [
17
+ "LICENSE.txt",
18
+ "README.rdoc"
19
+ ]
20
+ s.files = [
21
+ ".document",
22
+ "Gemfile",
23
+ "Gemfile.lock",
24
+ "LICENSE.txt",
25
+ "README.rdoc",
26
+ "Rakefile",
27
+ "VERSION",
28
+ "bin/work-on",
29
+ "lib/work-on.rb",
30
+ "lib/work_on/cli.rb",
31
+ "lib/work_on/config.rb",
32
+ "lib/work_on/project.rb",
33
+ "lib/work_on/terminal.rb",
34
+ "lib/work_on/terminals/mac_terminal.rb",
35
+ "test/core/config_test.rb",
36
+ "test/core/project_test.rb",
37
+ "test/core/terminal_test.rb",
38
+ "test/teststrap.rb",
39
+ "work-on.gemspec"
40
+ ]
41
+ s.homepage = %q{http://github.com/nudded/work-on}
42
+ s.licenses = [%q{MIT}]
43
+ s.require_paths = [%q{lib}]
44
+ s.rubygems_version = %q{1.8.8}
45
+ s.summary = %q{Commandline Terminal Automation}
46
+
47
+ if s.respond_to? :specification_version then
48
+ s.specification_version = 3
49
+
50
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
51
+ s.add_runtime_dependency(%q<abstract>, [">= 0"])
52
+ s.add_runtime_dependency(%q<rb-appscript>, [">= 0"])
53
+ s.add_development_dependency(%q<riot>, [">= 0"])
54
+ s.add_development_dependency(%q<bundler>, ["~> 1.0.0"])
55
+ s.add_development_dependency(%q<jeweler>, ["~> 1.6.4"])
56
+ s.add_development_dependency(%q<rcov>, [">= 0"])
57
+ s.add_development_dependency(%q<rdoc>, [">= 0"])
58
+ else
59
+ s.add_dependency(%q<abstract>, [">= 0"])
60
+ s.add_dependency(%q<rb-appscript>, [">= 0"])
61
+ s.add_dependency(%q<riot>, [">= 0"])
62
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
63
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
64
+ s.add_dependency(%q<rcov>, [">= 0"])
65
+ s.add_dependency(%q<rdoc>, [">= 0"])
66
+ end
67
+ else
68
+ s.add_dependency(%q<abstract>, [">= 0"])
69
+ s.add_dependency(%q<rb-appscript>, [">= 0"])
70
+ s.add_dependency(%q<riot>, [">= 0"])
71
+ s.add_dependency(%q<bundler>, ["~> 1.0.0"])
72
+ s.add_dependency(%q<jeweler>, ["~> 1.6.4"])
73
+ s.add_dependency(%q<rcov>, [">= 0"])
74
+ s.add_dependency(%q<rdoc>, [">= 0"])
75
+ end
76
+ end
77
+
metadata ADDED
@@ -0,0 +1,148 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: work-on
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Toon Willems
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2011-09-19 00:00:00.000000000Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: abstract
16
+ requirement: &70347223925260 !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: *70347223925260
25
+ - !ruby/object:Gem::Dependency
26
+ name: rb-appscript
27
+ requirement: &70347223924600 !ruby/object:Gem::Requirement
28
+ none: false
29
+ requirements:
30
+ - - ! '>='
31
+ - !ruby/object:Gem::Version
32
+ version: '0'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: *70347223924600
36
+ - !ruby/object:Gem::Dependency
37
+ name: riot
38
+ requirement: &70347223923840 !ruby/object:Gem::Requirement
39
+ none: false
40
+ requirements:
41
+ - - ! '>='
42
+ - !ruby/object:Gem::Version
43
+ version: '0'
44
+ type: :development
45
+ prerelease: false
46
+ version_requirements: *70347223923840
47
+ - !ruby/object:Gem::Dependency
48
+ name: bundler
49
+ requirement: &70347223923140 !ruby/object:Gem::Requirement
50
+ none: false
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 1.0.0
55
+ type: :development
56
+ prerelease: false
57
+ version_requirements: *70347223923140
58
+ - !ruby/object:Gem::Dependency
59
+ name: jeweler
60
+ requirement: &70347223920540 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ~>
64
+ - !ruby/object:Gem::Version
65
+ version: 1.6.4
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *70347223920540
69
+ - !ruby/object:Gem::Dependency
70
+ name: rcov
71
+ requirement: &70347223919520 !ruby/object:Gem::Requirement
72
+ none: false
73
+ requirements:
74
+ - - ! '>='
75
+ - !ruby/object:Gem::Version
76
+ version: '0'
77
+ type: :development
78
+ prerelease: false
79
+ version_requirements: *70347223919520
80
+ - !ruby/object:Gem::Dependency
81
+ name: rdoc
82
+ requirement: &70347223918720 !ruby/object:Gem::Requirement
83
+ none: false
84
+ requirements:
85
+ - - ! '>='
86
+ - !ruby/object:Gem::Version
87
+ version: '0'
88
+ type: :development
89
+ prerelease: false
90
+ version_requirements: *70347223918720
91
+ description: utility to manage projects and the terminal windows you open when you
92
+ work on them.
93
+ email: willemstoon@gmail.com
94
+ executables:
95
+ - work-on
96
+ extensions: []
97
+ extra_rdoc_files:
98
+ - LICENSE.txt
99
+ - README.rdoc
100
+ files:
101
+ - .document
102
+ - Gemfile
103
+ - Gemfile.lock
104
+ - LICENSE.txt
105
+ - README.rdoc
106
+ - Rakefile
107
+ - VERSION
108
+ - bin/work-on
109
+ - lib/work-on.rb
110
+ - lib/work_on/cli.rb
111
+ - lib/work_on/config.rb
112
+ - lib/work_on/project.rb
113
+ - lib/work_on/terminal.rb
114
+ - lib/work_on/terminals/mac_terminal.rb
115
+ - test/core/config_test.rb
116
+ - test/core/project_test.rb
117
+ - test/core/terminal_test.rb
118
+ - test/teststrap.rb
119
+ - work-on.gemspec
120
+ homepage: http://github.com/nudded/work-on
121
+ licenses:
122
+ - MIT
123
+ post_install_message:
124
+ rdoc_options: []
125
+ require_paths:
126
+ - lib
127
+ required_ruby_version: !ruby/object:Gem::Requirement
128
+ none: false
129
+ requirements:
130
+ - - ! '>='
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ segments:
134
+ - 0
135
+ hash: -1460491460751648421
136
+ required_rubygems_version: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ! '>='
140
+ - !ruby/object:Gem::Version
141
+ version: '0'
142
+ requirements: []
143
+ rubyforge_project:
144
+ rubygems_version: 1.8.8
145
+ signing_key:
146
+ specification_version: 3
147
+ summary: Commandline Terminal Automation
148
+ test_files: []