reditor 0.1.1 → 0.2.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.
@@ -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: