prj 0.0.2 → 0.1.0
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/README.md +2 -1
- data/VERSION +1 -1
- data/lib/prj/app.rb +1 -1
- data/lib/prj/filter.rb +4 -2
- data/spec/acceptance/app_spec.rb +8 -1
- data/spec/lib/prj/filter_spec.rb +8 -4
- metadata +2 -2
data/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
Prj
|
|
2
2
|
==========
|
|
3
3
|
|
|
4
|
-
[](https://travis-ci.org/v-yarotsky/prj)
|
|
5
5
|
[](https://codeclimate.com/github/v-yarotsky/prj)
|
|
6
6
|
[](http://badge.fury.io/rb/prj)
|
|
7
7
|
|
|
@@ -27,6 +27,7 @@ Installation & Configuration:
|
|
|
27
27
|
3. Put a project root directory name into ~/.prj.yml, i.e:
|
|
28
28
|
```
|
|
29
29
|
projects_root: ~/Projects
|
|
30
|
+
case_sensitive: false
|
|
30
31
|
vcs_directories:
|
|
31
32
|
- .git
|
|
32
33
|
- .svn
|
data/VERSION
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
0.0
|
|
1
|
+
0.1.0
|
data/lib/prj/app.rb
CHANGED
|
@@ -19,7 +19,7 @@ module Prj
|
|
|
19
19
|
return 0
|
|
20
20
|
end
|
|
21
21
|
finder = Finder.new(config.fetch("projects_root"), config.fetch("vcs_directories"))
|
|
22
|
-
filter = Filter.new(@letters)
|
|
22
|
+
filter = Filter.new(@letters, config.fetch("case_sensitive") { true })
|
|
23
23
|
directories = finder.find_project_directories
|
|
24
24
|
filtered_directories = filter.filter(directories)
|
|
25
25
|
target_directory = File.join(config.fetch("projects_root"), filtered_directories.first.to_s)
|
data/lib/prj/filter.rb
CHANGED
|
@@ -4,8 +4,9 @@ require 'strscan'
|
|
|
4
4
|
module Prj
|
|
5
5
|
|
|
6
6
|
class Filter
|
|
7
|
-
def initialize(letters)
|
|
7
|
+
def initialize(letters, case_sensitive = true)
|
|
8
8
|
@letters = letters.to_a
|
|
9
|
+
@case_sensitive = case_sensitive
|
|
9
10
|
end
|
|
10
11
|
|
|
11
12
|
def filter(directories)
|
|
@@ -15,7 +16,8 @@ module Prj
|
|
|
15
16
|
def distance(dir)
|
|
16
17
|
scanner = StringScanner.new(dir)
|
|
17
18
|
@letters.each do |letter|
|
|
18
|
-
|
|
19
|
+
regexp = Regexp.new(".*?[#{letter}]", !@case_sensitive)
|
|
20
|
+
scanner.scan(regexp) or return :no_score
|
|
19
21
|
end
|
|
20
22
|
scanner.pos - @letters.length
|
|
21
23
|
end
|
data/spec/acceptance/app_spec.rb
CHANGED
|
@@ -25,7 +25,7 @@ describe "Prj::App" do
|
|
|
25
25
|
subdirectories.each { |d| FileUtils.mkdir_p(d) }
|
|
26
26
|
end
|
|
27
27
|
|
|
28
|
-
context "
|
|
28
|
+
context "within projcts root" do
|
|
29
29
|
it "prints matching directory and returns 0" do
|
|
30
30
|
with_config("projects_root" => root) do
|
|
31
31
|
Prj::App.new(output, ["ap"]).run.should == 0
|
|
@@ -39,6 +39,13 @@ describe "Prj::App" do
|
|
|
39
39
|
output.string.chomp.should == root + "/"
|
|
40
40
|
end
|
|
41
41
|
end
|
|
42
|
+
|
|
43
|
+
it "allows case-insensitive search if option specified in config" do
|
|
44
|
+
with_config("projects_root" => root, "case_sensitive" => false) do
|
|
45
|
+
Prj::App.new(output, ["Fo"]).run.should == 0
|
|
46
|
+
output.string.chomp.should == File.join(root, "foo")
|
|
47
|
+
end
|
|
48
|
+
end
|
|
42
49
|
end
|
|
43
50
|
|
|
44
51
|
it "uses ~/.prj.yml as config file" do
|
data/spec/lib/prj/filter_spec.rb
CHANGED
|
@@ -2,10 +2,6 @@ require 'spec_helper'
|
|
|
2
2
|
require 'prj/filter'
|
|
3
3
|
|
|
4
4
|
describe "Prj::Filter" do
|
|
5
|
-
def filter(letters)
|
|
6
|
-
Prj::Filter.new(letters)
|
|
7
|
-
end
|
|
8
|
-
|
|
9
5
|
describe "#distance" do
|
|
10
6
|
it "should calculate distance as difference between character positions except first character position" do
|
|
11
7
|
filter(%w(f o)).distance("foo bar").should == 0
|
|
@@ -46,7 +42,15 @@ describe "Prj::Filter" do
|
|
|
46
42
|
dirs = ["/granny/", "/franchise/"]
|
|
47
43
|
filter(%w(a n)).filter(dirs).should == ["/granny/", "/franchise/"]
|
|
48
44
|
end
|
|
45
|
+
|
|
46
|
+
it "supports case-insensitive mode" do
|
|
47
|
+
dirs = ["/Hello/", "/hello-world/", "/hi-fella/"]
|
|
48
|
+
filter(%w(h e l l o), false).filter(dirs).should == ["/Hello/", "/hello-world/"]
|
|
49
|
+
end
|
|
49
50
|
end
|
|
50
51
|
|
|
52
|
+
def filter(letters, options = {})
|
|
53
|
+
Prj::Filter.new(letters, options)
|
|
54
|
+
end
|
|
51
55
|
end
|
|
52
56
|
|
metadata
CHANGED
|
@@ -2,14 +2,14 @@
|
|
|
2
2
|
name: prj
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease:
|
|
5
|
-
version: 0.0
|
|
5
|
+
version: 0.1.0
|
|
6
6
|
platform: ruby
|
|
7
7
|
authors:
|
|
8
8
|
- Vladimir Yarotsky
|
|
9
9
|
autorequire:
|
|
10
10
|
bindir: bin
|
|
11
11
|
cert_chain: []
|
|
12
|
-
date: 2013-06-
|
|
12
|
+
date: 2013-06-09 00:00:00.000000000 Z
|
|
13
13
|
dependencies:
|
|
14
14
|
- !ruby/object:Gem::Dependency
|
|
15
15
|
name: rspec
|