rib 0.9.1 → 0.9.2
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/CHANGES.md +6 -0
- data/lib/rib/extra/autoindent.rb +65 -25
- data/lib/rib/version.rb +1 -1
- data/rib.gemspec +2 -2
- data/task/gemgem.rb +1 -1
- metadata +14 -14
    
        data/CHANGES.md
    CHANGED
    
    | @@ -1,5 +1,11 @@ | |
| 1 1 | 
             
            # Rib CHANGES
         | 
| 2 2 |  | 
| 3 | 
            +
            ## Rib 0.9.2 -- 2011-08-25
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            * [extra/autoindent] It has been greatly improved. A lot more accurate.
         | 
| 6 | 
            +
            * [extra/autoindent] Fixed a bug when you're typing too fast upon rib
         | 
| 7 | 
            +
                                 launching, it might eat your input. Thanks bootleq.
         | 
| 8 | 
            +
             | 
| 3 9 | 
             
            ## Rib 0.9.1 -- 2011-08-19
         | 
| 4 10 |  | 
| 5 11 | 
             
            * [extra/autoindent] Autoindent plugin help you indent multiline editing.
         | 
    
        data/lib/rib/extra/autoindent.rb
    CHANGED
    
    | @@ -40,13 +40,22 @@ module Rib::Autoindent | |
| 40 40 | 
             
                /^until/         => /^(end)\b/                ,
         | 
| 41 41 | 
             
                # consider cases:
         | 
| 42 42 | 
             
                # 'do
         | 
| 43 | 
            -
                #  | 
| 43 | 
            +
                # ' do
         | 
| 44 | 
            +
                # "' do
         | 
| 44 45 | 
             
                # /do
         | 
| 45 46 | 
             
                # '{
         | 
| 46 | 
            -
                #  | 
| 47 | 
            -
                #  | 
| 48 | 
            -
                 | 
| 49 | 
            -
                 | 
| 47 | 
            +
                # %q{
         | 
| 48 | 
            +
                # %q| do
         | 
| 49 | 
            +
                # hey, two lines are even harder!
         | 
| 50 | 
            +
                # "
         | 
| 51 | 
            +
                # begin
         | 
| 52 | 
            +
                /do( *\|.*\|)?$/ => /^(end)\b/                ,
         | 
| 53 | 
            +
                /\{( *\|.*\|)?$/ => /^(\})\B/                 ,
         | 
| 54 | 
            +
                # those are too hard to deal with, so we use syntax error to double check
         | 
| 55 | 
            +
                # what about this then?
         | 
| 56 | 
            +
                # v = if true
         | 
| 57 | 
            +
                #     else
         | 
| 58 | 
            +
                #     end
         | 
| 50 59 | 
             
              }
         | 
| 51 60 |  | 
| 52 61 | 
             
              # --------------- Rib API ---------------
         | 
| @@ -59,43 +68,74 @@ module Rib::Autoindent | |
| 59 68 |  | 
| 60 69 | 
             
              def get_input
         | 
| 61 70 | 
             
                return super if Autoindent.disabled?
         | 
| 71 | 
            +
                # this is only a fix in case we don't autoindent correctly
         | 
| 72 | 
            +
                # if we're autoindenting 100% correct, then this is a useless check
         | 
| 62 73 | 
             
                autoindent_stack.clear if multiline_buffer.empty?
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                # this should be called after ::Readline.readline, but it's blocking,
         | 
| 76 | 
            +
                # and i don't know if there's any hook to do this, so here we use thread
         | 
| 63 77 | 
             
                Thread.new do
         | 
| 64 78 | 
             
                  sleep(0.01)
         | 
| 65 | 
            -
                   | 
| 66 | 
            -
             | 
| 67 | 
            -
                  ::Readline.line_buffer = current_autoindent
         | 
| 79 | 
            +
                  ::Readline.line_buffer = current_autoindent if
         | 
| 80 | 
            +
                    ::Readline.line_buffer.empty?
         | 
| 68 81 | 
             
                end
         | 
| 82 | 
            +
             | 
| 69 83 | 
             
                super
         | 
| 70 84 | 
             
              end
         | 
| 71 85 |  | 
| 72 | 
            -
              def  | 
| 86 | 
            +
              def eval_input raw_input
         | 
| 73 87 | 
             
                return super if Autoindent.disabled?
         | 
| 74 | 
            -
                 | 
| 75 | 
            -
             | 
| 76 | 
            -
                 | 
| 77 | 
            -
             | 
| 78 | 
            -
             | 
| 88 | 
            +
                input  = raw_input.strip
         | 
| 89 | 
            +
                indent = detect_autoindent(input)
         | 
| 90 | 
            +
                result, err = if indent.first.to_s.start_with?('left')
         | 
| 91 | 
            +
                                super(handle_last_line(input))
         | 
| 92 | 
            +
                              else
         | 
| 93 | 
            +
                                super
         | 
| 94 | 
            +
                              end
         | 
| 95 | 
            +
                handle_autoindent(input, indent, err)
         | 
| 96 | 
            +
                [result, err]
         | 
| 79 97 | 
             
              end
         | 
| 80 98 |  | 
| 81 99 | 
             
              # --------------- Plugin API ---------------
         | 
| 82 100 |  | 
| 83 | 
            -
              def  | 
| 84 | 
            -
                _,  | 
| 85 | 
            -
                if  | 
| 86 | 
            -
                   | 
| 87 | 
            -
                  nil
         | 
| 101 | 
            +
              def detect_autoindent input
         | 
| 102 | 
            +
                _, backmark = BLOCK_REGEXP.find{ |key,  _| input =~ key }
         | 
| 103 | 
            +
                if backmark # e.g. begin
         | 
| 104 | 
            +
                  [:right, backmark]
         | 
| 88 105 | 
             
                elsif input =~ autoindent_stack.last
         | 
| 89 | 
            -
                  if $1 | 
| 90 | 
            -
                     | 
| 91 | 
            -
             | 
| 92 | 
            -
             | 
| 93 | 
            -
                    handle_last_line(input, current_autoindent(autoindent_stack.size-1))
         | 
| 106 | 
            +
                  if $1     # e.g. end, }, etc
         | 
| 107 | 
            +
                    [:left_end]
         | 
| 108 | 
            +
                  else      # e.g. elsif, rescue, etc
         | 
| 109 | 
            +
                    [:left_tmp]
         | 
| 94 110 | 
             
                  end
         | 
| 111 | 
            +
                else
         | 
| 112 | 
            +
                  [:stay]
         | 
| 113 | 
            +
                end
         | 
| 114 | 
            +
              end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
              def handle_autoindent input, indent, err
         | 
| 117 | 
            +
                case indent.first
         | 
| 118 | 
            +
                when :right    # we need to go deeper
         | 
| 119 | 
            +
                  if multiline?(err)
         | 
| 120 | 
            +
                    if err.message =~ /unterminated \w+ meets end of file/
         | 
| 121 | 
            +
                      # skip if we're in the middle of a string or regexp
         | 
| 122 | 
            +
                    else
         | 
| 123 | 
            +
                      # indent.last is the way (input regexp matches) to go back
         | 
| 124 | 
            +
                      autoindent_stack << indent.last
         | 
| 125 | 
            +
                    end
         | 
| 126 | 
            +
                  end
         | 
| 127 | 
            +
             | 
| 128 | 
            +
                when :left_end # we need to go back
         | 
| 129 | 
            +
                  # could happen in either multiline or not
         | 
| 130 | 
            +
                  autoindent_stack.pop
         | 
| 131 | 
            +
             | 
| 132 | 
            +
                when :left_tmp # temporarily go back
         | 
| 133 | 
            +
                  handle_last_line(input) if multiline?(err)
         | 
| 95 134 | 
             
                end
         | 
| 96 135 | 
             
              end
         | 
| 97 136 |  | 
| 98 | 
            -
              def handle_last_line input, | 
| 137 | 
            +
              def handle_last_line input,
         | 
| 138 | 
            +
                                   indent=current_autoindent(autoindent_stack.size-1)
         | 
| 99 139 | 
             
                new_input = "#{indent}#{input}"
         | 
| 100 140 | 
             
                puts("\e[1A\e[K#{prompt}#{new_input}")
         | 
| 101 141 | 
             
                new_input
         | 
    
        data/lib/rib/version.rb
    CHANGED
    
    
    
        data/rib.gemspec
    CHANGED
    
    | @@ -2,11 +2,11 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            Gem::Specification.new do |s|
         | 
| 4 4 | 
             
              s.name = %q{rib}
         | 
| 5 | 
            -
              s.version = "0.9. | 
| 5 | 
            +
              s.version = "0.9.2"
         | 
| 6 6 |  | 
| 7 7 | 
             
              s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
         | 
| 8 8 | 
             
              s.authors = [%q{Lin Jen-Shin (godfat)}]
         | 
| 9 | 
            -
              s.date = %q{2011-08- | 
| 9 | 
            +
              s.date = %q{2011-08-25}
         | 
| 10 10 | 
             
              s.description = %q{Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
         | 
| 11 11 |  | 
| 12 12 | 
             
            Rib is based on the design of [ripl][] and the work of [ripl-rc][], some of
         | 
    
        data/task/gemgem.rb
    CHANGED
    
    | @@ -160,7 +160,7 @@ task :test do | |
| 160 160 | 
             
              Bacon.extend(Bacon::TestUnitOutput)
         | 
| 161 161 | 
             
              Bacon.summary_on_exit
         | 
| 162 162 | 
             
              $LOAD_PATH.unshift('lib')
         | 
| 163 | 
            -
              Dir['test/**/test_*.rb'].each{ |file|  | 
| 163 | 
            +
              Dir['./test/**/test_*.rb'].each{ |file| require file[0..-4] }
         | 
| 164 164 | 
             
            end
         | 
| 165 165 |  | 
| 166 166 | 
             
            desc 'Run tests with shell'
         | 
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: rib
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0.9. | 
| 4 | 
            +
              version: 0.9.2
         | 
| 5 5 | 
             
              prerelease: 
         | 
| 6 6 | 
             
            platform: ruby
         | 
| 7 7 | 
             
            authors:
         | 
| @@ -9,11 +9,11 @@ authors: | |
| 9 9 | 
             
            autorequire: 
         | 
| 10 10 | 
             
            bindir: bin
         | 
| 11 11 | 
             
            cert_chain: []
         | 
| 12 | 
            -
            date: 2011-08- | 
| 12 | 
            +
            date: 2011-08-25 00:00:00.000000000Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: bond
         | 
| 16 | 
            -
              requirement: & | 
| 16 | 
            +
              requirement: &2157793060 !ruby/object:Gem::Requirement
         | 
| 17 17 | 
             
                none: false
         | 
| 18 18 | 
             
                requirements:
         | 
| 19 19 | 
             
                - - ! '>='
         | 
| @@ -21,10 +21,10 @@ dependencies: | |
| 21 21 | 
             
                    version: '0'
         | 
| 22 22 | 
             
              type: :development
         | 
| 23 23 | 
             
              prerelease: false
         | 
| 24 | 
            -
              version_requirements: * | 
| 24 | 
            +
              version_requirements: *2157793060
         | 
| 25 25 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 26 26 | 
             
              name: hirb
         | 
| 27 | 
            -
              requirement: & | 
| 27 | 
            +
              requirement: &2157792580 !ruby/object:Gem::Requirement
         | 
| 28 28 | 
             
                none: false
         | 
| 29 29 | 
             
                requirements:
         | 
| 30 30 | 
             
                - - ! '>='
         | 
| @@ -32,10 +32,10 @@ dependencies: | |
| 32 32 | 
             
                    version: '0'
         | 
| 33 33 | 
             
              type: :development
         | 
| 34 34 | 
             
              prerelease: false
         | 
| 35 | 
            -
              version_requirements: * | 
| 35 | 
            +
              version_requirements: *2157792580
         | 
| 36 36 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 37 37 | 
             
              name: readline_buffer
         | 
| 38 | 
            -
              requirement: & | 
| 38 | 
            +
              requirement: &2157792100 !ruby/object:Gem::Requirement
         | 
| 39 39 | 
             
                none: false
         | 
| 40 40 | 
             
                requirements:
         | 
| 41 41 | 
             
                - - ! '>='
         | 
| @@ -43,10 +43,10 @@ dependencies: | |
| 43 43 | 
             
                    version: '0'
         | 
| 44 44 | 
             
              type: :development
         | 
| 45 45 | 
             
              prerelease: false
         | 
| 46 | 
            -
              version_requirements: * | 
| 46 | 
            +
              version_requirements: *2157792100
         | 
| 47 47 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 48 48 | 
             
              name: bacon
         | 
| 49 | 
            -
              requirement: & | 
| 49 | 
            +
              requirement: &2157791620 !ruby/object:Gem::Requirement
         | 
| 50 50 | 
             
                none: false
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - ! '>='
         | 
| @@ -54,10 +54,10 @@ dependencies: | |
| 54 54 | 
             
                    version: '0'
         | 
| 55 55 | 
             
              type: :development
         | 
| 56 56 | 
             
              prerelease: false
         | 
| 57 | 
            -
              version_requirements: * | 
| 57 | 
            +
              version_requirements: *2157791620
         | 
| 58 58 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 59 59 | 
             
              name: rr
         | 
| 60 | 
            -
              requirement: & | 
| 60 | 
            +
              requirement: &2157791140 !ruby/object:Gem::Requirement
         | 
| 61 61 | 
             
                none: false
         | 
| 62 62 | 
             
                requirements:
         | 
| 63 63 | 
             
                - - ! '>='
         | 
| @@ -65,10 +65,10 @@ dependencies: | |
| 65 65 | 
             
                    version: '0'
         | 
| 66 66 | 
             
              type: :development
         | 
| 67 67 | 
             
              prerelease: false
         | 
| 68 | 
            -
              version_requirements: * | 
| 68 | 
            +
              version_requirements: *2157791140
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 70 | 
             
              name: rake
         | 
| 71 | 
            -
              requirement: & | 
| 71 | 
            +
              requirement: &2157790660 !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                none: false
         | 
| 73 73 | 
             
                requirements:
         | 
| 74 74 | 
             
                - - ! '>='
         | 
| @@ -76,7 +76,7 @@ dependencies: | |
| 76 76 | 
             
                    version: '0'
         | 
| 77 77 | 
             
              type: :development
         | 
| 78 78 | 
             
              prerelease: false
         | 
| 79 | 
            -
              version_requirements: * | 
| 79 | 
            +
              version_requirements: *2157790660
         | 
| 80 80 | 
             
            description: ! 'Ruby-Interactive-ruBy -- Yet another interactive Ruby shell
         | 
| 81 81 |  | 
| 82 82 |  |