rib 1.2.3 → 1.2.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.
- checksums.yaml +4 -4
- data/.travis.yml +1 -1
- data/CHANGES.md +9 -0
- data/lib/rib/runner.rb +14 -8
- data/lib/rib/shell.rb +9 -6
- data/lib/rib/test.rb +4 -0
- data/lib/rib/version.rb +1 -1
- data/rib.gemspec +3 -3
- data/test/test_runner.rb +19 -0
- data/test/test_shell.rb +39 -23
- metadata +2 -2
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: e72a119f6305e6c1e85579ae3e1b22564b6b5b56
         | 
| 4 | 
            +
              data.tar.gz: 71f3bedf29f8cf9ae94a3fe9cfcf7317d0ef617c
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: e5733937ed0bbb20cf9372a68e8fb937c1570d9a734e68e5137175237145ccc7f149bf7a3b9fcd5874aa37a3dd3c957a0487567ef6ee9161af88017dce160693
         | 
| 7 | 
            +
              data.tar.gz: 31e66ea9bd8c01276b6c8b4a08e3321af27f47ff64f36295f5a85f52777a4ae47aa9194a61e79de96dd6a09aa22bea7706da4b73ae3d51c35f38ba5659f45372
         | 
    
        data/.travis.yml
    CHANGED
    
    
    
        data/CHANGES.md
    CHANGED
    
    | @@ -1,5 +1,14 @@ | |
| 1 1 | 
             
            # CHANGES
         | 
| 2 2 |  | 
| 3 | 
            +
            ## Rib 1.2.4 -- 2014-03-13
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * Fixed a regression introduced in 1.2.0. Now `rib all -e 'p 123'` should
         | 
| 6 | 
            +
              work properly. Previously -e is ignored after rib apps.
         | 
| 7 | 
            +
            * Fixed a long standing Windows issue, where `rib all` did not work because
         | 
| 8 | 
            +
              there's no `which` on Windows. Now we fall back to `where`.
         | 
| 9 | 
            +
            * Warn on removing main method on `TOPLEVEL_BINDING`. Not sure if this
         | 
| 10 | 
            +
              would happen, but at least we could have a warning.
         | 
| 11 | 
            +
             | 
| 3 12 | 
             
            ## Rib 1.2.3 -- 2014-02-08
         | 
| 4 13 |  | 
| 5 14 | 
             
            * [extra/paging] Properly disable paging if less or ENV['PAGER'] is not
         | 
    
        data/lib/rib/runner.rb
    CHANGED
    
    | @@ -66,15 +66,14 @@ module Rib::Runner | |
| 66 66 |  | 
| 67 67 | 
             
              def run argv=ARGV
         | 
| 68 68 | 
             
                (@running_commands ||= []) << Rib.config[:name]
         | 
| 69 | 
            -
                unused | 
| 69 | 
            +
                unused = parse(argv)
         | 
| 70 70 | 
             
                # if it's running a Rib command, the loop would be inside Rib itself
         | 
| 71 71 | 
             
                # so here we only parse args for the command
         | 
| 72 72 | 
             
                return if @running_commands.pop != 'rib'
         | 
| 73 | 
            -
                # by  | 
| 73 | 
            +
                # by coming to this line, it means now we're running Rib main loop,
         | 
| 74 74 | 
             
                # not any other Rib command
         | 
| 75 75 | 
             
                Rib.warn("Unused arguments: #{unused.inspect}") unless unused.empty?
         | 
| 76 76 | 
             
                require 'rib/core' if Rib.config.delete(:mimic_irb)
         | 
| 77 | 
            -
                Rib.shell.eval_binding.eval(e, __FILE__, __LINE__)
         | 
| 78 77 | 
             
                loop
         | 
| 79 78 | 
             
              end
         | 
| 80 79 |  | 
| @@ -97,11 +96,12 @@ module Rib::Runner | |
| 97 96 | 
             
              end
         | 
| 98 97 |  | 
| 99 98 | 
             
              def parse argv
         | 
| 100 | 
            -
                unused | 
| 99 | 
            +
                unused = []
         | 
| 101 100 | 
             
                until argv.empty?
         | 
| 102 101 | 
             
                  case arg = argv.shift
         | 
| 103 102 | 
             
                  when /^-e=?(.+)?/, /^--eval=?(.+)?/
         | 
| 104 | 
            -
                     | 
| 103 | 
            +
                    Rib.shell.eval_binding.eval(
         | 
| 104 | 
            +
                      $1 || argv.shift || '', __FILE__, __LINE__)
         | 
| 105 105 |  | 
| 106 106 | 
             
                  when /^-d/, '--debug'
         | 
| 107 107 | 
             
                    $DEBUG = true
         | 
| @@ -141,7 +141,7 @@ module Rib::Runner | |
| 141 141 | 
             
                    unused << arg
         | 
| 142 142 | 
             
                  end
         | 
| 143 143 | 
             
                end
         | 
| 144 | 
            -
                 | 
| 144 | 
            +
                unused
         | 
| 145 145 | 
             
              end
         | 
| 146 146 |  | 
| 147 147 | 
             
              def parse_next argv, arg
         | 
| @@ -165,15 +165,21 @@ module Rib::Runner | |
| 165 165 |  | 
| 166 166 | 
             
              def load_command command
         | 
| 167 167 | 
             
                bin  = "rib-#{command}"
         | 
| 168 | 
            -
                path =  | 
| 168 | 
            +
                path = which_bin(bin)
         | 
| 169 169 | 
             
                if path == ''
         | 
| 170 170 | 
             
                  Rib.warn(
         | 
| 171 171 | 
             
                    "Can't find #{bin} in $PATH. Please make sure it is installed,",
         | 
| 172 | 
            -
                    "or is there any typo? You can try this to install it:\n" | 
| 172 | 
            +
                    "or is there any typo? You can try this to install it:\n"      ,
         | 
| 173 173 | 
             
                    "    gem install #{bin}")
         | 
| 174 174 | 
             
                else
         | 
| 175 175 | 
             
                  Rib.config[:name] = bin
         | 
| 176 176 | 
             
                  load(path)
         | 
| 177 177 | 
             
                end
         | 
| 178 178 | 
             
              end
         | 
| 179 | 
            +
             | 
| 180 | 
            +
              def which_bin bin # handle windows here
         | 
| 181 | 
            +
                `which #{bin}`.strip
         | 
| 182 | 
            +
              rescue Errno::ENOENT # probably a windows platform, try where
         | 
| 183 | 
            +
                `where #{bin}`.lines.first.strip
         | 
| 184 | 
            +
              end
         | 
| 179 185 | 
             
            end
         | 
    
        data/lib/rib/shell.rb
    CHANGED
    
    | @@ -69,11 +69,14 @@ class Rib::Shell | |
| 69 69 | 
             
              # Avoid namespace pollution from rubygems bin stub.
         | 
| 70 70 | 
             
              # To be specific, version and str.
         | 
| 71 71 | 
             
              def new_private_binding
         | 
| 72 | 
            -
                TOPLEVEL_BINDING. | 
| 73 | 
            -
             | 
| 74 | 
            -
             | 
| 75 | 
            -
             | 
| 76 | 
            -
             | 
| 77 | 
            -
             | 
| 72 | 
            +
                TOPLEVEL_BINDING.instance_eval do
         | 
| 73 | 
            +
                  singleton_class.module_eval do
         | 
| 74 | 
            +
                    Rib.warn("Removing existing main...") if method_defined?(:main)
         | 
| 75 | 
            +
                    def main; binding; end # any way to define <main> method?
         | 
| 76 | 
            +
                  end
         | 
| 77 | 
            +
                  ret = main
         | 
| 78 | 
            +
                  singleton_class.send(:remove_method, 'main') # never pollute anything
         | 
| 79 | 
            +
                  ret
         | 
| 80 | 
            +
                end
         | 
| 78 81 | 
             
              end
         | 
| 79 82 | 
             
            end
         | 
    
        data/lib/rib/test.rb
    CHANGED
    
    
    
        data/lib/rib/version.rb
    CHANGED
    
    
    
        data/rib.gemspec
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            # -*- encoding: utf-8 -*-
         | 
| 2 | 
            -
            # stub: rib 1.2. | 
| 2 | 
            +
            # stub: rib 1.2.4 ruby lib
         | 
| 3 3 |  | 
| 4 4 | 
             
            Gem::Specification.new do |s|
         | 
| 5 5 | 
             
              s.name = "rib"
         | 
| 6 | 
            -
              s.version = "1.2. | 
| 6 | 
            +
              s.version = "1.2.4"
         | 
| 7 7 |  | 
| 8 8 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 9 9 | 
             
              s.require_paths = ["lib"]
         | 
| 10 10 | 
             
              s.authors = ["Lin Jen-Shin (godfat)"]
         | 
| 11 | 
            -
              s.date = "2014- | 
| 11 | 
            +
              s.date = "2014-03-13"
         | 
| 12 12 | 
             
              s.description = "Ruby-Interactive-ruBy -- Yet another interactive Ruby shell\n\nRib is based on the design of [ripl][] and the work of [ripl-rc][], some of\nthe features are also inspired by [pry][]. The aim of Rib is to be fully\nfeatured and yet very easy to opt-out or opt-in other features. It shall\nbe simple, lightweight and modular so that everyone could customize Rib.\n\n[ripl]: https://github.com/cldwalker/ripl\n[ripl-rc]: https://github.com/godfat/ripl-rc\n[pry]: https://github.com/pry/pry"
         | 
| 13 13 | 
             
              s.email = ["godfat (XD) godfat.org"]
         | 
| 14 14 | 
             
              s.executables = [
         | 
    
        data/test/test_runner.rb
    CHANGED
    
    | @@ -32,4 +32,23 @@ describe Rib::Runner do | |
| 32 32 | 
             
                output
         | 
| 33 33 | 
             
                Rib::Runner.run(%w[-e]).should.eq @shell
         | 
| 34 34 | 
             
              end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
              def verify_app_e argv
         | 
| 37 | 
            +
                 input('a')
         | 
| 38 | 
            +
                output('1')
         | 
| 39 | 
            +
                conf = {:name => 'rib'}
         | 
| 40 | 
            +
                min  = 'rib-min'
         | 
| 41 | 
            +
                mock(Rib::Runner).which_bin(min){ min }
         | 
| 42 | 
            +
                mock(Rib::Runner).load(min){ Rib::Runner.run(argv) }
         | 
| 43 | 
            +
                stub(Rib).config{ conf }
         | 
| 44 | 
            +
                Rib::Runner.run(argv).should.eq @shell
         | 
| 45 | 
            +
              end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
              should 'min -e' do
         | 
| 48 | 
            +
                verify_app_e(%w[min -ea=1])
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
             | 
| 51 | 
            +
              should '-e min' do
         | 
| 52 | 
            +
                verify_app_e(%w[-ea=1 min])
         | 
| 53 | 
            +
              end
         | 
| 35 54 | 
             
            end
         | 
    
        data/test/test_shell.rb
    CHANGED
    
    | @@ -7,40 +7,44 @@ describe Rib::Shell do | |
| 7 7 |  | 
| 8 8 | 
             
              before do
         | 
| 9 9 | 
             
                Rib.disable_plugins
         | 
| 10 | 
            -
                @shell =  | 
| 10 | 
            +
                @shell = nil
         | 
| 11 | 
            +
              end
         | 
| 12 | 
            +
             | 
| 13 | 
            +
              def shell
         | 
| 14 | 
            +
                @shell ||= Rib::Shell.new
         | 
| 11 15 | 
             
              end
         | 
| 12 16 |  | 
| 13 17 | 
             
              describe '#loop' do
         | 
| 14 18 | 
             
                def input str
         | 
| 15 | 
            -
                  mock( | 
| 16 | 
            -
                   | 
| 19 | 
            +
                  mock(shell).get_input{str}
         | 
| 20 | 
            +
                  shell.loop
         | 
| 17 21 | 
             
                  true.should.eq true
         | 
| 18 22 | 
             
                end
         | 
| 19 23 | 
             
                should 'exit'      do                               input('exit' ) end
         | 
| 20 24 | 
             
                should 'also exit' do                               input(' exit') end
         | 
| 21 | 
            -
                should 'ctrl+d'    do mock( | 
| 22 | 
            -
                should ':q'        do  | 
| 23 | 
            -
                should '\q'        do  | 
| 25 | 
            +
                should 'ctrl+d'    do mock(shell).puts{}         ; input(nil)     end
         | 
| 26 | 
            +
                should ':q'        do shell.config[:exit] << ':q'; input(':q')    end
         | 
| 27 | 
            +
                should '\q'        do shell.config[:exit] << '\q'; input('\q')    end
         | 
| 24 28 | 
             
              end
         | 
| 25 29 |  | 
| 26 30 | 
             
              describe '#loop_once' do
         | 
| 27 31 | 
             
                def input str=nil
         | 
| 28 32 | 
             
                  if block_given?
         | 
| 29 | 
            -
                    mock( | 
| 33 | 
            +
                    mock(shell).get_input{ yield }
         | 
| 30 34 | 
             
                  else
         | 
| 31 | 
            -
                    mock( | 
| 35 | 
            +
                    mock(shell).get_input{ str }
         | 
| 32 36 | 
             
                  end
         | 
| 33 | 
            -
                   | 
| 37 | 
            +
                  shell.loop_once
         | 
| 34 38 | 
             
                  true.should.eq true
         | 
| 35 39 | 
             
                end
         | 
| 36 40 |  | 
| 37 41 | 
             
                should 'handles ctrl+c' do
         | 
| 38 | 
            -
                  mock( | 
| 42 | 
            +
                  mock(shell).handle_interrupt{}
         | 
| 39 43 | 
             
                  input{ raise Interrupt }
         | 
| 40 44 | 
             
                end
         | 
| 41 45 |  | 
| 42 46 | 
             
                should 'prints result' do
         | 
| 43 | 
            -
                  mock( | 
| 47 | 
            +
                  mock(shell).puts('=> "mm"'){}
         | 
| 44 48 | 
             
                  input('"m" * 2')
         | 
| 45 49 | 
             
                end
         | 
| 46 50 |  | 
| @@ -55,44 +59,56 @@ describe Rib::Shell do | |
| 55 59 | 
             
                end
         | 
| 56 60 |  | 
| 57 61 | 
             
                should 'print error from eval' do
         | 
| 58 | 
            -
                  mock( | 
| 62 | 
            +
                  mock(shell).puts(match(/RuntimeError/)){}
         | 
| 59 63 | 
             
                  input('raise "blah"')
         | 
| 60 64 | 
             
                end
         | 
| 61 65 | 
             
              end
         | 
| 62 66 |  | 
| 63 67 | 
             
              describe '#prompt' do
         | 
| 64 68 | 
             
                should 'be changeable' do
         | 
| 65 | 
            -
                   | 
| 66 | 
            -
                   | 
| 69 | 
            +
                  shell.config[:prompt] = '> '
         | 
| 70 | 
            +
                  shell.prompt.should.eq  '> '
         | 
| 67 71 | 
             
                end
         | 
| 68 72 | 
             
              end
         | 
| 69 73 |  | 
| 70 74 | 
             
              describe '#eval_input' do
         | 
| 71 75 | 
             
                before do
         | 
| 72 | 
            -
                  @line =  | 
| 76 | 
            +
                  @line = shell.config[:line]
         | 
| 73 77 | 
             
                end
         | 
| 74 78 |  | 
| 75 79 | 
             
                should 'line' do
         | 
| 76 | 
            -
                   | 
| 77 | 
            -
                   | 
| 80 | 
            +
                  shell.eval_input('10 ** 2')
         | 
| 81 | 
            +
                  shell.config[:line].should.eq @line + 1
         | 
| 78 82 | 
             
                end
         | 
| 79 83 |  | 
| 80 84 | 
             
                should 'print error and increments line' do
         | 
| 81 | 
            -
                  result, err =  | 
| 85 | 
            +
                  result, err = shell.eval_input('{')
         | 
| 82 86 | 
             
                  result.should.eq nil
         | 
| 83 87 | 
             
                  err.should.kind_of?(SyntaxError)
         | 
| 84 | 
            -
                   | 
| 88 | 
            +
                  shell.config[:line].should.eq @line + 1
         | 
| 85 89 | 
             
                end
         | 
| 86 90 | 
             
              end
         | 
| 87 91 |  | 
| 88 92 | 
             
              should 'call after_loop even if in_loop raises' do
         | 
| 89 | 
            -
                mock( | 
| 93 | 
            +
                mock(shell).loop_once{ raise 'boom' }
         | 
| 90 94 | 
             
                mock(Rib).warn(is_a(String)){}
         | 
| 91 | 
            -
                mock( | 
| 92 | 
            -
                lambda{ | 
| 95 | 
            +
                mock(shell).after_loop{}
         | 
| 96 | 
            +
                lambda{shell.loop}.should.raise(RuntimeError)
         | 
| 93 97 | 
             
              end
         | 
| 94 98 |  | 
| 95 99 | 
             
              should 'have empty binding' do
         | 
| 96 | 
            -
                 | 
| 100 | 
            +
                shell.eval_input('local_variables').first.should.empty
         | 
| 101 | 
            +
              end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
              should 'not pollute main' do
         | 
| 104 | 
            +
                shell.eval_input('main').first.should.eq 'rib'
         | 
| 105 | 
            +
              end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
              should 'warn on removing main' do
         | 
| 108 | 
            +
                TOPLEVEL_BINDING.singleton_class.module_eval do
         | 
| 109 | 
            +
                  def main; end
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
                mock(Rib).warn(is_a(String)){}
         | 
| 112 | 
            +
                shell.eval_input('main').first.should.eq 'rib'
         | 
| 97 113 | 
             
              end
         | 
| 98 114 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rib
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.2. | 
| 4 | 
            +
              version: 1.2.4
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Lin Jen-Shin (godfat)
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014- | 
| 11 | 
            +
            date: 2014-03-13 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies: []
         | 
| 13 13 | 
             
            description: |-
         | 
| 14 14 | 
             
              Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
         |