chitin 1.0.2 → 1.0.3
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/ANNOUNCEMENT +8 -0
- data/README +1 -9
- data/lib/chitin/commands/builtins.rb +4 -0
- data/lib/chitin/commands/ruby.rb +0 -1
- data/lib/chitin/commands/runnable.rb +32 -2
- data/lib/chitin/core_ext/coolline.rb +19 -13
- data/lib/chitin/file.rb +4 -8
- data/lib/chitin/sandbox.rb +7 -1
- data/lib/chitin/session.rb +7 -0
- data/lib/chitin/version.rb +1 -1
- metadata +2 -2
    
        data/ANNOUNCEMENT
    CHANGED
    
    | @@ -9,9 +9,13 @@ Hai everybahdy | |
| 9 9 |  | 
| 10 10 | 
             
            == So what IS Chitin?
         | 
| 11 11 |  | 
| 12 | 
            +
            Everything you type has to be valid Ruby.
         | 
| 13 | 
            +
             | 
| 12 14 | 
             
            * Chitin is a Ruby interpreter
         | 
| 13 15 | 
             
            * Turned into a shell.
         | 
| 14 16 |  | 
| 17 | 
            +
            Everything you type has to be valid Ruby.
         | 
| 18 | 
            +
             | 
| 15 19 | 
             
            I hope you all get the joke. I made it myself. The joke and the shell.
         | 
| 16 20 |  | 
| 17 21 | 
             
            Everything you type is Ruby -- remember that. So let's look at it in action.
         | 
| @@ -42,6 +46,10 @@ even need closing quotes if they're the final character in a line: | |
| 42 46 | 
             
              % ll | split("\n").map {|l| l.size }
         | 
| 43 47 | 
             
               => [9, 57, 51, 49, 48, 61, 59, 53, 48, 55]
         | 
| 44 48 |  | 
| 49 | 
            +
            Everything you type has to be valid Ruby. I am repeating this because in
         | 
| 50 | 
            +
            test cases, this is the one thing that everybody forgot. You can use the
         | 
| 51 | 
            +
            text preprocessor to change this, of course, but it's up to you.
         | 
| 52 | 
            +
             | 
| 45 53 | 
             
            == Why use it?
         | 
| 46 54 |  | 
| 47 55 | 
             
            Because it's written in Ruby and supadupes easy to modify. Also:
         | 
    
        data/README
    CHANGED
    
    | @@ -399,16 +399,8 @@ Did you know? | |
| 399 399 |  | 
| 400 400 | 
             
              * A FULL RUBY INTERPRETER!
         | 
| 401 401 | 
             
              * Tab completion that respects spaces in strings!
         | 
| 402 | 
            -
              *  | 
| 402 | 
            +
              * Bash's ESC-. to place the last argument!
         | 
| 403 403 | 
             
              * Syntax highlighting as you type!
         | 
| 404 404 | 
             
              * ^q quotes the word just behind your cursor
         | 
| 405 405 | 
             
              * I think this train might ACTUALLY get to Chicago on time!
         | 
| 406 406 |  | 
| 407 | 
            -
            == Bugs
         | 
| 408 | 
            -
             | 
| 409 | 
            -
            Coolline deletes and reprints the line with every character you type. This is
         | 
| 410 | 
            -
            great! We like this because it means we get syntax highlighting as we type.
         | 
| 411 | 
            -
            We don't like this, however, because it means that if a program prints output
         | 
| 412 | 
            -
            without a trailing newline, the last line of the output will be cut off by
         | 
| 413 | 
            -
            chitin as soon as you start typing :(
         | 
| 414 | 
            -
             | 
| @@ -50,6 +50,10 @@ module Chitin | |
| 50 50 | 
             
                  StringMethod.new :bottle, &block
         | 
| 51 51 | 
             
                end
         | 
| 52 52 |  | 
| 53 | 
            +
                # ruby's backtick doesn't chomp off the newline, which makes it more
         | 
| 54 | 
            +
                # or less useless for piping into other commands
         | 
| 55 | 
            +
                def `(args); super(args).chomp; end
         | 
| 56 | 
            +
             | 
| 53 57 | 
             
                # Place the last argument on the line
         | 
| 54 58 | 
             
                # This is a total hack. It would need proper parsing to accomodate for
         | 
| 55 59 | 
             
                # strings with spaces in them.
         | 
    
        data/lib/chitin/commands/ruby.rb
    CHANGED
    
    
| @@ -1,12 +1,27 @@ | |
| 1 1 | 
             
            module Chitin
         | 
| 2 2 | 
             
              module Runnable
         | 
| 3 3 |  | 
| 4 | 
            +
                def <(io)
         | 
| 5 | 
            +
                  case io
         | 
| 6 | 
            +
                  when IO, File
         | 
| 7 | 
            +
                    self[:set_in, io]
         | 
| 8 | 
            +
                  when String, FileObject
         | 
| 9 | 
            +
                    f = File.open io.to_s, 'r'
         | 
| 10 | 
            +
                    self[:set_in, f]
         | 
| 11 | 
            +
                    f.close
         | 
| 12 | 
            +
                  else
         | 
| 13 | 
            +
                    raise "Unknown piping type: #{io.class}"
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
              
         | 
| 16 | 
            +
                  self
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
             | 
| 4 19 | 
             
                def >(io)
         | 
| 5 20 | 
             
                  case io
         | 
| 6 21 | 
             
                  when IO, File
         | 
| 7 22 | 
             
                    self[:set_out, io]
         | 
| 8 23 | 
             
                  when String, FileObject
         | 
| 9 | 
            -
                    f = File.open io, 'w'
         | 
| 24 | 
            +
                    f = File.open io.to_s, 'w'
         | 
| 10 25 | 
             
                    self[:set_out, f]
         | 
| 11 26 | 
             
                    f.close
         | 
| 12 27 | 
             
                  else
         | 
| @@ -17,11 +32,26 @@ module Chitin | |
| 17 32 | 
             
                end
         | 
| 18 33 |  | 
| 19 34 | 
             
                def >>(io)
         | 
| 35 | 
            +
                  case io
         | 
| 36 | 
            +
                  when IO, File
         | 
| 37 | 
            +
                    self[:set_out, io]
         | 
| 38 | 
            +
                  when String, FileObject
         | 
| 39 | 
            +
                    f = File.open io.to_s, 'a'
         | 
| 40 | 
            +
                    self[:set_out, f]
         | 
| 41 | 
            +
                    f.close
         | 
| 42 | 
            +
                  else
         | 
| 43 | 
            +
                    raise "Unknown piping type: #{io.class}"
         | 
| 44 | 
            +
                  end
         | 
| 45 | 
            +
              
         | 
| 46 | 
            +
                  self
         | 
| 47 | 
            +
                end
         | 
| 48 | 
            +
             | 
| 49 | 
            +
                def ^(io)
         | 
| 20 50 | 
             
                  case io
         | 
| 21 51 | 
             
                  when IO, File
         | 
| 22 52 | 
             
                    self[:set_err, io]
         | 
| 23 53 | 
             
                  when String, FileObject
         | 
| 24 | 
            -
                    f = File.open io, 'w'
         | 
| 54 | 
            +
                    f = File.open io.to_s, 'w'
         | 
| 25 55 | 
             
                    self[:set_err, f]
         | 
| 26 56 | 
             
                    f.close
         | 
| 27 57 | 
             
                  else
         | 
| @@ -46,17 +46,24 @@ class Coolline | |
| 46 46 | 
             
                end
         | 
| 47 47 | 
             
              end
         | 
| 48 48 |  | 
| 49 | 
            -
              #  | 
| 50 | 
            -
              #  | 
| 51 | 
            -
              #  | 
| 52 | 
            -
               | 
| 53 | 
            -
             | 
| 54 | 
            -
               | 
| 55 | 
            -
             | 
| 56 | 
            -
              #
         | 
| 57 | 
            -
              #  | 
| 58 | 
            -
              #  | 
| 59 | 
            -
              #  | 
| 49 | 
            +
              # In tests, this reads the first character of buffered input.
         | 
| 50 | 
            +
              # In practice, this does not do anything differently than `@input.getch`
         | 
| 51 | 
            +
              # C'est la vie.
         | 
| 52 | 
            +
              def read_char
         | 
| 53 | 
            +
                @input.raw { @input.getc }
         | 
| 54 | 
            +
              end
         | 
| 55 | 
            +
             | 
| 56 | 
            +
              # This is here because the line:
         | 
| 57 | 
            +
              #   until (char = @input.getch) == "\r"
         | 
| 58 | 
            +
              # was replaced with:
         | 
| 59 | 
            +
              #   until (char = read_char) == "\r"
         | 
| 60 | 
            +
              # because I'm trying and failing to fix it so that Coolline
         | 
| 61 | 
            +
              # will read buffered characters from STDIN. For example:
         | 
| 62 | 
            +
              #   def test; sleep 2; STDIN.getch; end
         | 
| 63 | 
            +
              # if you run that and type a bunch of characters, it will only
         | 
| 64 | 
            +
              # return the first character you typed AFTER STDIN.getch got a chance
         | 
| 65 | 
            +
              # to run. Ideally, with `read_char` it will read the first character that
         | 
| 66 | 
            +
              # you typed regardless.
         | 
| 60 67 | 
             
              def readline(prompt = ">> ")
         | 
| 61 68 | 
             
                @prompt = prompt
         | 
| 62 69 |  | 
| @@ -76,7 +83,7 @@ class Coolline | |
| 76 83 | 
             
                @history.index = @history.size - 1
         | 
| 77 84 | 
             
                @history << @line
         | 
| 78 85 |  | 
| 79 | 
            -
                until (char =  | 
| 86 | 
            +
                until (char = read_char) == "\r"
         | 
| 80 87 | 
             
                  @menu.erase
         | 
| 81 88 |  | 
| 82 89 | 
             
                  handle(char)
         | 
| @@ -98,7 +105,6 @@ class Coolline | |
| 98 105 |  | 
| 99 106 | 
             
                @history.save_line
         | 
| 100 107 |  | 
| 101 | 
            -
                @menu.erase
         | 
| 102 108 | 
             
                @line
         | 
| 103 109 | 
             
              end
         | 
| 104 110 | 
             
            end
         | 
    
        data/lib/chitin/file.rb
    CHANGED
    
    | @@ -57,6 +57,10 @@ module Chitin | |
| 57 57 | 
             
                def to_s
         | 
| 58 58 | 
             
                  path
         | 
| 59 59 | 
             
                end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                def symlink?
         | 
| 62 | 
            +
                  false
         | 
| 63 | 
            +
                end
         | 
| 60 64 | 
             
              end
         | 
| 61 65 |  | 
| 62 66 | 
             
              class FileObject < FSObject
         | 
| @@ -89,10 +93,6 @@ module Chitin | |
| 89 93 | 
             
                def inspect
         | 
| 90 94 | 
             
                  "#<Chitin::FileObject #{path.inspect}>"
         | 
| 91 95 | 
             
                end
         | 
| 92 | 
            -
             | 
| 93 | 
            -
                def symlink?
         | 
| 94 | 
            -
                  false
         | 
| 95 | 
            -
                end
         | 
| 96 96 | 
             
              end
         | 
| 97 97 |  | 
| 98 98 | 
             
              class Symlink < FileObject
         | 
| @@ -132,10 +132,6 @@ module Chitin | |
| 132 132 | 
             
                def inspect
         | 
| 133 133 | 
             
                  "#<Chitin::Directory #{path.inspect}>"
         | 
| 134 134 | 
             
                end
         | 
| 135 | 
            -
             | 
| 136 | 
            -
                def symlink?
         | 
| 137 | 
            -
                  false
         | 
| 138 | 
            -
                end
         | 
| 139 135 | 
             
              end
         | 
| 140 136 | 
             
            end
         | 
| 141 137 |  | 
    
        data/lib/chitin/sandbox.rb
    CHANGED
    
    | @@ -1,5 +1,7 @@ | |
| 1 1 | 
             
            module Chitin
         | 
| 2 2 | 
             
              class Sandbox
         | 
| 3 | 
            +
                attr_reader :previous
         | 
| 4 | 
            +
             | 
| 3 5 | 
             
                def initialize
         | 
| 4 6 | 
             
                  @binding = binding
         | 
| 5 7 | 
             
                  @previous = nil
         | 
| @@ -10,7 +12,11 @@ module Chitin | |
| 10 12 | 
             
                end
         | 
| 11 13 |  | 
| 12 14 | 
             
                def evaluate(code)
         | 
| 13 | 
            -
                   | 
| 15 | 
            +
                  self.previous = eval code, @binding
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
             | 
| 18 | 
            +
                def previous=(val)
         | 
| 19 | 
            +
                  @previous = val
         | 
| 14 20 | 
             
                  eval "_ = @previous", @binding
         | 
| 15 21 | 
             
                end
         | 
| 16 22 | 
             
              end
         | 
    
        data/lib/chitin/session.rb
    CHANGED
    
    | @@ -160,6 +160,13 @@ module Chitin | |
| 160 160 | 
             
                    else
         | 
| 161 161 | 
             
                      val = res
         | 
| 162 162 | 
             
                    end
         | 
| 163 | 
            +
             | 
| 164 | 
            +
                    # if the input is ruby, then this is redundant
         | 
| 165 | 
            +
                    # if the input is a pipe that returns ruby,
         | 
| 166 | 
            +
                    # then this is needed because while the expression
         | 
| 167 | 
            +
                    # returns a pipe, when we run it it returns a ruby
         | 
| 168 | 
            +
                    # value. we want to remember the ruby value.
         | 
| 169 | 
            +
                    @sandbox.previous = val
         | 
| 163 170 |  | 
| 164 171 | 
             
                    txt = @config.post_processing[:color].call val.inspect
         | 
| 165 172 | 
             
                    puts " => #{txt}"
         | 
    
        data/lib/chitin/version.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: chitin
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1.0. | 
| 4 | 
            +
              version: 1.0.3
         | 
| 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: 2012-12- | 
| 12 | 
            +
            date: 2012-12-08 00:00:00.000000000 Z
         | 
| 13 13 | 
             
            dependencies:
         | 
| 14 14 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 15 15 | 
             
              name: wirble
         |