switch_file 0.1.0 → 0.1.1

Sign up to get free protection for your applications and to get access to all the features.
data/CHANGELOG.markdown CHANGED
@@ -1,3 +1,8 @@
1
+ 0.1.1 - 2012-04-10
2
+ -----------------
3
+
4
+ * [#1] Added 1.8.7 support.
5
+
1
6
  0.1.0 - 2012-04-10
2
7
  -----------------
3
8
 
data/README.markdown ADDED
@@ -0,0 +1,34 @@
1
+ SwitchFile
2
+ ----------
3
+
4
+ SwitchFile is a simple gem for opening a file related to a currently open file.
5
+
6
+ Usage
7
+ -----
8
+
9
+ 1. Install SwitchFile
10
+
11
+ gem install switch_file
12
+
13
+ 1. Add a `.switch_file` to your project root directory. A `.switch_file` is a
14
+ plain ruby file containing an array of hashes. Each hash represents
15
+ a file type. A file type has the following attributes:
16
+ * name - name of the file type
17
+ * shortcut - a short, unique key for the file type
18
+ * path_generator - a ruby block that will determine the path of the
19
+ matching file type of a class name
20
+ * path_regex - a regex that determines if a file path matches the file
21
+ type
22
+ * command - the editor that will open the file
23
+
24
+ You can find sample SwitchFile configuration files at the examples.
25
+
26
+ 1. Configure your editor to launch switch_file based on the current file. With [geany](http://www.geany.org),
27
+
28
+ 1. Go to Build/Set Build Commands.
29
+ 1. Change the execute command to `switch_file --path %d/%f`.
30
+ 1. Running Build/Execute will now launch switch_file based on the currently
31
+ open file.
32
+
33
+
34
+
@@ -0,0 +1,17 @@
1
+ [
2
+ {
3
+ :name => 'spec',
4
+ :shortcut => :s,
5
+ :path_generator => lambda {|class_name| "spec/lib/#{class_name}_spec.rb"},
6
+ :path_regex => %r{spec/lib/(.*)_spec.rb},
7
+ :command => 'geany'
8
+ },
9
+
10
+ {
11
+ :name => 'lib',
12
+ :shortcut => :l,
13
+ :path_generator => lambda {|class_name| "lib/#{class_name}.rb"},
14
+ :path_regex => %r{lib/(.*).rb},
15
+ :command => 'geany'
16
+ }
17
+ ]
@@ -0,0 +1,58 @@
1
+ [
2
+ {
3
+ :name => 'model_spec',
4
+ :shortcut => :ms,
5
+ :path_generator => lambda {|class_name| "spec/models/#{class_name}_spec.rb"},
6
+ :path_regex => %r{spec/models/(.*)_spec.rb},
7
+ :command => 'geany'
8
+ },
9
+ {
10
+ :name => 'controller_spec',
11
+ :shortcut => :cs,
12
+ :path_generator => lambda {|class_name| "spec/controllers/#{class_name}_spec.rb"},
13
+ :path_regex => %r{spec/controllers/(.*)_spec.rb},
14
+ :command => 'geany'
15
+ },
16
+ {
17
+ :name => 'helper_spec',
18
+ :shortcut => :hs,
19
+ :path_generator => lambda {|class_name| "spec/helpers/#{class_name}_spec.rb"},
20
+ :path_regex => %r{spec/helpers/(.*)_spec.rb},
21
+ :command => 'geany'
22
+ },
23
+ {
24
+ :name => 'lib_spec',
25
+ :shortcut => :ls,
26
+ :path_generator => lambda {|class_name| "spec/lib/#{class_name}_spec.rb"},
27
+ :path_regex => %r{spec/lib/(.*)_spec.rb},
28
+ :command => 'geany'
29
+ },
30
+ {
31
+ :name => 'model',
32
+ :shortcut => :m,
33
+ :path_generator => lambda {|class_name| "app/models/#{class_name}.rb"},
34
+ :path_regex => %r{app/models/(.*).rb},
35
+ :command => 'geany'
36
+ },
37
+ {
38
+ :name => 'controller',
39
+ :shortcut => :c,
40
+ :path_generator => lambda {|class_name| "app/controllers/#{class_name}.rb"},
41
+ :path_regex => %r{app/controllers/(.*).rb},
42
+ :command => 'geany'
43
+ },
44
+ {
45
+ :name => 'helper',
46
+ :shortcut => :h,
47
+ :path_generator => lambda {|class_name| "app/helpers/#{class_name}.rb"},
48
+ :path_regex => %r{app/helpers/(.*).rb},
49
+ :command => 'geany'
50
+ },
51
+ {
52
+ :name => 'lib',
53
+ :shortcut => :l,
54
+ :path_generator => lambda {|class_name| "lib/#{class_name}.rb"},
55
+ :path_regex => %r{lib/(.*).rb},
56
+ :command => 'geany'
57
+ }
58
+ ]
data/lib/switch_file.rb CHANGED
@@ -1,27 +1,22 @@
1
+ require "active_support/inflector"
1
2
  require 'pow'
2
3
  require 'thor'
3
4
  require 'valuable'
4
5
 
5
6
  require 'switch_file/app'
7
+ require 'switch_file/exception'
6
8
  require 'switch_file/file_type'
7
- require 'switch_file/file_type_shortcut'
8
- require 'switch_file/source_path'
9
+ require 'switch_file/project'
10
+ require 'switch_file/source'
9
11
  require "switch_file/version"
10
12
 
11
13
  module SwitchFile
12
- def self.config_path
13
- @config_path ||= (Pow(Dir.pwd) / '.switch_file')
14
+ def self.production?
15
+ @production.nil? ? true : @production
14
16
  end
15
17
 
16
- def self.config_path=(value)
17
- @config_path = value && Pow(value)
18
+ def self.production=(value)
19
+ @production = value
18
20
  end
21
+ end
19
22
 
20
- def self.file_type_attributes
21
- @file_type_attributes ||= eval(config_path.read)
22
- end
23
-
24
- def self.file_type_attributes=(attributes_array)
25
- @file_type_attributes = attributes_array
26
- end
27
- end
@@ -1,23 +1,45 @@
1
1
  module SwitchFile
2
2
  class App < Thor
3
- desc "execute PATH [OPTIONS]...", "Switch to the matching file type of PATH."
3
+ default_task :execute
4
+
5
+ desc "[execute] [OPTIONS]...", "Switch to the matching file type of PATH."
4
6
 
5
7
  method_option "shortcut",
6
8
  :aliases => "-s",
7
9
  :desc => "the shortcut of the file type you wish to open",
8
10
  :type => :string
9
11
 
10
- method_option "config",
11
- :aliases => "-c",
12
- :desc => "configuration path of the project. PRESENT_WORKING_DIRECTORY/.switch_file by default.",
13
- :type => :string
12
+ method_option "path",
13
+ :aliases => "-p",
14
+ :desc => "the path of the source file",
15
+ :type => :string,
16
+ :required => true
17
+
18
+ def execute
19
+ source = Source.new(:path => options['path'])
20
+
21
+ begin
22
+ shortcut = options['shortcut'] || ask(source.prompt_message)
23
+ unless shortcut.strip.empty?
24
+ begin
25
+ target_command = source.project.file_type_with_shortcut!(shortcut).generate_open_command(source)
26
+ `#{target_command}`
27
+ rescue SwitchFile::Exception => exception
28
+ if SwitchFile.production?
29
+ say exception.message
30
+ retry
31
+ end
32
+ end
33
+ end
34
+
35
+ rescue SwitchFile::Exception => exception
36
+ say exception.message if SwitchFile.production?
37
+ end
38
+ end
14
39
 
15
- def execute(source_path)
16
- SwitchFile.config_path = options['config']
17
- sp = SourcePath.new(value: source_path)
18
- shortcut = FileTypeShortcut.new(value: options['shortcut'] || ask(sp.prompt_message))
19
- target_command = shortcut.file_type.generate_open_command(sp)
20
- `#{target_command}`
40
+ def help
41
+ say "switch_file #{VERSION}"
42
+ super
21
43
  end
22
44
  end
23
45
  end
@@ -0,0 +1,7 @@
1
+ module SwitchFile
2
+ class Exception < ::Exception
3
+ def message
4
+ "#{self.class.to_s.demodulize.underscore.humanize}: #{super}"
5
+ end
6
+ end
7
+ end
@@ -1,21 +1,19 @@
1
1
  module SwitchFile
2
2
  # A type of file within the project
3
3
  class FileType < Valuable
4
- has_value :open_command
4
+ has_value :command
5
5
  has_value :name
6
+ has_value :path_generator
6
7
  has_value :path_regex
7
8
  has_value :shortcut
8
9
 
9
- def self.all
10
- @all ||= SwitchFile.file_type_attributes.map{|attributes| FileType.new(attributes) }
10
+ def generate_open_command(source)
11
+ "#{command} #{source.project.path}/#{relative_path(source)}"
11
12
  end
12
13
 
13
- def self.all=(file_types)
14
- @all = file_types
15
- end
16
-
17
- def generate_open_command(source_path)
18
- open_command.call(source_path.class_name)
14
+ # Path of matching file to source, relative to source's project
15
+ def relative_path(source)
16
+ path_generator.call(source.class_name)
19
17
  end
20
18
  end
21
19
  end
@@ -0,0 +1,26 @@
1
+ module SwitchFile
2
+ class Project < Valuable
3
+ has_value :path
4
+
5
+ def config_path
6
+ "#{path}/.switch_file"
7
+ end
8
+
9
+ def file_type_attributes
10
+ eval(Pow(config_path).read)
11
+ end
12
+
13
+ def file_type_with_shortcut!(shortcut)
14
+ file_types.detect{|file_type| shortcut.to_s == file_type.shortcut.to_s}.tap do |result|
15
+ raise NoMatchingFileTypeForShortcut.new(shortcut.to_s) if result.nil?
16
+ end
17
+ end
18
+
19
+ def file_types
20
+ @file_types ||= file_type_attributes.map{|attributes| FileType.new(attributes) }
21
+ end
22
+
23
+ class NoMatchingFileTypeForShortcut < SwitchFile::Exception
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,45 @@
1
+ module SwitchFile
2
+ # A source file
3
+ class Source < Valuable
4
+ has_value :path
5
+
6
+ def self.project_path(path)
7
+ parent = Pow(path).parent
8
+ if (parent / '.switch_file').file?
9
+ parent.to_s
10
+ elsif parent == Pow(path)
11
+ raise CannotFindProjectPath.new(path.to_s)
12
+ else
13
+ project_path(parent)
14
+ end
15
+ end
16
+
17
+ def class_name
18
+ path.match(file_type!.path_regex)[1]
19
+ end
20
+
21
+ def file_type!
22
+ project.file_types.detect{|file_type| path =~ file_type.path_regex }.tap do |result|
23
+ raise NoMatchingFileTypeForPath.new(path) if result.nil?
24
+ end
25
+ end
26
+
27
+ def project
28
+ @project ||= Project.new(:path => self.class.project_path(path))
29
+ end
30
+
31
+ def prompt_message
32
+ file_type_options = project.file_types.map{|file_type|
33
+ "[#{file_type.shortcut}] #{file_type.name}: #{file_type.relative_path(self)}"
34
+ }
35
+
36
+ "Enter the shortcut of the file you want to open:\n\n#{file_type_options.join("\n")}\n\n"
37
+ end
38
+
39
+ class CannotFindProjectPath < SwitchFile::Exception
40
+ end
41
+
42
+ class NoMatchingFileTypeForPath < SwitchFile::Exception
43
+ end
44
+ end
45
+ end
@@ -1,3 +1,3 @@
1
1
  module SwitchFile
2
- VERSION = "0.1.0"
2
+ VERSION = "0.1.1"
3
3
  end
@@ -1,13 +1,15 @@
1
1
  [
2
2
  {
3
- shortcut: :s,
4
- open_command: lambda {|class_name| "echo spec/lib/#{class_name}_spec.rb > tmp/result.txt"},
5
- path_regex: %r{spec/fixtures/project/spec/lib/(.*)_spec.rb}
3
+ :shortcut => :s,
4
+ :path_generator => lambda {|class_name| "spec/lib/#{class_name}_spec.rb > tmp/result.txt"},
5
+ :path_regex => %r{spec/fixtures/project/spec/lib/(.*)_spec.rb},
6
+ :command => 'echo'
6
7
  },
7
8
 
8
9
  {
9
- shortcut: :l,
10
- open_command: lambda {|class_name| "echo lib/#{class_name}_spec.rb > tmp/result.txt"},
11
- path_regex: %r{spec/fixtures/project/lib/(.*).rb}
10
+ :shortcut => :l,
11
+ :path_generator => lambda {|class_name| "lib/#{class_name}_spec.rb > tmp/result.txt"},
12
+ :path_regex => %r{spec/fixtures/project/lib/(.*).rb},
13
+ :command => 'echo'
12
14
  }
13
15
  ]
@@ -0,0 +1,2 @@
1
+ class SomeClass
2
+ end
@@ -2,10 +2,25 @@ require 'spec_helper'
2
2
 
3
3
  describe SwitchFile::App do
4
4
  describe "#execute" do
5
- it "should open the matching file_type of the source_path" do
5
+ it "should open the matching file_type of the source" do
6
6
  app = described_class.new
7
- app.invoke :execute, ["spec/fixtures/project/lib/project/sample.rb"], "shortcut" => 's', "config" => 'spec/fixtures/project/.switch_file'
8
- (test_tmp_dir / 'result.txt').read.chomp.should == 'spec/lib/project/sample_spec.rb'
7
+ app.invoke :execute, [], "path" => "spec/fixtures/project/lib/some_class.rb", "shortcut" => 's'
8
+ (test_tmp_dir / 'result.txt').read.chomp.should include('spec/lib/some_class_spec.rb')
9
+ end
10
+
11
+ it "should exit if the shortcut is blank" do
12
+ app = described_class.new
13
+ lambda { app.invoke :execute, [], "path" => "spec/fixtures/project/lib/some_class.rb", "shortcut" => "\n" }.should_not raise_error
14
+ end
15
+
16
+ it "should not fail if the shortcut is invalid" do
17
+ app = described_class.new
18
+ lambda { app.invoke :execute, [], "path" => "spec/fixtures/project/lib/some_class.rb", "shortcut" => "z" }.should_not raise_error
19
+ end
20
+
21
+ it "should fail if the path does not have a matching file type" do
22
+ app = described_class.new
23
+ lambda { app.invoke :execute, [], "path" => "spec/fixtures/project/Gemfile" }.should_not raise_error
9
24
  end
10
25
  end
11
26
  end
@@ -0,0 +1,9 @@
1
+ require 'spec_helper'
2
+
3
+ describe SwitchFile::Exception do
4
+ describe "#message" do
5
+ it "should include the class name of the exception" do
6
+ described_class.new('hello').message.should == 'Exception: hello'
7
+ end
8
+ end
9
+ end
@@ -1,35 +1,34 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe SwitchFile::FileType do
4
- describe "#all" do
5
- it "should be the set file types, if available" do
6
- file_type = FileType.new(shortcut: :s)
7
- FileType.all = [file_type]
8
- FileType.all.should == [file_type]
9
- end
4
+ describe "#generate_open_command" do
5
+ it "should return the command for opening the desired file type of the source" do
6
+ spec_file_type = FileType.new(
7
+ :path_generator => lambda{|class_name| "spec/lib/#{class_name}_spec.rb" },
8
+ :command => 'geany'
9
+ )
10
10
 
11
- it "should be the file types from the file_type_attributes, if there are no set file types" do
12
- FileType.all = nil
11
+ lib_file_type = FileType.new(
12
+ :path_regex => %r{lib/(.*).rb$}
13
+ )
13
14
 
14
- SwitchFile.file_type_attributes = [{shortcut: :s}]
15
+ source = Source.new(:path => Pow('spec/fixtures/project/lib/some_class.rb').to_s)
16
+ source.project.should_receive(:file_types).and_return([lib_file_type, spec_file_type])
15
17
 
16
- FileType.all.should have(1).file_type
17
- FileType.all[0].shortcut.should == :s
18
+ command = spec_file_type.generate_open_command(source)
19
+ command.should == "geany #{Pow('spec/fixtures/project/spec/lib/some_class_spec.rb').to_s}"
18
20
  end
19
21
  end
20
22
 
21
- describe "#generate_open_command" do
22
- it "should return the command for opening the desired file type of the source_path" do
23
- spec_file_type = FileType.new(open_command: lambda{|class_name|
24
- "geany spec/lib/#{class_name}_spec.rb"
25
- })
26
-
27
- lib_file_type = FileType.new(path_regex: %r{lib/(.*).rb$})
28
-
29
- FileType.all = [lib_file_type, spec_file_type]
23
+ describe "#path" do
24
+ it "should be the path of the matching file type of source" do
25
+ spec_file_type = FileType.new(
26
+ :path_generator => lambda{|class_name| "spec/lib/#{class_name}_spec.rb" },
27
+ :command => 'geany'
28
+ )
30
29
 
31
- command = spec_file_type.generate_open_command(SourcePath.new(value: '/home/user/project/lib/project/some_class.rb'))
32
- command.should == "geany spec/lib/project/some_class_spec.rb"
30
+ path = spec_file_type.relative_path(Source.new(:path => Pow('spec/fixtures/project/lib/some_class.rb').to_s))
31
+ path.should == "spec/lib/some_class_spec.rb"
33
32
  end
34
33
  end
35
34
  end
@@ -0,0 +1,46 @@
1
+ require 'spec_helper'
2
+
3
+ describe SwitchFile::Project do
4
+ describe "#file_type_with_shortcut!" do
5
+ it "should be the file_type with the same name as the shortcut" do
6
+ file_type = FileType.new(:shortcut => :s)
7
+ project = Project.new
8
+ project.should_receive(:file_types).and_return([file_type])
9
+
10
+ project.file_type_with_shortcut!(:s).shortcut.should == :s
11
+ end
12
+
13
+ it "should raise an error if there is no matching file type" do
14
+ file_type = FileType.new(:shortcut => :r)
15
+ project = Project.new
16
+ project.should_receive(:file_types).and_return([file_type])
17
+
18
+ lambda { project.file_type_with_shortcut!(:s) }.should raise_error(Project::NoMatchingFileTypeForShortcut)
19
+ end
20
+ end
21
+
22
+ describe "#file_types" do
23
+ it "should be the file types from the file_type_attributes" do
24
+ project = Project.new
25
+ project.should_receive(:file_type_attributes).and_return([{:shortcut => :s}])
26
+
27
+ project.file_types.should have(1).file_type
28
+ project.file_types[0].shortcut.should == :s
29
+ end
30
+ end
31
+
32
+ describe "#file_type_attributes" do
33
+ it "should be the file_type_attributes from the config_path, if there are no set file_type_attributes" do
34
+ project = Project.new(:path => 'spec/fixtures/project')
35
+ Pow(project.config_path).should be_file
36
+ project.file_type_attributes.should be_an(Array)
37
+ end
38
+ end
39
+
40
+ describe "#config_path" do
41
+ it "should be the .switch_file in the path" do
42
+ project = Project.new(:path => 'spec/fixtures/project')
43
+ project.config_path.should == 'spec/fixtures/project/.switch_file'
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,64 @@
1
+ require 'spec_helper'
2
+
3
+ describe SwitchFile::Source do
4
+ describe "#class_name" do
5
+ it "should be the part of the value that is the class name of the source path" do
6
+ source = Source.new(:path => 'spec/fixtures/project/lib/project/some_class.rb')
7
+ source.project.should_receive(:file_types).and_return([FileType.new(:path_regex => %r{lib/(.*).rb$})])
8
+ source.class_name.should == 'project/some_class'
9
+ end
10
+ end
11
+
12
+ describe "#file_type!" do
13
+ it "should be the file type that matches the source path" do
14
+ file_type = FileType.new(:path_regex => %r{lib/(.*).rb$})
15
+
16
+ source = Source.new(:path => 'spec/fixtures/project/lib/some_class.rb')
17
+ source.project.should_receive(:file_types).and_return([file_type])
18
+ source.file_type!.should == file_type
19
+ end
20
+ end
21
+
22
+ describe "#prompt_message" do
23
+ it "be the message to display if the user want to jump to file related to the source path" do
24
+ file_types = [
25
+ FileType.new(
26
+ :name => :spec,
27
+ :shortcut => :s,
28
+ :path_generator => lambda {|class_name| "spec/lib/#{class_name}_spec.rb"},
29
+ :path_regex => %r{spec/lib/(.*)_spec.rb},
30
+ :command => 'geany'
31
+ ),
32
+ FileType.new(
33
+ :name => :lib,
34
+ :shortcut => :l,
35
+ :path_generator => lambda {|class_name| "lib/#{class_name}.rb"},
36
+ :path_regex => %r{lib/(.*).rb},
37
+ :command => 'geany'
38
+ )
39
+ ]
40
+
41
+ source = Source.new(:path => Pow('spec/fixtures/project/lib/some_class.rb').to_s)
42
+ source.project.stub(:file_types).and_return(file_types)
43
+ source.prompt_message.should == "Enter the shortcut of the file you want to open:\n\n[s] spec: spec/lib/some_class_spec.rb\n[l] lib: lib/some_class.rb\n\n"
44
+ end
45
+ end
46
+
47
+ describe ".project_path" do
48
+ it "should be the ancestor of path that has a .switch_file file" do
49
+ Source.project_path(Pow('spec/fixtures/project/lib/some_class.rb').to_s).should == Pow('spec/fixtures/project').to_s
50
+ end
51
+
52
+ it "should raise an error if the path does not have a project_path" do
53
+ lambda { Source.project_path(Pow('/').to_s) }.should raise_error(Source::CannotFindProjectPath)
54
+ end
55
+ end
56
+
57
+ describe "project" do
58
+ it "should be the project which owns this source" do
59
+ source = Source.new(:path => 'spec/fixtures/project/lib/some_class.rb')
60
+ source.project.should be_a(Project)
61
+ source.project.path.should == Pow('spec/fixtures/project').to_s
62
+ end
63
+ end
64
+ end
@@ -1,37 +1,14 @@
1
1
  require 'spec_helper'
2
2
 
3
3
  describe SwitchFile do
4
- describe ".config_path" do
5
- it "should be the .switch_file in the present working directory, by default" do
6
- SwitchFile.config_path = nil
7
- SwitchFile.config_path.should == `pwd`.chomp + '/.switch_file'
4
+ describe "#production?" do
5
+ it "should be true by default" do
6
+ SwitchFile.production = nil
7
+ SwitchFile.production?.should be_true
8
8
  end
9
9
 
10
- it "should be the given config_path, if provided" do
11
- SwitchFile.config_path = 'spec/fixtures/project/.switch_file'
12
- SwitchFile.config_path.should be_a(Pow::Base)
13
- SwitchFile.config_path.to_s.should =~ /spec\/fixtures\/project\/.switch_file/
14
- end
15
- end
16
-
17
- describe ".config_path=" do
18
- it "should set the stored config_path to nil, if value is nil" do
19
- SwitchFile.config_path = nil
20
- SwitchFile.instance_variable_get(:@config_path).should be_nil
21
- end
22
- end
23
-
24
- describe ".file_type_attributes" do
25
- it "should be the set file_type_attributes, if available" do
26
- attribute_hash = {shortcut: :s}
27
- SwitchFile.file_type_attributes = [attribute_hash]
28
- SwitchFile.file_type_attributes.should == [attribute_hash]
29
- end
30
-
31
- it "should be the file_type_attributes from the config_path, if there are no set file_type_attributes" do
32
- SwitchFile.file_type_attributes = nil
33
- SwitchFile.config_path = Pow('spec/fixtures/project/.switch_file')
34
- SwitchFile.file_type_attributes.should be_an(Array)
10
+ it "should be false when testing" do
11
+ SwitchFile.production?.should be_false
35
12
  end
36
13
  end
37
14
  end
data/spec/spec_helper.rb CHANGED
@@ -5,11 +5,9 @@ RSpec.configure do |config|
5
5
  include SwitchFile
6
6
 
7
7
  config.before :each do
8
+ SwitchFile.production = false
8
9
  test_tmp_dir.delete! if test_tmp_dir.exists?
9
10
  test_tmp_dir.create_directory
10
- SwitchFile.config_path = Pow('spec/fixtures/project/.switch_file')
11
- SwitchFile.file_type_attributes = nil
12
- FileType.all = nil
13
11
  end
14
12
 
15
13
  def test_tmp_dir
data/switch_file.gemspec CHANGED
@@ -18,10 +18,12 @@ Gem::Specification.new do |s|
18
18
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
19
  s.require_paths = ["lib"]
20
20
 
21
+ s.add_runtime_dependency "active_support"
21
22
  s.add_runtime_dependency 'pow'
22
23
  s.add_runtime_dependency 'thor'
23
24
  s.add_runtime_dependency 'valuable'
24
25
 
26
+ s.add_development_dependency "coderay"
25
27
  s.add_development_dependency "guard"
26
28
  s.add_development_dependency "guard-rspec"
27
29
  s.add_development_dependency "pry"
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: switch_file
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.0
4
+ version: 0.1.1
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,22 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-04-10 00:00:00.000000000 Z
12
+ date: 2012-04-24 00:00:00.000000000 Z
13
13
  dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: active_support
16
+ requirement: &77491890 !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: *77491890
14
25
  - !ruby/object:Gem::Dependency
15
26
  name: pow
16
- requirement: &80765390 !ruby/object:Gem::Requirement
27
+ requirement: &77491400 !ruby/object:Gem::Requirement
17
28
  none: false
18
29
  requirements:
19
30
  - - ! '>='
@@ -21,10 +32,10 @@ dependencies:
21
32
  version: '0'
22
33
  type: :runtime
23
34
  prerelease: false
24
- version_requirements: *80765390
35
+ version_requirements: *77491400
25
36
  - !ruby/object:Gem::Dependency
26
37
  name: thor
27
- requirement: &80764340 !ruby/object:Gem::Requirement
38
+ requirement: &77490900 !ruby/object:Gem::Requirement
28
39
  none: false
29
40
  requirements:
30
41
  - - ! '>='
@@ -32,10 +43,10 @@ dependencies:
32
43
  version: '0'
33
44
  type: :runtime
34
45
  prerelease: false
35
- version_requirements: *80764340
46
+ version_requirements: *77490900
36
47
  - !ruby/object:Gem::Dependency
37
48
  name: valuable
38
- requirement: &80763720 !ruby/object:Gem::Requirement
49
+ requirement: &77490360 !ruby/object:Gem::Requirement
39
50
  none: false
40
51
  requirements:
41
52
  - - ! '>='
@@ -43,10 +54,21 @@ dependencies:
43
54
  version: '0'
44
55
  type: :runtime
45
56
  prerelease: false
46
- version_requirements: *80763720
57
+ version_requirements: *77490360
58
+ - !ruby/object:Gem::Dependency
59
+ name: coderay
60
+ requirement: &77489780 !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ type: :development
67
+ prerelease: false
68
+ version_requirements: *77489780
47
69
  - !ruby/object:Gem::Dependency
48
70
  name: guard
49
- requirement: &80763160 !ruby/object:Gem::Requirement
71
+ requirement: &77489310 !ruby/object:Gem::Requirement
50
72
  none: false
51
73
  requirements:
52
74
  - - ! '>='
@@ -54,10 +76,10 @@ dependencies:
54
76
  version: '0'
55
77
  type: :development
56
78
  prerelease: false
57
- version_requirements: *80763160
79
+ version_requirements: *77489310
58
80
  - !ruby/object:Gem::Dependency
59
81
  name: guard-rspec
60
- requirement: &80781130 !ruby/object:Gem::Requirement
82
+ requirement: &77488450 !ruby/object:Gem::Requirement
61
83
  none: false
62
84
  requirements:
63
85
  - - ! '>='
@@ -65,10 +87,10 @@ dependencies:
65
87
  version: '0'
66
88
  type: :development
67
89
  prerelease: false
68
- version_requirements: *80781130
90
+ version_requirements: *77488450
69
91
  - !ruby/object:Gem::Dependency
70
92
  name: pry
71
- requirement: &80780850 !ruby/object:Gem::Requirement
93
+ requirement: &77487630 !ruby/object:Gem::Requirement
72
94
  none: false
73
95
  requirements:
74
96
  - - ! '>='
@@ -76,10 +98,10 @@ dependencies:
76
98
  version: '0'
77
99
  type: :development
78
100
  prerelease: false
79
- version_requirements: *80780850
101
+ version_requirements: *77487630
80
102
  - !ruby/object:Gem::Dependency
81
103
  name: rspec
82
- requirement: &80780560 !ruby/object:Gem::Requirement
104
+ requirement: &77487370 !ruby/object:Gem::Requirement
83
105
  none: false
84
106
  requirements:
85
107
  - - ! '>='
@@ -87,7 +109,7 @@ dependencies:
87
109
  version: '0'
88
110
  type: :development
89
111
  prerelease: false
90
- version_requirements: *80780560
112
+ version_requirements: *77487370
91
113
  description: A configurable utility for jumping across files
92
114
  email:
93
115
  - gsmendoza@gmail.com
@@ -100,19 +122,25 @@ files:
100
122
  - CHANGELOG.markdown
101
123
  - Gemfile
102
124
  - Guardfile
125
+ - README.markdown
103
126
  - Rakefile
104
127
  - bin/switch_file
128
+ - examples/gem.switch_file
129
+ - examples/rails.switch_file
105
130
  - lib/switch_file.rb
106
131
  - lib/switch_file/app.rb
132
+ - lib/switch_file/exception.rb
107
133
  - lib/switch_file/file_type.rb
108
- - lib/switch_file/file_type_shortcut.rb
109
- - lib/switch_file/source_path.rb
134
+ - lib/switch_file/project.rb
135
+ - lib/switch_file/source.rb
110
136
  - lib/switch_file/version.rb
111
137
  - spec/fixtures/project/.switch_file
138
+ - spec/fixtures/project/lib/some_class.rb
112
139
  - spec/lib/switch_file/app_spec.rb
113
- - spec/lib/switch_file/file_type_shortcut_spec.rb
140
+ - spec/lib/switch_file/exception_spec.rb
114
141
  - spec/lib/switch_file/file_type_spec.rb
115
- - spec/lib/switch_file/source_path_spec.rb
142
+ - spec/lib/switch_file/project_spec.rb
143
+ - spec/lib/switch_file/source_spec.rb
116
144
  - spec/lib/switch_file_spec.rb
117
145
  - spec/spec_helper.rb
118
146
  - switch_file.gemspec
@@ -1,10 +0,0 @@
1
- module SwitchFile
2
- # Short cut of a FileType
3
- class FileTypeShortcut < Valuable
4
- has_value :value
5
-
6
- def file_type
7
- FileType.all.detect{|file_type| self.value.to_s == file_type.shortcut.to_s}
8
- end
9
- end
10
- end
@@ -1,22 +0,0 @@
1
- module SwitchFile
2
- # Path to a source file
3
- class SourcePath < Valuable
4
- has_value :value
5
-
6
- def class_name
7
- value.match(file_type.path_regex)[1]
8
- end
9
-
10
- def file_type
11
- FileType.all.detect{|file_type| value =~ file_type.path_regex }
12
- end
13
-
14
- def prompt_message
15
- file_type_options = FileType.all.map{|file_type|
16
- "[#{file_type.shortcut}] #{file_type.name}: #{file_type.generate_open_command(self)}"
17
- }
18
-
19
- "Enter the shortcut of the file you want to open:\n\n#{file_type_options.join("\n")}\n\n"
20
- end
21
- end
22
- end
@@ -1,21 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe SwitchFile::FileTypeShortcut do
4
- describe "#file_type" do
5
- it "should be the file_type with the same name as the short cut" do
6
- file_type = FileType.new(shortcut: :s)
7
- FileType.all = [file_type]
8
-
9
- short_cut = described_class.new(value: :s)
10
- short_cut.file_type.shortcut.should == :s
11
- end
12
-
13
- it "should be nil if there is no matching file type" do
14
- file_type = FileType.new(shortcut: :l)
15
- FileType.all = [file_type]
16
-
17
- short_cut = described_class.new(value: :s)
18
- short_cut.file_type.should be_nil
19
- end
20
- end
21
- end
@@ -1,44 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe SwitchFile::SourcePath do
4
- describe "#class_name" do
5
- it "should be the part of the value that is the class name of the source path" do
6
- FileType.all = [FileType.new(path_regex: %r{lib/(.*).rb$})]
7
-
8
- source_path = SourcePath.new(value: '/home/user/project/lib/project/some_class.rb')
9
- source_path.class_name.should == 'project/some_class'
10
- end
11
- end
12
-
13
- describe "#file_type" do
14
- it "should be the file type that matches the source path" do
15
- file_type = FileType.new(path_regex: %r{lib/(.*).rb$})
16
- FileType.all = [file_type]
17
-
18
- source_path = SourcePath.new(value: '/home/user/project/lib/project/some_class.rb')
19
- source_path.file_type.should == file_type
20
- end
21
- end
22
-
23
- describe "#prompt_message" do
24
- it "be the message to display if the user want to jump to file related to the source path" do
25
- FileType.all = [
26
- FileType.new(
27
- name: :spec,
28
- shortcut: :s,
29
- open_command: lambda {|class_name| "geany spec/lib/#{class_name}_spec.rb"},
30
- path_regex: %r{spec/lib/(.*)_spec.rb}
31
- ),
32
- FileType.new(
33
- name: :lib,
34
- shortcut: :l,
35
- open_command: lambda {|class_name| "geany lib/#{class_name}.rb"},
36
- path_regex: %r{lib/(.*).rb}
37
- )
38
- ]
39
-
40
- source_path = SourcePath.new(value: '/home/user/project/lib/project/some_class.rb')
41
- source_path.prompt_message.should == "Enter the shortcut of the file you want to open:\n\n[s] spec: geany spec/lib/project/some_class_spec.rb\n[l] lib: geany lib/project/some_class.rb\n\n"
42
- end
43
- end
44
- end