bond 0.3.3 → 0.3.4

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/CHANGELOG.rdoc CHANGED
@@ -1,3 +1,8 @@
1
+ == 0.3.4
2
+ * Add gem plugin completion
3
+ * Add jruby support thanks to @headius
4
+ * Add bare option to Bond.start
5
+
1
6
  == 0.3.3
2
7
  * Add Bond.restart
3
8
 
data/README.rdoc CHANGED
@@ -207,6 +207,7 @@ has good instructions for reinstalling ruby with the official Readline.
207
207
  * Takao Kouji for {commiting}[http://svn.ruby-lang.org/cgi-bin/viewvc.cgi/trunk/ext/readline/readline.c?view=diff&r1=24018&r2=24019] this Readline enhancement to ruby 1.9.2.
208
208
  * pd for compatibility with emacs' inf-ruby mode.
209
209
  * timcharper for improving extconf.rb.
210
+ * headius for jruby support
210
211
 
211
212
  == Links
212
213
  * http://tagaholic.me/2010/05/07/screencast-of-argument-autocompletion-for-methods-in-irb.html
@@ -7,7 +7,7 @@ def dummy_makefile
7
7
  }
8
8
  end
9
9
 
10
- if RUBY_VERSION < '1.9.2'
10
+ if RUBY_VERSION < '1.9.2' && RUBY_PLATFORM !~ /java/
11
11
  dir_config("readline")
12
12
  have_library('readline')
13
13
  if !have_header('readline/readline.h')
data/lib/bond.rb CHANGED
@@ -88,7 +88,8 @@ module Bond
88
88
  #
89
89
  # @param [Hash] options Sets global keys in {#config}, some which specify what completions to load.
90
90
  # @option options [Array<String>] :gems Gems which have their completions loaded from
91
- # @gem_source/lib/bond/completions/*.rb.
91
+ # @gem_source/lib/bond/completions/*.rb. If gem is a plugin gem i.e. ripl-plugin, completion will be loaded
92
+ # from @gem_source/lib/ripl/completions/plugin.rb.
92
93
  # @option options [Array<String>] :yard_gems Gems using yard documentation to generate completions. See {Yard}.
93
94
  # @option options [Module] :readline_plugin (Bond::Readline) Specifies a Bond plugin to interface with a Readline-like
94
95
  # library. Available plugins are Bond::Readline and Bond::Rawline.
@@ -102,7 +103,9 @@ module Bond
102
103
  # @option options [Boolean] :debug (false) Shows the stacktrace when autocompletion fails and raises exceptions
103
104
  # in Rc.eval.
104
105
  # @option options [Boolean] :eval_debug (false) Raises eval errors occuring when finding a matching completion.
105
- # Useful to debug an incorrect completion.
106
+ # Useful to debug an incorrect completion
107
+ # @option options [Boolean] :bare (false) Doesn't load default ruby completions and completions in
108
+ # ~/.bond*. Useful for non-ruby completions
106
109
  def start(options={}, &block); M.start(options, &block); end
107
110
 
108
111
  # Restarts completions with given options, ensuring to delete current completions.
@@ -2,7 +2,7 @@ complete(:methods=>%w{Bond.complete Bond.recomplete}) {
2
2
  ["on", "method", "methods", "class", "object", "anywhere", "prefix", "search", "action", "place", "name"]
3
3
  }
4
4
  complete(:methods=>['Bond.start', 'Bond.restart']) {
5
- ["gems", "yard_gems", "readline_plugin", "default_mission", "default_search", "eval_binding", "debug", "eval_debug"]
5
+ %w{gems yard_gems readline_plugin default_mission default_search eval_binding debug eval_debug bare}
6
6
  }
7
7
  complete(:method=>'Bond.load_yard_gems') {
8
8
  ["verbose", "reload"]
data/lib/bond/m.rb CHANGED
@@ -91,9 +91,15 @@ module Bond
91
91
  def load_dir(base_dir)
92
92
  if File.exists?(dir = File.join(base_dir, 'completions'))
93
93
  Dir[dir + '/*.rb'].each {|file| load_file(file) }
94
+ true
94
95
  end
95
96
  end
96
97
 
98
+ # Loads completions from gems
99
+ def load_gems(*gems)
100
+ gems.select {|e| load_gem_completion(e) }
101
+ end
102
+
97
103
  # Find a user's home in a cross-platform way
98
104
  def home
99
105
  ['HOME', 'USERPROFILE'].each {|e| return ENV[e] if ENV[e] }
@@ -105,21 +111,27 @@ module Bond
105
111
 
106
112
  protected
107
113
  def load_gem_completion(rubygem)
108
- (dir = find_gem_file(rubygem, File.join(rubygem, '..', 'bond'))) ?
109
- load_dir(dir) : $stderr.puts("Bond Error: No completions found for gem '#{rubygem}'.")
114
+ (dir = find_gem_file(rubygem, File.join(rubygem, '..', 'bond'))) ? load_dir(dir) :
115
+ rubygem[/\/|-/] ? load_plugin_file(rubygem) :
116
+ $stderr.puts("Bond Error: No completions found for gem '#{rubygem}'.")
110
117
  end
111
118
 
112
- def load_gems(*gems)
113
- gems.select {|e| load_gem_completion(e) }
119
+ def load_plugin_file(rubygem)
120
+ namespace, file = rubygem.split(/\/|-/, 2)
121
+ file += '.rb' unless file[/\.rb$/]
122
+ if (dir = $:.find {|e| File.exists?(File.join(e, namespace, 'completions', file)) })
123
+ load_file File.join(dir, namespace, 'completions', file)
124
+ true
125
+ end
114
126
  end
115
127
 
116
128
  def load_completions
117
- load_file File.join(File.dirname(__FILE__), 'completion.rb')
118
- load_dir File.dirname(__FILE__)
129
+ load_file File.join(File.dirname(__FILE__), 'completion.rb') unless config[:bare]
130
+ load_dir File.dirname(__FILE__) unless config[:bare]
119
131
  load_gems *config[:gems] if config[:gems]
120
132
  Yard.load_yard_gems *config[:yard_gems] if config[:yard_gems]
121
- load_file(File.join(home,'.bondrc')) if File.exists?(File.join(home, '.bondrc'))
122
- load_dir File.join(home, '.bond')
133
+ load_file(File.join(home,'.bondrc')) if File.exists?(File.join(home, '.bondrc')) && !config[:bare]
134
+ load_dir File.join(home, '.bond') unless config[:bare]
123
135
  end
124
136
  end
125
137
  end
data/lib/bond/readline.rb CHANGED
@@ -7,7 +7,9 @@ module Bond
7
7
  # Loads the readline-like library and sets the completion_proc to the given agent.
8
8
  def setup(agent)
9
9
  require 'readline'
10
- load_extension unless ::Readline.respond_to?(:line_buffer)
10
+ unless ::Readline.respond_to?(:line_buffer)
11
+ RUBY_PLATFORM =~ /java/ ? load_jruby_extension : load_extension
12
+ end
11
13
 
12
14
  # Reinforcing irb defaults
13
15
  ::Readline.completion_append_character = nil
@@ -21,10 +23,21 @@ module Bond
21
23
  end
22
24
  end
23
25
 
26
+ def load_jruby_extension
27
+ require 'jruby'
28
+
29
+ class << Readline
30
+ ReadlineExt = org.jruby.ext.Readline
31
+ def line_buffer
32
+ ReadlineExt.s_get_line_buffer(JRuby.runtime.current_context, JRuby.reference(self))
33
+ end
34
+ end
35
+ end
36
+
24
37
  def load_extension
25
38
  require 'readline_line_buffer'
26
39
  rescue LoadError
27
- $stderr.puts "Bond Error: Failed to load readline_line_buffer.bundle. Ensure that it exists and was built correctly."
40
+ $stderr.puts "Bond Error: Failed to load readline_line_buffer. Ensure that it exists and was built correctly."
28
41
  end
29
42
 
30
43
  # Returns full line of what the user has typed.
@@ -32,4 +45,4 @@ module Bond
32
45
  ::Readline.line_buffer
33
46
  end
34
47
  end
35
- end
48
+ end
data/lib/bond/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Bond
2
- VERSION = '0.3.3'
2
+ VERSION = '0.3.4'
3
3
  end
@@ -14,8 +14,8 @@ describe "Completion" do
14
14
  end
15
15
 
16
16
  it "completes absolute constants anywhere" do
17
- tab("blah ::Arr").should == ["::Array"]
18
- tab("h[::Arr").should == ["h[::Array"]
17
+ tab("blah ::Has").should == ["::Hash"]
18
+ tab("h[::Has").should == ["h[::Hash"]
19
19
  end
20
20
 
21
21
  it "completes invalid constants safely" do
@@ -145,4 +145,4 @@ describe "Completion" do
145
145
  behaves_like "objects"
146
146
  end
147
147
  end
148
- end
148
+ end
@@ -43,9 +43,9 @@ describe "completions for" do
43
43
 
44
44
  describe "Object" do
45
45
  it "#instance_of?" do
46
- expectations = ['Array']
47
- expectations = ["Array", "Array::"] if Config::CONFIG["RUBY_SO_NAME"].to_s[/rubinius/i]
48
- tab("[].instance_of? Arr").should == expectations
46
+ expectations = ['Hash']
47
+ expectations = ["Hash", "Hash::"] if Config::CONFIG["RUBY_SO_NAME"].to_s[/rubinius/i]
48
+ tab("[].instance_of? Has").should == expectations
49
49
  end
50
50
 
51
51
  it "#is_a?" do
data/test/m_test.rb ADDED
@@ -0,0 +1,34 @@
1
+ require File.join(File.dirname(__FILE__), 'test_helper')
2
+
3
+ describe "M" do
4
+ describe "#load_gems" do
5
+ before { $: << '/dir' }
6
+ after { $:.pop }
7
+
8
+ def mock_file_exists(file)
9
+ File.expects(:exists?).at_least(1).returns(false).with {|e| e != file }
10
+ File.expects(:exists?).times(1).returns(true).with {|e| e == file }
11
+ end
12
+
13
+ it "loads gem" do
14
+ M.expects(:gem)
15
+ mock_file_exists '/dir/boom/../bond'
16
+ M.expects(:load_dir).with('/dir/boom/../bond').returns(true)
17
+ Bond.load_gems('boom').should == ['boom']
18
+ end
19
+
20
+ it "loads plugin gem in gem format" do
21
+ M.expects(:find_gem_file).returns(false)
22
+ mock_file_exists '/dir/boom/completions/what.rb'
23
+ M.expects(:load_file).with('/dir/boom/completions/what.rb')
24
+ Bond.load_gems('boom-what').should == ['boom-what']
25
+ end
26
+
27
+ it "loads plugin gem in file format" do
28
+ M.expects(:find_gem_file).returns(false)
29
+ mock_file_exists '/dir/boom/completions/what.rb'
30
+ M.expects(:load_file).with('/dir/boom/completions/what.rb')
31
+ Bond.load_gems('boom/what.rb').should == ['boom/what.rb']
32
+ end
33
+ end
34
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: bond
3
3
  version: !ruby/object:Gem::Version
4
- hash: 21
4
+ hash: 27
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
8
  - 3
9
- - 3
10
- version: 0.3.3
9
+ - 4
10
+ version: 0.3.4
11
11
  platform: ruby
12
12
  authors:
13
13
  - Gabriel Horner
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-11-09 00:00:00 -05:00
18
+ date: 2010-12-23 00:00:00 -05:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
@@ -118,6 +118,7 @@ files:
118
118
  - test/bond_test.rb
119
119
  - test/completion_test.rb
120
120
  - test/completions_test.rb
121
+ - test/m_test.rb
121
122
  - test/method_mission_test.rb
122
123
  - test/mission_test.rb
123
124
  - test/object_mission_test.rb
@@ -140,7 +141,7 @@ licenses:
140
141
  post_install_message:
141
142
  rdoc_options:
142
143
  - --title
143
- - Bond 0.3.3 Documentation
144
+ - Bond 0.3.4 Documentation
144
145
  require_paths:
145
146
  - lib
146
147
  required_ruby_version: !ruby/object:Gem::Requirement