tabby 0.0.2 → 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -2,11 +2,14 @@ PATH
2
2
  remote: .
3
3
  specs:
4
4
  tabby (0.0.2)
5
+ thor (~> 0.14.6)
5
6
 
6
7
  GEM
7
8
  remote: http://rubygems.org/
8
9
  specs:
9
10
  diff-lcs (1.1.2)
11
+ fakeout (0.0.1)
12
+ mnoble-fakefs (0.3.2)
10
13
  rspec (2.1.0)
11
14
  rspec-core (~> 2.1.0)
12
15
  rspec-expectations (~> 2.1.0)
@@ -15,10 +18,13 @@ GEM
15
18
  rspec-expectations (2.1.0)
16
19
  diff-lcs (~> 1.1.2)
17
20
  rspec-mocks (2.1.0)
21
+ thor (0.14.6)
18
22
 
19
23
  PLATFORMS
20
24
  ruby
21
25
 
22
26
  DEPENDENCIES
27
+ fakeout (>= 0.0.1)
28
+ mnoble-fakefs (>= 0.3.1)
23
29
  rspec (~> 2.1.0)
24
30
  tabby!
data/README.markdown CHANGED
@@ -21,11 +21,11 @@ Creating tabs is just a matter of creating methods. There should be one method p
21
21
 
22
22
  class Blog < Tabby::Base
23
23
  basedir "~/Dev/Blog"
24
-
24
+
25
25
  def jekyll
26
26
  exec "jekyll --auto --server"
27
27
  end
28
-
28
+
29
29
  def sass
30
30
  exec "sass --watch public/css/main.sass:public/css/main.css"
31
31
  end
data/Rakefile CHANGED
@@ -6,5 +6,5 @@ RSpec::Core::RakeTask.new do |spec|
6
6
  spec.rspec_opts = ["--format=doc", "--fail-fast", "--color"]
7
7
  end
8
8
 
9
- task :test => :spec
9
+ task :test => :spec
10
10
  task :default => :spec
data/bin/tabby CHANGED
@@ -1,4 +1,4 @@
1
1
  #!/usr/bin/env ruby
2
2
  require "tabby"
3
- require "tabby/runner"
4
- Tabby::Runner.new(ARGV.dup).start
3
+ require "tabby/cli"
4
+ Tabby::CLI.start(ARGV.dup)
data/lib/tabby.rb CHANGED
@@ -1,75 +1,14 @@
1
1
  require "erb"
2
2
  require "tempfile"
3
+ require "pathname"
4
+ require "thor"
3
5
 
4
6
  module Tabby
5
- class Base
6
- class << self; attr_reader :_basedir; end
7
-
8
- # Sets the project root directory.
9
- #
10
- # Parameters:
11
- # dir Project's root directory path
12
- #
13
- def self.basedir(dir)
14
- @_basedir = dir
15
- end
16
-
17
- # List of commands for the current tab to execute.
18
- attr_accessor :commands
19
-
20
- # Title of the current tab being created.
21
- attr_accessor :title
22
-
23
- # Rendered AppleScript source to be saved to a tempfile.
24
- attr_accessor :template
25
-
26
- def initialize
27
- @commands = []
28
- end
29
-
30
- # Queue a command to be executed when the tab gets created.
31
- #
32
- # Parameters:
33
- # command bash/zsh/etc command to be executed
34
- #
35
- def exec(command)
36
- @commands << %{write text "#{command}"}
37
- end
38
-
39
- # Call each instance method and create a tab for each one.
40
- # Method names become tab titles, with underscores replaced
41
- # with spaces.
42
- #
43
- def call
44
- self.class.instance_methods(false).each do |method|
45
- @commands = []
46
- @title = method
47
- send(method)
48
- create_tab
49
- end
50
- end
51
-
52
- # Project's base directory. Each tab +cd+'s into this
53
- # directory before executing commands.
54
- #
55
- def basedir
56
- self.class._basedir
57
- end
58
-
59
- private
60
-
61
- def create_tab
62
- tempfile = Tempfile.new("tabby-#{@title}")
63
- tempfile.write(render_script)
64
- tempfile.close
65
- Kernel.system("osascript #{tempfile.path}")
66
- end
67
-
68
- def render_script
69
- osapath = File.expand_path("../../script/tabby.osa.erb", __FILE__)
70
- template = ERB.new(File.read(osapath))
71
- commands = @commands.join("\n")
72
- @template = template.result(binding)
73
- end
74
- end
7
+ ROOT = Pathname.new(File.dirname(__FILE__) + "/../").expand_path
8
+ TABBYDIR = Pathname.new("~/.tabby").expand_path
75
9
  end
10
+
11
+ require "tabby/base"
12
+ require "tabby/runner"
13
+ require "tabby/creator"
14
+ require "tabby/editor"
data/lib/tabby/base.rb ADDED
@@ -0,0 +1,72 @@
1
+ module Tabby
2
+ class Base
3
+ class << self; attr_reader :_basedir; end
4
+
5
+ # Sets the project root directory.
6
+ #
7
+ # Parameters:
8
+ # dir Project's root directory path
9
+ #
10
+ def self.basedir(dir)
11
+ @_basedir = dir
12
+ end
13
+
14
+ # List of commands for the current tab to execute.
15
+ attr_accessor :commands
16
+
17
+ # Title of the current tab being created.
18
+ attr_accessor :title
19
+
20
+ # Rendered AppleScript source to be saved to a tempfile.
21
+ attr_accessor :template
22
+
23
+ def initialize
24
+ @commands = []
25
+ end
26
+
27
+ # Queue a command to be executed when the tab gets created.
28
+ #
29
+ # Parameters:
30
+ # command bash/zsh/etc command to be executed
31
+ #
32
+ def exec(command)
33
+ @commands << %{write text "#{command}"}
34
+ end
35
+
36
+ # Call each instance method and create a tab for each one.
37
+ # Method names become tab titles, with underscores replaced
38
+ # with spaces.
39
+ #
40
+ def call
41
+ self.class.instance_methods(false).each do |method|
42
+ @commands = []
43
+ @title = method
44
+ send(method)
45
+ create_tab
46
+ end
47
+ end
48
+
49
+ # Project's base directory. Each tab +cd+'s into this
50
+ # directory before executing commands.
51
+ #
52
+ def basedir
53
+ self.class._basedir
54
+ end
55
+
56
+ private
57
+
58
+ def create_tab
59
+ tempfile = Tempfile.new("tabby-#{@title}")
60
+ tempfile.write(render_script)
61
+ tempfile.close
62
+ system("osascript #{tempfile.path}")
63
+ end
64
+
65
+ def render_script
66
+ osapath = ROOT.join("script/tabby.osa.erb")
67
+ template = ERB.new(File.read(osapath))
68
+ commands = @commands.join("\n")
69
+ @template = template.result(binding)
70
+ end
71
+ end
72
+ end
data/lib/tabby/cli.rb ADDED
@@ -0,0 +1,26 @@
1
+ module Tabby
2
+ class CLI < Thor
3
+ desc "open [project]", "Starts up the environment for a project."
4
+ def open(project=nil)
5
+ Tabby::Runner.new(project).run!
6
+ end
7
+
8
+ desc "create [project]", "Creates an empty project config."
9
+ def create(project=nil)
10
+ Tabby::Creator.new(project).run!
11
+ end
12
+
13
+ desc "edit [project]", "Opens the project config with $EDITOR."
14
+ def edit(project=nil)
15
+ Tabby::Editor.new(project).run!
16
+ end
17
+
18
+ desc "list", "List all projects."
19
+ def list
20
+ puts "Tabby Projects"
21
+ Pathname.glob("#{TABBYDIR}/*.rb").each do |project|
22
+ puts " - #{project.basename(".rb")}"
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,44 @@
1
+ module Tabby
2
+ class Creator
3
+ TEMPLATE = ROOT.join("templates/project.rb.erb")
4
+
5
+ attr_reader :project, :template
6
+
7
+ def initialize(name)
8
+ @project = name
9
+ @template = ERB.new(TEMPLATE.expand_path.read)
10
+ end
11
+
12
+ def run!
13
+ if exists?
14
+ puts ">> Project already exists."
15
+ else
16
+ create_project_directory
17
+ create_project_file
18
+ puts ">> Successfully created #{@project}."
19
+ Tabby::Editor.new(@project).run!
20
+ end
21
+ end
22
+
23
+ def exist?
24
+ project_path.exist?
25
+ end
26
+ alias :exists? :exist?
27
+
28
+ def create_project_directory
29
+ FileUtils.mkdir_p(TABBYDIR) unless File.directory?(TABBYDIR)
30
+ end
31
+
32
+ def create_project_file
33
+ project_path.open("w") { |f| f << template.result(binding) }
34
+ end
35
+
36
+ def project_path
37
+ TABBYDIR.join("#{project}.rb").expand_path
38
+ end
39
+
40
+ def klass
41
+ project.gsub(/_|-/, " ").split.map { |w| w.capitalize }.join
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,19 @@
1
+ module Tabby
2
+ class Editor
3
+ def initialize(project=nil)
4
+ @project = project
5
+ end
6
+
7
+ def run!
8
+ if path.exist?
9
+ system("$EDITOR #{TABBYDIR.join("#{@project}.rb")}")
10
+ else
11
+ Tabby::Creator.new(@project).run!
12
+ end
13
+ end
14
+
15
+ def path
16
+ TABBYDIR.join("#{@project}.rb")
17
+ end
18
+ end
19
+ end
data/lib/tabby/runner.rb CHANGED
@@ -1,27 +1,27 @@
1
1
  module Tabby
2
2
  class Runner
3
- TABBYDIR = File.expand_path("~/.tabby")
4
-
5
- # Project name, should be the filename in ~/.tabby.
6
3
  attr_reader :project
7
4
 
8
- def initialize(argv)
9
- @project = argv[0]
10
- @klass = @project.split("_").map { |p| p.capitalize }.join.to_sym
5
+ def initialize(project)
6
+ @project = project
7
+ @path = TABBYDIR.join("#{@project}.rb")
8
+ end
9
+
10
+ def dasherize
11
+ @project.gsub("_", "-")
12
+ end
13
+
14
+ def klass
15
+ @project.split(/_|-/).map { |p| p.capitalize }.join.to_sym
11
16
  end
12
17
 
13
- # Loads the environment file (from ~/.tabby), finds the class
14
- # which matches the filename and +call+s it.
15
- #
16
- def start
17
- require File.join(TABBYDIR, "#{@project}.rb")
18
- ObjectSpace.class.const_get(@klass).new.call
19
- rescue LoadError
20
- puts "=> ERROR: Project (#{TABBYDIR}/#{@project}.rb) does not exist."
21
- rescue NameError
22
- puts "=> ERROR: Project filename/classname mismatch."
23
- puts " Filename is: #{@project}.rb"
24
- puts " Classname should be: #{@klass}"
18
+ def run!
19
+ if @path.expand_path.exist?
20
+ require TABBYDIR.join("#{@project}.rb")
21
+ ObjectSpace.class.const_get(klass).new.call
22
+ else
23
+ puts ">> Project '#{@project}' does not exist."
24
+ end
25
25
  end
26
26
  end
27
27
  end
@@ -0,0 +1,3 @@
1
+ class Helicopter < Tabby::Base
2
+ basedir "~/Dev/helicopter"
3
+ end
@@ -1,10 +1,10 @@
1
1
  class SpecBlog < Tabby::Base
2
2
  basedir "~/Dev/Blog"
3
-
3
+
4
4
  def jekyll
5
5
  exec "jekyll --auto --server"
6
6
  end
7
-
7
+
8
8
  def sass
9
9
  exec "sass --watch public/css/main.sass:public/css/main.css"
10
10
  end
data/spec/spec_helper.rb CHANGED
@@ -1,9 +1,31 @@
1
1
  require "rspec"
2
+ require "fakefs/spec_helpers"
3
+ require "fakeout/spec_helpers"
2
4
  require "stringio"
3
5
  $LOAD_PATH.unshift(File.expand_path('../../lib', __FILE__))
4
6
  $LOAD_PATH.unshift(File.expand_path('..', __FILE__))
5
7
  require "tabby"
6
8
  require "tabby/runner"
7
- require "support/with_constants"
8
- require "support/with_stubbed_stdout"
9
- require "support/expand"
9
+ require "tabby/creator"
10
+ require "tabby/cli"
11
+
12
+ require "support/stub_constant"
13
+
14
+ class FakeFile < StringIO
15
+ def path; "/tmp/#{object_id}"; end
16
+ end
17
+
18
+ # Disable Kernel#system
19
+ module Kernel
20
+ def system(*args); end
21
+ end
22
+
23
+ RSpec.configure do |config|
24
+ config.include(Fakeout::SpecHelpers)
25
+ config.include(FakeFS::SpecHelpers)
26
+
27
+ config.before do
28
+ tabbydir = File.dirname(__FILE__) + "/.tabby/"
29
+ Tabby.stub_constant(:TABBYDIR => Pathname.new(tabbydir).expand_path)
30
+ end
31
+ end
@@ -0,0 +1,25 @@
1
+ module Kernel
2
+ def stub_constant(constants)
3
+ silence!
4
+ constants.each do |name, value|
5
+ instance_variable_set("@unstubbed_#{name}", const_get(name))
6
+ const_set(name, value)
7
+ end
8
+ noise!
9
+ end
10
+
11
+ def silence!
12
+ @__verbose = $VERBOSE
13
+ $VERBOSE = nil
14
+ end
15
+
16
+ def noise!
17
+ $VERBOSE = @__verbose
18
+ end
19
+
20
+ def unstub_constant(name)
21
+ silence!
22
+ const_set(name, instance_variable_get("@unstubbed_#{name}"))
23
+ noise!
24
+ end
25
+ end
@@ -5,7 +5,7 @@ class Object
5
5
  old_constants = {}
6
6
  stderr = $stderr
7
7
  $stderr = StringIO.new
8
-
8
+
9
9
  constants.each do |constant, val|
10
10
  old_constants[constant] = const_get(constant)
11
11
  const_set(constant, val)
@@ -16,7 +16,7 @@ class Object
16
16
  old_constants.each do |constant, val|
17
17
  const_set(constant, val)
18
18
  end
19
-
19
+
20
20
  $stderr = stderr
21
21
  end
22
22
  end
@@ -1,4 +1,4 @@
1
- require File.expand_path("../spec_helper", __FILE__)
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
2
 
3
3
  class TabbySpecBlog < Tabby::Base
4
4
  basedir "~/Dev/Blog"
@@ -9,7 +9,11 @@ class TabbySpecBlog < Tabby::Base
9
9
  end
10
10
 
11
11
  describe Tabby::Base do
12
- before { Kernel.stub(:system) }
12
+ before do
13
+ Tempfile.stub(:new).and_return(FakeFile.new)
14
+ FakeFS.deactivate!
15
+ end
16
+
13
17
  subject { TabbySpecBlog.new }
14
18
 
15
19
  it "should set a base directory" do
@@ -30,7 +34,7 @@ describe Tabby::Base do
30
34
  subject.call
31
35
  subject.template.should match /launch session "Default"/
32
36
  end
33
-
37
+
34
38
  it "should set the title" do
35
39
  subject.call
36
40
  subject.template.should match /set name to "foo"/
@@ -40,7 +44,7 @@ describe Tabby::Base do
40
44
  subject.call
41
45
  subject.template.should match %r{write text "cd ~/Dev/Blog"}
42
46
  end
43
-
47
+
44
48
  it "should execute all commands" do
45
49
  subject.call
46
50
  subject.template.should match /write text "whoami"/
@@ -0,0 +1,29 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Tabby::CLI do
4
+ let(:path) { Tabby::TABBYDIR.join("battle.rb") }
5
+ let(:runner) { mock('Tabby::Runner').as_null_object }
6
+
7
+ before do
8
+ Fakeout.activate!
9
+ Tempfile.stub(:new).and_return { FakeFile.new }
10
+ end
11
+
12
+ it "should open an existing project" do
13
+ Tabby::Runner.should_receive(:new).with("battle").and_return(runner)
14
+ Tabby::CLI.start(["open", "battle"])
15
+ end
16
+
17
+ it "should create an empty project config" do
18
+ Tabby::CLI.start(["create", "battle"])
19
+ path.should exist
20
+ end
21
+
22
+ it "should list available projects" do
23
+ FileUtils.mkdir_p(Tabby::TABBYDIR)
24
+ FileUtils.touch(path.expand_path.to_s)
25
+
26
+ Tabby::CLI.start(["list"])
27
+ stdout.should include "- battle"
28
+ end
29
+ end
@@ -0,0 +1,59 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Tabby::Creator do
4
+ let(:basedir) { Tabby::TABBYDIR }
5
+ let(:path) { basedir.join("helicopter.rb") }
6
+ let(:creator) { Tabby::Creator.new("helicopter") }
7
+
8
+ before do
9
+ FakeFS.activate!
10
+ creator.run!
11
+ end
12
+
13
+ it "should create the tabby directory if it is missing" do
14
+ File.directory?(path.dirname).should be_true
15
+ end
16
+
17
+ it "should create a tabby file" do
18
+ File.exists?(path).should be_true
19
+ end
20
+
21
+ it "should have a project path" do
22
+ creator.project_path.to_s.should =~ /helicopter\.rb/
23
+ end
24
+
25
+ it "should determine the class name for single word projects" do
26
+ creator.klass.should == "Helicopter"
27
+ end
28
+
29
+ it "should determine the class name for multi word projects with underscores" do
30
+ creator = Tabby::Creator.new("long_name_project")
31
+ creator.klass.should == "LongNameProject"
32
+ end
33
+
34
+ it "should determine the class name for multi word projects with hyphens" do
35
+ creator = Tabby::Creator.new("long-name-project")
36
+ creator.klass.should == "LongNameProject"
37
+ end
38
+
39
+ it "should create a templated project file" do
40
+ File.read(path).should == <<-PROJECT
41
+ class Helicopter < Tabby::Base
42
+ basedir "~/Dev/helicopter"
43
+
44
+ def server
45
+ exec "rails s"
46
+ end
47
+ end
48
+ PROJECT
49
+ end
50
+
51
+ it "should know if it already exists or not" do
52
+ creator.should exist
53
+ end
54
+
55
+ it "should not create projects that already exist" do
56
+ creator.run!
57
+ stdout.should include "Project already exists."
58
+ end
59
+ end
@@ -0,0 +1,25 @@
1
+ require File.dirname(__FILE__) + '/../spec_helper'
2
+
3
+ describe Tabby::Editor do
4
+ let(:basedir) { Tabby::TABBYDIR }
5
+ let(:path) { basedir.join("helicopter.rb") }
6
+ let(:editor) { Tabby::Editor.new("helicopter") }
7
+
8
+ before do
9
+ Fakeout.deactivate!
10
+ editor.stub(:path) { path }
11
+ end
12
+
13
+ it "should open a project file with $EDITOR" do
14
+ path.stub(:exist?) { true }
15
+ editor.should_receive(:system).with("$EDITOR #{path.expand_path}")
16
+ editor.run!
17
+ end
18
+
19
+ it "should create a new project if it doesn't exist" do
20
+ path.stub(:exist?) { false }
21
+ creator = mock("Tabby::Creator").as_null_object
22
+ Tabby::Creator.should_receive(:new).with("helicopter").and_return(creator)
23
+ editor.run!
24
+ end
25
+ end
@@ -0,0 +1,37 @@
1
+ require File.dirname(__FILE__) + "/../spec_helper"
2
+ require File.dirname(__FILE__) + "/../.tabby/spec_blog"
3
+
4
+ describe Tabby::Runner do
5
+ let(:tabbydir) { Pathname.new(File.dirname(__FILE__) + "/../.tabby").expand_path }
6
+ let(:runner) { Tabby::Runner.new("spec_blog") }
7
+
8
+ before do
9
+ Tabby::Base.stub(:new).and_return(mock.as_null_object)
10
+ end
11
+
12
+ it "should convert an underscored project to hyphenated" do
13
+ Tabby::Runner.new("time_cop").dasherize.should == "time-cop"
14
+ end
15
+
16
+ it "should determine the class of a project with underscores" do
17
+ Tabby::Runner.new("time_cop").klass.should == :TimeCop
18
+ end
19
+
20
+ it "should determine the class of a project with hyphens" do
21
+ Tabby::Runner.new("time-cop").klass.should == :TimeCop
22
+ end
23
+
24
+ it "should determine the class of a project with underscores and hyphens" do
25
+ Tabby::Runner.new("jean-claude_van_damme").klass.should == :JeanClaudeVanDamme
26
+ end
27
+
28
+ it "should find the project file" do
29
+ runner.should_receive(:require).with(tabbydir.join("spec_blog.rb"))
30
+ runner.run!
31
+ end
32
+
33
+ it "should call the project class" do
34
+ SpecBlog.should_receive(:new).and_return(mock.as_null_object)
35
+ runner.run!
36
+ end
37
+ end
data/tabby.gemspec CHANGED
@@ -1,10 +1,9 @@
1
1
  # -*- encoding: utf-8 -*-
2
2
  $:.push File.expand_path("../lib", __FILE__)
3
- require "tabby/version"
4
3
 
5
4
  Gem::Specification.new do |s|
6
5
  s.name = "tabby"
7
- s.version = Tabby::VERSION
6
+ s.version = "0.1.0"
8
7
  s.platform = Gem::Platform::RUBY
9
8
  s.authors = ["Matte Noble"]
10
9
  s.email = ["me@mattenoble.com"]
@@ -18,5 +17,11 @@ Gem::Specification.new do |s|
18
17
  s.extra_rdoc_files = ["README.markdown", "screenshot.png"]
19
18
  s.require_paths = ["lib"]
20
19
 
21
- s.add_development_dependency "rspec", "~> 2.1.0"
20
+ # Runtime
21
+ s.add_dependency "thor", "~> 0.14.6"
22
+
23
+ # Development
24
+ s.add_development_dependency "rspec", "~> 2.1.0"
25
+ s.add_development_dependency "fakeout", ">= 0.0.1"
26
+ s.add_development_dependency "mnoble-fakefs", ">= 0.3.1"
22
27
  end
@@ -0,0 +1,7 @@
1
+ class <%= klass %> < Tabby::Base
2
+ basedir "~/Dev/<%= project %>"
3
+
4
+ def server
5
+ exec "rails s"
6
+ end
7
+ end
metadata CHANGED
@@ -2,7 +2,7 @@
2
2
  name: tabby
3
3
  version: !ruby/object:Gem::Version
4
4
  prerelease:
5
- version: 0.0.2
5
+ version: 0.1.0
6
6
  platform: ruby
7
7
  authors:
8
8
  - Matte Noble
@@ -10,20 +10,52 @@ autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
12
 
13
- date: 2011-02-15 00:00:00 -05:00
14
- default_executable:
13
+ date: 2011-05-12 00:00:00 Z
15
14
  dependencies:
16
15
  - !ruby/object:Gem::Dependency
17
- name: rspec
16
+ name: thor
18
17
  prerelease: false
19
18
  requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 0.14.6
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: rspec
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
20
30
  none: false
21
31
  requirements:
22
32
  - - ~>
23
33
  - !ruby/object:Gem::Version
24
34
  version: 2.1.0
25
35
  type: :development
26
- version_requirements: *id001
36
+ version_requirements: *id002
37
+ - !ruby/object:Gem::Dependency
38
+ name: fakeout
39
+ prerelease: false
40
+ requirement: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ">="
44
+ - !ruby/object:Gem::Version
45
+ version: 0.0.1
46
+ type: :development
47
+ version_requirements: *id003
48
+ - !ruby/object:Gem::Dependency
49
+ name: mnoble-fakefs
50
+ prerelease: false
51
+ requirement: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: 0.3.1
57
+ type: :development
58
+ version_requirements: *id004
27
59
  description: Simple iTerm2 project environment setup.
28
60
  email:
29
61
  - me@mattenoble.com
@@ -44,19 +76,26 @@ files:
44
76
  - Rakefile
45
77
  - bin/tabby
46
78
  - lib/tabby.rb
79
+ - lib/tabby/base.rb
80
+ - lib/tabby/cli.rb
81
+ - lib/tabby/creator.rb
82
+ - lib/tabby/editor.rb
47
83
  - lib/tabby/runner.rb
48
- - lib/tabby/version.rb
49
84
  - screenshot.png
50
85
  - script/tabby.osa.erb
86
+ - spec/.tabby/mismatch.rb
51
87
  - spec/.tabby/spec_blog.rb
52
- - spec/runner_spec.rb
53
88
  - spec/spec_helper.rb
54
89
  - spec/support/expand.rb
90
+ - spec/support/stub_constant.rb
55
91
  - spec/support/with_constants.rb
56
- - spec/support/with_stubbed_stdout.rb
57
- - spec/tabby_spec.rb
92
+ - spec/tabby/base_spec.rb
93
+ - spec/tabby/cli_spec.rb
94
+ - spec/tabby/creator_spec.rb
95
+ - spec/tabby/editor_spec.rb
96
+ - spec/tabby/runner_spec.rb
58
97
  - tabby.gemspec
59
- has_rdoc: true
98
+ - templates/project.rb.erb
60
99
  homepage: http://github.com/mnoble/tabby
61
100
  licenses: []
62
101
 
@@ -80,14 +119,17 @@ required_rubygems_version: !ruby/object:Gem::Requirement
80
119
  requirements: []
81
120
 
82
121
  rubyforge_project:
83
- rubygems_version: 1.5.0
122
+ rubygems_version: 1.7.2
84
123
  signing_key:
85
124
  specification_version: 3
86
125
  summary: Simple iTerm2 project environment setup.
87
126
  test_files:
88
- - spec/runner_spec.rb
89
127
  - spec/spec_helper.rb
90
128
  - spec/support/expand.rb
129
+ - spec/support/stub_constant.rb
91
130
  - spec/support/with_constants.rb
92
- - spec/support/with_stubbed_stdout.rb
93
- - spec/tabby_spec.rb
131
+ - spec/tabby/base_spec.rb
132
+ - spec/tabby/cli_spec.rb
133
+ - spec/tabby/creator_spec.rb
134
+ - spec/tabby/editor_spec.rb
135
+ - spec/tabby/runner_spec.rb
data/lib/tabby/version.rb DELETED
@@ -1,3 +0,0 @@
1
- module Tabby
2
- VERSION = "0.0.2"
3
- end
data/spec/runner_spec.rb DELETED
@@ -1,36 +0,0 @@
1
- require File.expand_path("../spec_helper", __FILE__)
2
- require File.expand_path("../.tabby/spec_blog", __FILE__)
3
-
4
- describe Tabby::Runner do
5
- subject { Tabby::Runner.new(["blog"]) }
6
-
7
- before :each do
8
- Kernel.stub(:system)
9
- end
10
-
11
- it "should tell the user when the project file is missing" do
12
- with_stubbed_stdout do |output|
13
- subject.should_receive(:require).and_raise(LoadError)
14
- subject.start
15
- output.should include "does not exist"
16
- end
17
- end
18
-
19
- it "should tell the user when the filename and classname don't match" do
20
- with_stubbed_stdout do |output|
21
- ObjectSpace.class.should_receive(:const_get).and_raise(NameError)
22
- subject.start
23
- output.should include "mismatch"
24
- end
25
- end
26
-
27
- it "should call the Tabby class" do
28
- Tabby::Runner.with_constants :TABBYDIR => expand("../.tabby", __FILE__) do
29
- blog = SpecBlog.new
30
- blog.should_receive(:call)
31
- SpecBlog.stub(:new) { blog }
32
- runner = Tabby::Runner.new(["spec_blog"])
33
- runner.start
34
- end
35
- end
36
- end
@@ -1,8 +0,0 @@
1
- class Object
2
- def with_stubbed_stdout(&block)
3
- _stdout = $stdout
4
- $stdout = stdout = StringIO.new
5
- yield stdout.string
6
- $stdout = _stdout
7
- end
8
- end