reditor 0.1.1 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 35bee5c62877ca050e26ad2d340b1db648ab3ee9
4
+ data.tar.gz: c54e40dde0e6f8fe6a6c60b040d02fe38f8fd247
5
+ SHA512:
6
+ metadata.gz: 7096bb557e3cfe6aac7fc7632c5aa533cae42bddff69cafb1b4065cc7eea0f8750b3f75bf2ef2f51538d0fd8c06667973ff39c4e5a341d68624fd85f6b137381
7
+ data.tar.gz: a7e4cddc1c9701a4380ad1257e73d24829a3f08998e7bd775814e9ac36fdf162e235f9579022201f7ae94a520c4ecfdec308f6b999a42e83307af0dbbde3ba9d
@@ -1,7 +1,10 @@
1
1
  #!/usr/bin/env ruby
2
2
  # coding: utf-8
3
3
 
4
+ $LOAD_PATH.unshift File.join(File.expand_path('../../', __FILE__), 'lib')
5
+
4
6
  require 'reditor'
5
7
 
6
8
  $PROGRAM_NAME = File.basename(__FILE__)
9
+
7
10
  Reditor::Command.start
@@ -1,5 +1,5 @@
1
1
  require 'pathname'
2
- require 'bundler'
2
+ require 'hotwater'
3
3
 
4
4
  module Reditor
5
5
  class CandidatesLocator
@@ -7,38 +7,46 @@ module Reditor
7
7
  new(keyword.to_s).detect
8
8
  end
9
9
 
10
- attr_reader :pattern
10
+ attr_reader :keyword, :limit
11
11
 
12
- def initialize(keyword)
13
- tokens = keyword.split(/[_\-]/).map {|keyword|
14
- keyword.length > 4 ? keyword[0...-3] : keyword
15
- }
16
-
17
- @pattern = /#{tokens.map {|t| Regexp.quote(t) }.join('|')}/i
12
+ def initialize(keyword, limit = 20)
13
+ @keyword, @limit = keyword, limit
18
14
  end
19
15
 
20
16
  def detect
21
- (detect_from_bundler + detect_from_loadpath + detect_from_gem).sort.uniq
17
+ available_libraries.sort_by {|name|
18
+ Hotwater.damerau_levenshtein_distance(@keyword, name)
19
+ }.take(@limit)
22
20
  end
23
21
 
24
- def detect_from_bundler
25
- Bundler.load.specs.select {|spec| spec.name =~ pattern }.map(&:name)
22
+ def available_libraries
23
+ (availables_from_loadpath +
24
+ availables_from_gem +
25
+ availables_from_bundler).uniq
26
+ end
27
+
28
+ private
29
+
30
+ def availables_from_bundler
31
+ require 'bundler'
32
+
33
+ Bundler.load.specs.map(&:name)
26
34
  rescue NameError, Bundler::GemNotFound, Bundler::GemfileNotFound
27
35
  []
28
36
  end
29
37
 
30
- def detect_from_loadpath
31
- $LOAD_PATH.map {|path|
32
- pathname = Pathname.new(File.expand_path(path))
33
-
34
- pathname.entries.select {|entry|
35
- entry.extname == '.rb' && entry.to_path =~ pattern
36
- }.map {|entry| entry.basename('.*').to_path }
37
- }.flatten
38
+ def availables_from_gem
39
+ Gem::Specification.map(&:name)
40
+ rescue Gem::LoadError
41
+ []
38
42
  end
39
43
 
40
- def detect_from_gem
41
- Gem::Specification.each.select {|spec| spec.name =~ pattern }.map(&:name)
44
+ def availables_from_loadpath
45
+ $LOAD_PATH.each_with_object([]) {|path, availables|
46
+ Pathname.new(File.expand_path(path)).entries.each do |entry|
47
+ availables << entry.basename('.rb').to_s if entry.extname == '.rb'
48
+ end
49
+ }
42
50
  end
43
51
  end
44
52
  end
@@ -56,23 +56,21 @@ module Reditor
56
56
  end
57
57
 
58
58
  block.call dir, file
59
- rescue LibraryNotFound => e
60
- warn e.message
61
59
  end
62
60
 
63
61
  def choose_exec(name, &block)
64
62
  candidates = CandidatesLocator.detect(name)
65
63
 
66
- raise LibraryNotFound, "Library #{name} not found" if candidates.empty?
67
-
68
64
  candidates.each.with_index do |candidate, i|
69
65
  say "[#{i}] #{candidate}"
70
66
  end
71
67
  print "Choose number of library [0]> "
72
68
 
73
- chosen = Integer($stdin.gets.strip) rescue 0
69
+ abort_reditor unless num = $stdin.gets
74
70
 
75
- detect_exec candidates[chosen], &block
71
+ detect_exec candidates[num.to_i], &block
72
+ rescue Interrupt
73
+ abort_reditor
76
74
  end
77
75
 
78
76
  def editor_command
@@ -82,5 +80,11 @@ module Reditor
82
80
  def shell_command
83
81
  ENV['SHELL'] or raise '$SHELL is not provided.'
84
82
  end
83
+
84
+ def abort_reditor
85
+ puts
86
+
87
+ exit
88
+ end
85
89
  end
86
90
  end
@@ -1,5 +1,4 @@
1
1
  require 'pathname'
2
- require 'bundler'
3
2
 
4
3
  # TODO: care version specification
5
4
  module Reditor
@@ -19,11 +18,12 @@ module Reditor
19
18
  end
20
19
 
21
20
  def detect_from_bundler
21
+ require 'bundler'
22
+
22
23
  return nil unless spec = Bundler.load.specs.find {|spec| spec.name == name }
23
24
 
24
25
  Pathname.new(spec.full_gem_path)
25
- rescue NameError # ensure enviroments that bundler isn't installed
26
- rescue Bundler::GemNotFound, Bundler::GemfileNotFound
26
+ rescue NameError, Bundler::GemNotFound, Bundler::GemfileNotFound
27
27
  end
28
28
 
29
29
  def detect_from_loadpath
@@ -41,7 +41,6 @@ module Reditor
41
41
 
42
42
  Pathname.new(spec.full_gem_path)
43
43
  rescue Gem::LoadError
44
- nil
45
44
  end
46
45
  end
47
46
  end
@@ -1,3 +1,3 @@
1
1
  module Reditor
2
- VERSION = '0.1.1'
2
+ VERSION = '0.2.0'
3
3
  end
@@ -4,8 +4,8 @@ require File.expand_path('../lib/reditor/version', __FILE__)
4
4
  Gem::Specification.new do |gem|
5
5
  gem.authors = ['hibariya']
6
6
  gem.email = ['celluloid.key@gmail.com']
7
- gem.description = %q{Open a ruby library by your editor}
8
- gem.summary = %q{Open a ruby library by your editor}
7
+ gem.description = %q{Open a ruby library with your editor. Reditor supports gem, bundler, and stdlib(pure ruby).}
8
+ gem.summary = %q{Open a ruby library with your editor}
9
9
  gem.homepage = 'https://github.com/hibariya/reditor'
10
10
 
11
11
  gem.files = `git ls-files`.split($\)
@@ -15,8 +15,12 @@ Gem::Specification.new do |gem|
15
15
  gem.require_paths = ['lib']
16
16
  gem.version = Reditor::VERSION
17
17
 
18
- gem.add_runtime_dependency 'thor', '>= 0.15.4'
18
+ gem.add_runtime_dependency 'hotwater', '~> 0.1.2'
19
+ gem.add_runtime_dependency 'thor', '~> 0.17.0'
20
+ gem.add_runtime_dependency 'rake', '~> 10.0.3' # workaround for `WARN: Unresolved specs during Gem::Specification.reset: rake (>= 0)' on ruby-2.0.0
19
21
 
20
- gem.add_development_dependency 'tapp', '>= 1.3.1'
21
- gem.add_development_dependency 'rspec', '>= 2.10.0'
22
+ gem.add_development_dependency 'pry'
23
+ gem.add_development_dependency 'rake'
24
+ gem.add_development_dependency 'rspec', '~> 2.13.0'
25
+ gem.add_development_dependency 'tapp'
22
26
  end
@@ -24,10 +24,10 @@ describe 'reditor command' do
24
24
  it { should match /thread\.rb$/ }
25
25
  end
26
26
 
27
- context 'Standard library in non-bundler broject (no library found)' do
28
- subject { capture_reditor('3600645b1f28d73e9cd0384b5b9664d6ceeabe7e', where: 'blank_project') }
27
+ context 'Incorrect name library in non-bundler broject' do
28
+ subject { capture_reditor('cvs', where: 'blank_project') }
29
29
 
30
- it { should match 'Library 3600645b1f28d73e9cd0384b5b9664d6ceeabe7e not found' }
30
+ it { should match /\[0\] csv/ }
31
31
  end
32
32
 
33
33
  context 'rubygems library in non-bundler project' do
File without changes
metadata CHANGED
@@ -1,65 +1,115 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: reditor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.1
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - hibariya
9
8
  autorequire:
10
9
  bindir: bin
11
10
  cert_chain: []
12
- date: 2013-01-05 00:00:00.000000000 Z
11
+ date: 2013-03-04 00:00:00.000000000 Z
13
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: hotwater
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ~>
18
+ - !ruby/object:Gem::Version
19
+ version: 0.1.2
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: 0.1.2
14
27
  - !ruby/object:Gem::Dependency
15
28
  name: thor
16
29
  requirement: !ruby/object:Gem::Requirement
17
- none: false
18
30
  requirements:
19
- - - ! '>='
31
+ - - ~>
20
32
  - !ruby/object:Gem::Version
21
- version: 0.15.4
33
+ version: 0.17.0
22
34
  type: :runtime
23
35
  prerelease: false
24
36
  version_requirements: !ruby/object:Gem::Requirement
25
- none: false
26
37
  requirements:
27
- - - ! '>='
38
+ - - ~>
28
39
  - !ruby/object:Gem::Version
29
- version: 0.15.4
40
+ version: 0.17.0
30
41
  - !ruby/object:Gem::Dependency
31
- name: tapp
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - ~>
46
+ - !ruby/object:Gem::Version
47
+ version: 10.0.3
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - ~>
53
+ - !ruby/object:Gem::Version
54
+ version: 10.0.3
55
+ - !ruby/object:Gem::Dependency
56
+ name: pry
32
57
  requirement: !ruby/object:Gem::Requirement
33
- none: false
34
58
  requirements:
35
- - - ! '>='
59
+ - - '>='
36
60
  - !ruby/object:Gem::Version
37
- version: 1.3.1
61
+ version: '0'
38
62
  type: :development
39
63
  prerelease: false
40
64
  version_requirements: !ruby/object:Gem::Requirement
41
- none: false
42
65
  requirements:
43
- - - ! '>='
66
+ - - '>='
44
67
  - !ruby/object:Gem::Version
45
- version: 1.3.1
68
+ version: '0'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rake
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - '>='
74
+ - !ruby/object:Gem::Version
75
+ version: '0'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - '>='
81
+ - !ruby/object:Gem::Version
82
+ version: '0'
46
83
  - !ruby/object:Gem::Dependency
47
84
  name: rspec
48
85
  requirement: !ruby/object:Gem::Requirement
49
- none: false
50
86
  requirements:
51
- - - ! '>='
87
+ - - ~>
88
+ - !ruby/object:Gem::Version
89
+ version: 2.13.0
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: 2.13.0
97
+ - !ruby/object:Gem::Dependency
98
+ name: tapp
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - '>='
52
102
  - !ruby/object:Gem::Version
53
- version: 2.10.0
103
+ version: '0'
54
104
  type: :development
55
105
  prerelease: false
56
106
  version_requirements: !ruby/object:Gem::Requirement
57
- none: false
58
107
  requirements:
59
- - - ! '>='
108
+ - - '>='
60
109
  - !ruby/object:Gem::Version
61
- version: 2.10.0
62
- description: Open a ruby library by your editor
110
+ version: '0'
111
+ description: Open a ruby library with your editor. Reditor supports gem, bundler,
112
+ and stdlib(pure ruby).
63
113
  email:
64
114
  - celluloid.key@gmail.com
65
115
  executables:
@@ -80,35 +130,37 @@ files:
80
130
  - lib/reditor/version.rb
81
131
  - reditor.gemspec
82
132
  - spec/command_spec.rb
133
+ - spec/samples/blank_project/.gitkeep
83
134
  - spec/samples/bundler_project/Gemfile
84
135
  - spec/samples/bundler_project_without_lockfile/Gemfile
85
136
  - spec/spec_helper.rb
86
137
  homepage: https://github.com/hibariya/reditor
87
138
  licenses: []
139
+ metadata: {}
88
140
  post_install_message:
89
141
  rdoc_options: []
90
142
  require_paths:
91
143
  - lib
92
144
  required_ruby_version: !ruby/object:Gem::Requirement
93
- none: false
94
145
  requirements:
95
- - - ! '>='
146
+ - - '>='
96
147
  - !ruby/object:Gem::Version
97
148
  version: '0'
98
149
  required_rubygems_version: !ruby/object:Gem::Requirement
99
- none: false
100
150
  requirements:
101
- - - ! '>='
151
+ - - '>='
102
152
  - !ruby/object:Gem::Version
103
153
  version: '0'
104
154
  requirements: []
105
155
  rubyforge_project:
106
- rubygems_version: 1.8.23
156
+ rubygems_version: 2.0.0
107
157
  signing_key:
108
- specification_version: 3
109
- summary: Open a ruby library by your editor
158
+ specification_version: 4
159
+ summary: Open a ruby library with your editor
110
160
  test_files:
111
161
  - spec/command_spec.rb
162
+ - spec/samples/blank_project/.gitkeep
112
163
  - spec/samples/bundler_project/Gemfile
113
164
  - spec/samples/bundler_project_without_lockfile/Gemfile
114
165
  - spec/spec_helper.rb
166
+ has_rdoc: