binding.repl 0.6.0 → 0.7.0

Sign up to get free protection for your applications and to get access to all the features.
data/ChangeLog.txt CHANGED
@@ -1,3 +1,15 @@
1
+ == v0.7.0
2
+ - catch JSON parse errors when reading .binding.repl.rc
3
+ closes #7
4
+
5
+ - no longer read from project-local .binding.repl.rc file
6
+ the $BINDING_REPL_ORDER environment variable can be set if you
7
+ want to override the settings defined by $HOME/.binding.repl.rc
8
+
9
+ - read shell env var $BINDING_REPL_ORDER
10
+ set of $BINDING_REPL_ORDER stops the .binding.repl.rc file from
11
+ being loaded and takes precendence. closes #9.
12
+
1
13
  == v0.6.0
2
14
  - add Binding.repl.{disable!,enable!}.
3
15
  turn binding.repl.{pry,irb,ripl,auto} into a no-op.
data/README.md CHANGED
@@ -29,14 +29,20 @@ consoles (if I missed one, open an issue or send an e-note :)).
29
29
 
30
30
  __EXAMPLES__
31
31
 
32
+ _Rails_
33
+
32
34
  ```ruby
33
35
  class BlogsController < ApplicationController
34
36
  def show
35
37
  @blog = Blog.find(params[:id])
36
- binding.repl.{pry,irb,ripl}
38
+ binding.repl.{pry,irb,ripl,auto}
37
39
  end
38
40
  end
41
+ ```
39
42
 
43
+ _Auto discovery_
44
+
45
+ ```ruby
40
46
  class Bar
41
47
  # auto discover and start the first available console.
42
48
  # default order is: ripl, pry, or irb.
@@ -48,7 +54,11 @@ class Bar
48
54
  # remove "irb" from auto discovery
49
55
  Binding.repl.auto_load_order -= ["irb"]
50
56
  end
57
+ ```
58
+
59
+ _Enable/disable at runtime_
51
60
 
61
+ ```ruby
52
62
  class Baz
53
63
  # invoke irb
54
64
  binding.repl.irb
@@ -88,32 +98,25 @@ class Foo
88
98
  end
89
99
  ```
90
100
 
91
- _DEPENDENCIES_
92
-
93
- binding.repl doesn't depend on anything. it's up to you to meet the
94
- dependencies(pry, irb, and/or ripl). `binding.repl.{ripl,pry,irb}`
95
- will try to load the appropiate console for you if it looks like it
96
- hasn't been loaded yet.
97
-
98
101
  _WORKING WITH TEAMS_
99
102
 
100
103
  people working in teams might have different choices for what ruby
101
104
  console they like to use and __binding.repl__ tries to accomondate by
102
- reading a `.binding.repl.rc` file from $HOME or the current working
103
- directory. It's a very simple JSON file.
105
+ reading a `.binding.repl.rc` file from $HOME or by setting a shell
106
+ environment variable. `binding.repl.rc` is a simple JSON file.
104
107
 
105
108
  let's say rob & amy are working on some code together. amy prefers
106
- IRB, so her `$HOME/.binding.repl.rc` would look like this:
109
+ ripl, so her `$HOME/.binding.repl.rc` would look like this:
107
110
  ```javascript
108
111
  {
109
- "auto_load_order": ["irb", "pry", "ripl"]
112
+ "auto_load_order": ["ripl", "irb"]
110
113
  }
111
114
  ```
112
115
 
113
116
  rob prefers pry, so his `$HOME/.binding.repl.rc` would look like this:
114
117
  ```ruby
115
118
  {
116
- "auto_load_order": ["pry", "ripl", "irb"]
119
+ "auto_load_order": ["pry", "irb"]
117
120
  }
118
121
  ```
119
122
 
@@ -122,12 +125,32 @@ they can use `binding.repl.auto`:
122
125
 
123
126
  ```ruby
124
127
  class Foo
125
- # starts "irb" in the context of Foo for amy.
126
- # starts "pry" in the context of Foo for rob.
128
+ # starts "irb" in the context of Foo for amy. fall back console is "irb".
129
+ # starts "pry" in the context of Foo for rob. fall back console is "irb".
127
130
  binding.repl.auto
128
131
  end
129
132
  ```
130
133
 
134
+ _SHELL ENVIRONMENT VARIABLES_
135
+
136
+ binding.repl can be configured with a couple of shell environment variables.
137
+
138
+ ```bash
139
+ # disable trying to read $HOME/.binding.repl.rc
140
+ export BINDING_REPL_RC=0
141
+
142
+ # set the 'auto' load order
143
+ # takes precendence over $HOME/.binding.repl.rc when set
144
+ export BINDING_REPL_ORDER=pry,irb
145
+ ```
146
+
147
+ _DEPENDENCIES_
148
+
149
+ binding.repl doesn't depend on anything. it's up to you to meet the
150
+ dependencies(pry, irb, and/or ripl). `binding.repl.{ripl,pry,irb}`
151
+ will try to load the appropiate console for you if it looks like it
152
+ hasn't been loaded yet.
153
+
131
154
  __INSTALL__
132
155
 
133
156
  ruby 1.9+ only.
data/lib/binding.repl.rb CHANGED
@@ -18,7 +18,7 @@ class BindingRepl
18
18
  end
19
19
 
20
20
  def self.version
21
- "0.6.0"
21
+ "0.7.0"
22
22
  end
23
23
 
24
24
  def self.disabled?
@@ -56,8 +56,7 @@ class BindingRepl
56
56
  end
57
57
 
58
58
  def auto
59
- load_order = Binding.repl.auto_load_order
60
- exit_value = nil
59
+ load_order, exit_value = Binding.repl.auto_load_order, nil
61
60
  load_order.each do |console|
62
61
  exit_value = invoke_console(console.to_sym, {})
63
62
  return exit_value unless invoke_failed?(exit_value)
@@ -92,8 +91,6 @@ private
92
91
  already_required = predicate.call
93
92
  if !already_required
94
93
  require(console.to_s)
95
- # IRB hack.
96
- IRB.setup(nil) if console == :irb
97
94
  end
98
95
  end
99
96
  end
@@ -108,7 +105,4 @@ end
108
105
  require_relative "binding.repl/console/pry"
109
106
  require_relative "binding.repl/console/irb"
110
107
  require_relative "binding.repl/console/ripl"
111
-
112
- if ENV["BINDING_REPL_RC"] != "0"
113
- require_relative "binding.repl/rc"
114
- end
108
+ require_relative "binding.repl/rc"
@@ -1,7 +1,13 @@
1
1
  predicate = lambda do
2
2
  defined?(IRB)
3
3
  end
4
+
5
+ irb_setup = false
4
6
  runner = lambda do |binding, options|
7
+ unless irb_setup
8
+ IRB.setup(nil)
9
+ irb_setup = true
10
+ end
5
11
  irb = IRB::Irb.new IRB::WorkSpace.new(binding)
6
12
  IRB.conf[:MAIN_CONTEXT] = irb.context
7
13
  trap("SIGINT") { irb.signal_handle }
@@ -1,18 +1,24 @@
1
- require "json"
2
- home_rc = File.join ENV["HOME"], ".binding.repl.rc"
3
- local_rc = File.join Dir.getwd, ".binding.repl.rc"
1
+ module Binding.repl::RC
2
+ module_function
3
+ def home_rc
4
+ File.join ENV["HOME"], ".binding.repl.rc"
5
+ end
4
6
 
5
- if File.exists?(local_rc)
6
- json = File.read(local_rc)
7
- else
8
- if File.exists?(home_rc)
9
- json = File.read(home_rc)
7
+ def safe_load
8
+ if File.readable?(home_rc)
9
+ blob = File.read(home_rc)
10
+ rc = JSON.parse File.read(home_rc)
11
+ Binding.repl.auto_load_order = rc["auto_load_order"]
12
+ end
13
+ rescue StandardError => e
14
+ warn "binding.repl: '#{home_rc}' read failed (#{e.class}): #{e.message}"
10
15
  end
11
16
  end
12
17
 
13
- if json
14
- options = JSON.parse(json) rescue nil
18
+ if ENV["BINDING_REPL_ORDER"].nil? && ENV["BINDING_REPL_RC"] != "0"
19
+ require "json"
20
+ Binding.repl::RC.safe_load
15
21
  end
16
- if options
17
- Binding.repl.auto_load_order = options["auto_load_order"]
22
+ if ENV.has_key?("BINDING_REPL_ORDER")
23
+ Binding.repl.auto_load_order = ENV["BINDING_REPL_ORDER"].split /[:,]/
18
24
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: binding.repl
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.0
4
+ version: 0.7.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-09-29 00:00:00.000000000 Z
12
+ date: 2013-10-02 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: bundler
@@ -85,7 +85,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
85
85
  version: '0'
86
86
  segments:
87
87
  - 0
88
- hash: 1608399329349294521
88
+ hash: -334178767323369465
89
89
  requirements: []
90
90
  rubyforge_project:
91
91
  rubygems_version: 1.8.23