iruby 0.5.0 → 0.7.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.
- checksums.yaml +4 -4
 - data/.github/workflows/ubuntu.yml +9 -2
 - data/CHANGES.md +226 -0
 - data/README.md +17 -2
 - data/iruby.gemspec +1 -1
 - data/lib/iruby.rb +4 -0
 - data/lib/iruby/backend.rb +32 -7
 - data/lib/iruby/command.rb +2 -6
 - data/lib/iruby/display.rb +178 -59
 - data/lib/iruby/event_manager.rb +40 -0
 - data/lib/iruby/kernel.rb +139 -16
 - data/lib/iruby/ostream.rb +5 -0
 - data/lib/iruby/session.rb +1 -0
 - data/lib/iruby/session_adapter.rb +6 -0
 - data/lib/iruby/session_adapter/test_adapter.rb +49 -0
 - data/lib/iruby/utils.rb +12 -1
 - data/lib/iruby/version.rb +1 -1
 - data/test/helper.rb +46 -0
 - data/test/iruby/backend_test.rb +12 -0
 - data/test/iruby/display_test.rb +188 -0
 - data/test/iruby/event_manager_test.rb +92 -0
 - data/test/iruby/kernel_test.rb +185 -0
 - data/test/iruby/mime_test.rb +25 -7
 - data/test/iruby/multi_logger_test.rb +0 -3
 - data/test/iruby/session_test.rb +1 -0
 - data/test/iruby/utils_test.rb +25 -0
 - data/test/run-test.rb +1 -0
 - metadata +22 -12
 - data/CHANGES +0 -167
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA256:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: 97c4aaa733ee27b0adb838ebed8d38cd67f857ef2466aa055105943df8647845
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: be54a5310326f5e052f07a2bb0625acb823618ab9b0a85dc0dedae01a86ebbc9
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 19cb3579f143fa0b720bb1fddc1e50b17b910ba2484bd794e9d382e6b3d029675d8bda801f77b19a26afae69a9038f9779a8f50a93d4ae51dadfde53dd3168f0
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 2f1adf37fb436345d110c87352bad3725ffba0068740c13e16bcd3f4be7132a9a8968bcecda43c257613d4ccd08ab7592c9bae27d60501ac393c54a0f86519cd
         
     | 
| 
         @@ -1,8 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            name: CI
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            on:
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
             
     | 
| 
      
 4 
     | 
    
         
            +
              push:
         
     | 
| 
      
 5 
     | 
    
         
            +
                branches:
         
     | 
| 
      
 6 
     | 
    
         
            +
                - master
         
     | 
| 
      
 7 
     | 
    
         
            +
              pull_request:
         
     | 
| 
      
 8 
     | 
    
         
            +
                types:
         
     | 
| 
      
 9 
     | 
    
         
            +
                - opened
         
     | 
| 
      
 10 
     | 
    
         
            +
                - synchronize
         
     | 
| 
      
 11 
     | 
    
         
            +
                - reopened
         
     | 
| 
       6 
12 
     | 
    
         | 
| 
       7 
13 
     | 
    
         
             
            jobs:
         
     | 
| 
       8 
14 
     | 
    
         
             
              test:
         
     | 
| 
         @@ -35,6 +41,7 @@ jobs: 
     | 
|
| 
       35 
41 
     | 
    
         | 
| 
       36 
42 
     | 
    
         
             
                - name: Install requirements on ubuntu
         
     | 
| 
       37 
43 
     | 
    
         
             
                  run: |
         
     | 
| 
      
 44 
     | 
    
         
            +
                    sudo apt update
         
     | 
| 
       38 
45 
     | 
    
         
             
                    sudo apt install -y --no-install-recommends \
         
     | 
| 
       39 
46 
     | 
    
         
             
                             libczmq-dev \
         
     | 
| 
       40 
47 
     | 
    
         
             
                             python3 \
         
     | 
    
        data/CHANGES.md
    ADDED
    
    | 
         @@ -0,0 +1,226 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            # 0.7.2 (2021-06-23)
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            ## Bug Fixes
         
     | 
| 
      
 4 
     | 
    
         
            +
             
     | 
| 
      
 5 
     | 
    
         
            +
            * Fix IRuby.table for Ruby >= 2.7 https://github.com/SciRuby/iruby/pull/305 (@topofocus)
         
     | 
| 
      
 6 
     | 
    
         
            +
            * Fix PlainBackend to include modules https://github.com/SciRuby/iruby/issues/303 (@UliKuch, @mrkn)
         
     | 
| 
      
 7 
     | 
    
         
            +
             
     | 
| 
      
 8 
     | 
    
         
            +
            # 0.7.1 (2021-06-21)
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
            ## Enhancements
         
     | 
| 
      
 11 
     | 
    
         
            +
             
     | 
| 
      
 12 
     | 
    
         
            +
            * Add support of `to_iruby_mimebundle` format method https://github.com/SciRuby/iruby/pull/304 (@mrkn)
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
            ## Bug Fixes
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
            * Prevent unintentional display the result of Session#send (@mrkn)
         
     | 
| 
      
 17 
     | 
    
         
            +
            * Update display formatter for Gruff::Base to prevent warning (@mrkn)
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
            # 0.7.0 (2021-05-28)
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
            ## Enhancements
         
     | 
| 
      
 22 
     | 
    
         
            +
             
     | 
| 
      
 23 
     | 
    
         
            +
            * The default backend is changed to IRB (@mrkn)
         
     | 
| 
      
 24 
     | 
    
         
            +
            * Add IRuby::Kernel#switch_backend! method (@mrkn)
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            ## Bug Fixes
         
     | 
| 
      
 27 
     | 
    
         
            +
             
     | 
| 
      
 28 
     | 
    
         
            +
            * Fix the handling of image/svg+xml https://github.com/SciRuby/iruby/pull/300, https://github.com/SciRuby/iruby/pull/301 (@kojix2)
         
     | 
| 
      
 29 
     | 
    
         
            +
             
     | 
| 
      
 30 
     | 
    
         
            +
            # 0.6.1 (2021-05-26)
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
            ## Bug Fixes
         
     | 
| 
      
 33 
     | 
    
         
            +
             
     | 
| 
      
 34 
     | 
    
         
            +
            * Follow the messages and hooks orders during execute_request processing (@mrkn)
         
     | 
| 
      
 35 
     | 
    
         
            +
             
     | 
| 
      
 36 
     | 
    
         
            +
            # 0.6.0 (2021-05-25)
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
            ## Bug Fixes
         
     | 
| 
      
 39 
     | 
    
         
            +
             
     | 
| 
      
 40 
     | 
    
         
            +
            * Fix the handling of application/javascript https://github.com/SciRuby/iruby/issues/292, https://github.com/SciRuby/iruby/pull/294 (@kylekyle, @mrkn)
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            ## Enhancements
         
     | 
| 
      
 43 
     | 
    
         
            +
             
     | 
| 
      
 44 
     | 
    
         
            +
            * Add the `initialized` event in `IRuby::Kernel` class https://github.com/SciRuby/iruby/pull/168, https://github.com/SciRuby/iruby/pull/296 (@Yuki-Inoue, @mrkn)
         
     | 
| 
      
 45 
     | 
    
         
            +
            * Add the following four events https://github.com/SciRuby/iruby/pull/295 (@mrkn):
         
     | 
| 
      
 46 
     | 
    
         
            +
              * `pre-execute` -- occurs before every code execution
         
     | 
| 
      
 47 
     | 
    
         
            +
              * `pre-run-cell` -- occurs before every non-silent code execution
         
     | 
| 
      
 48 
     | 
    
         
            +
              * `post-execute` -- occurs after every code execution
         
     | 
| 
      
 49 
     | 
    
         
            +
              * `post-run-cell` -- occurs after every non-silent code execution
         
     | 
| 
      
 50 
     | 
    
         
            +
            * Replace Bond with IRB in PlainBackend https://github.com/SciRuby/iruby/pull/276, https://github.com/SciRuby/iruby/pull/297 (@cfis, @mrkn)
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
            # 0.5.0 (2021-03-25)
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
            ## Bug Fixes
         
     | 
| 
      
 55 
     | 
    
         
            +
             
     | 
| 
      
 56 
     | 
    
         
            +
            * Fix Jupyter console crashes issue https://github.com/SciRuby/iruby/pull/210 (@kojix2)
         
     | 
| 
      
 57 
     | 
    
         
            +
            * Fix syntax highlighting issue on Jpyter Lab https://github.com/SciRuby/iruby/issues/224 (@kojix2)
         
     | 
| 
      
 58 
     | 
    
         
            +
            * Fix interoperability issue with ruby-git https://github.com/SciRuby/iruby/pull/139 (@habemus-papadum)
         
     | 
| 
      
 59 
     | 
    
         
            +
            * Fix the issue of `$stderr.write` that cannot handle multiple arguments https://github.com/SciRuby/iruby/issues/206 (@kojix2)
         
     | 
| 
      
 60 
     | 
    
         
            +
            * Remove a buggy `inspect_request` implementation https://github.com/SciRuby/iruby/pull/119 (@LunarLanding)
         
     | 
| 
      
 61 
     | 
    
         
            +
            * Fix uninitialized constant `Fiddle` caused in initialization phase https://github.com/SciRuby/iruby/issues/264 (@MatthewSteen, @kjoix2)
         
     | 
| 
      
 62 
     | 
    
         
            +
            * Fix the issue on displaying a table https://github.com/SciRuby/iruby/pull/281 (@ankane)
         
     | 
| 
      
 63 
     | 
    
         
            +
             
     | 
| 
      
 64 
     | 
    
         
            +
            ## Enhancements
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            * Add `IRuby.clear_output` method https://github.com/SciRuby/iruby/pull/220 (@kojix2)
         
     | 
| 
      
 67 
     | 
    
         
            +
            * Make backtrace on exception simplify and more appropriate for code in a cell https://github.com/SciRuby/iruby/pull/249 (@zheng-yongping)
         
     | 
| 
      
 68 
     | 
    
         
            +
            * Make syntax error message more appropriate https://github.com/SciRuby/iruby/pull/251 (@zheng-yongping)
         
     | 
| 
      
 69 
     | 
    
         
            +
            * Remove top-level `In` and `Out` constants https://github.com/SciRuby/iruby/pull/229 (@kojix2)
         
     | 
| 
      
 70 
     | 
    
         
            +
            * Use text/plain for the default format of `Numo::NArray` objects https://github.com/SciRuby/iruby/pull/255 (@kojix2)
         
     | 
| 
      
 71 
     | 
    
         
            +
            * Use ffi-rzmq as the default ZeroMQ adapter https://github.com/SciRuby/iruby/pull/256 (@kojix2)
         
     | 
| 
      
 72 
     | 
    
         
            +
            * Drop rbczmq support https://github.com/SciRuby/iruby/pull/260 (@rstammer)
         
     | 
| 
      
 73 
     | 
    
         
            +
            * Add ruby-vips image support https://github.com/SciRuby/iruby/pull/279 (@ankane)
         
     | 
| 
      
 74 
     | 
    
         
            +
            * Replace mimemagic with mime-types https://github.com/SciRuby/iruby/pull/291 (@mrkn)
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
            # 0.4.0 (2019-07-31)
         
     | 
| 
      
 77 
     | 
    
         
            +
             
     | 
| 
      
 78 
     | 
    
         
            +
            (TBD)
         
     | 
| 
      
 79 
     | 
    
         
            +
             
     | 
| 
      
 80 
     | 
    
         
            +
            # 0.3 (2017-03-26)
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            ## Bug Fixes
         
     | 
| 
      
 83 
     | 
    
         
            +
             
     | 
| 
      
 84 
     | 
    
         
            +
            * Disable Jupyter keyboard manager for all popups made using IRuby.popup (@kylekyle).
         
     | 
| 
      
 85 
     | 
    
         
            +
            * Fix Iruby/Input date values bug that set date fields to whatever the last date value was (@kylekyle).
         
     | 
| 
      
 86 
     | 
    
         
            +
            * Fix a bug where time strings put into prompter would give an 'out of range' error (@kylekyle).
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            ## Enhancements
         
     | 
| 
      
 89 
     | 
    
         
            +
             
     | 
| 
      
 90 
     | 
    
         
            +
            * Improvements to IRuby dependency detection using `Bundler::Dependencies#specs` (@kou).
         
     | 
| 
      
 91 
     | 
    
         
            +
            * Use less memory forcing pry to store only the last 3 commands in memory (@kylekyle).
         
     | 
| 
      
 92 
     | 
    
         
            +
            * Use bigger z-index that is used accross all browsers (@kylekyle).
         
     | 
| 
      
 93 
     | 
    
         
            +
            * Ability to input date values as DateTime objects in IRuby/Input (@kylekyle).
         
     | 
| 
      
 94 
     | 
    
         
            +
            * Add option to have check boxes checked by default (@kylekyle).
         
     | 
| 
      
 95 
     | 
    
         
            +
            * Option for multi-select in drop down menus in the prompter (@kylekyle).
         
     | 
| 
      
 96 
     | 
    
         
            +
            * Add support for multiple widgets using `IRuby::Input::Multiple` (@kylekyle).
         
     | 
| 
      
 97 
     | 
    
         
            +
            * Calender icon for date selector icon (@kylekyle).
         
     | 
| 
      
 98 
     | 
    
         
            +
            * Add support for Numo/NArray (@zalt50).
         
     | 
| 
      
 99 
     | 
    
         
            +
            * Text now only completes after a space (@zalt50).
         
     | 
| 
      
 100 
     | 
    
         
            +
            * Remove the DONTWAIT flag when receiving a message (@cloud-oak).
         
     | 
| 
      
 101 
     | 
    
         
            +
            * Add support for CZTop (@kou).
         
     | 
| 
      
 102 
     | 
    
         
            +
             
     | 
| 
      
 103 
     | 
    
         
            +
            # 0.2.9 (2016-05-02)
         
     | 
| 
      
 104 
     | 
    
         
            +
              
         
     | 
| 
      
 105 
     | 
    
         
            +
            ## Bug Fixes
         
     | 
| 
      
 106 
     | 
    
         
            +
             
     | 
| 
      
 107 
     | 
    
         
            +
            * Fix an error where a NoMethodError was being raised where a table rendered using an Array of Hashes has more than `maxcols` columns. (@CGamesPlay)
         
     | 
| 
      
 108 
     | 
    
         
            +
            * Patch PryBackend to throw unterminated string and unexpected end-of-file syntax errors (@kylekyle)
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            ## Enhnacements
         
     | 
| 
      
 111 
     | 
    
         
            +
             
     | 
| 
      
 112 
     | 
    
         
            +
            * Add an IRuby::Input class which provides widgets for getting inputs from users. (@kylekyle)
         
     | 
| 
      
 113 
     | 
    
         
            +
            * Add data_uri dependency (@kylekyle)
         
     | 
| 
      
 114 
     | 
    
         
            +
            * Added a clear_output display function (@mrkn)
         
     | 
| 
      
 115 
     | 
    
         
            +
            * Doc fixes for installation (@kozo2, @generall)
         
     | 
| 
      
 116 
     | 
    
         
            +
             
     | 
| 
      
 117 
     | 
    
         
            +
            # 0.2.8 (2015-12-06)
         
     | 
| 
      
 118 
     | 
    
         
            +
             
     | 
| 
      
 119 
     | 
    
         
            +
            * Add compatibility with ffi-rzmq
         
     | 
| 
      
 120 
     | 
    
         
            +
            * Windows support
         
     | 
| 
      
 121 
     | 
    
         
            +
             
     | 
| 
      
 122 
     | 
    
         
            +
            # 0.2.7 (2015-07-02)
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
            * Fix problem with autoloaded constants in Display, problem with sciruby gem
         
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
            # 0.2.6 (2015-06-21)
         
     | 
| 
      
 127 
     | 
    
         
            +
             
     | 
| 
      
 128 
     | 
    
         
            +
            * Check registered kernel and Gemfile to prevent gem loading problems
         
     | 
| 
      
 129 
     | 
    
         
            +
            * Support to_tex method for the rendering
         
     | 
| 
      
 130 
     | 
    
         
            +
             
     | 
| 
      
 131 
     | 
    
         
            +
            # 0.2.5 (2015-06-07)
         
     | 
| 
      
 132 
     | 
    
         
            +
             
     | 
| 
      
 133 
     | 
    
         
            +
            * Fix #29, empty signatures
         
     | 
| 
      
 134 
     | 
    
         
            +
            * Move iruby utils to IRuby::Utils module
         
     | 
| 
      
 135 
     | 
    
         
            +
            * Add IRuby.tex alias for IRuby.latex
         
     | 
| 
      
 136 
     | 
    
         
            +
            * Remove example notebooks from gem
         
     | 
| 
      
 137 
     | 
    
         
            +
             
     | 
| 
      
 138 
     | 
    
         
            +
            # 0.2.4 (2015-06-02)
         
     | 
| 
      
 139 
     | 
    
         
            +
             
     | 
| 
      
 140 
     | 
    
         
            +
            * Better exception handling
         
     | 
| 
      
 141 
     | 
    
         
            +
            * Fix ctrl-C issue #17
         
     | 
| 
      
 142 
     | 
    
         
            +
            * Fix timeout issue #19
         
     | 
| 
      
 143 
     | 
    
         
            +
             
     | 
| 
      
 144 
     | 
    
         
            +
            # 0.2.3 (2015-05-31)
         
     | 
| 
      
 145 
     | 
    
         
            +
             
     | 
| 
      
 146 
     | 
    
         
            +
            * Fix notebook indentation
         
     | 
| 
      
 147 
     | 
    
         
            +
            * Fix tab completion for multiple lines
         
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            # 0.2.2 (2015-05-26)
         
     | 
| 
      
 150 
     | 
    
         
            +
             
     | 
| 
      
 151 
     | 
    
         
            +
            * Support history variables In, Out, _, _i etc
         
     | 
| 
      
 152 
     | 
    
         
            +
            * Internal refactoring and minor bugfixes
         
     | 
| 
      
 153 
     | 
    
         
            +
             
     | 
| 
      
 154 
     | 
    
         
            +
            # 0.2.1 (2015-05-26)
         
     | 
| 
      
 155 
     | 
    
         
            +
             
     | 
| 
      
 156 
     | 
    
         
            +
            * Copy Ruby logo to kernel specification
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
            # 0.2.0 (2015-05-25)
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
            * Dropped IPython2 support
         
     | 
| 
      
 161 
     | 
    
         
            +
            * Dropped Ruby < 2.0.0 support
         
     | 
| 
      
 162 
     | 
    
         
            +
            * Supports and requires now IPython3/Jupyter
         
     | 
| 
      
 163 
     | 
    
         
            +
            * Switch from ffi-rzmq to rbczmq
         
     | 
| 
      
 164 
     | 
    
         
            +
            * Added IRuby::Conn (experimental, to be used by widgets)
         
     | 
| 
      
 165 
     | 
    
         
            +
            * iruby register/unregister commands to register IRuby kernel in Jupyter
         
     | 
| 
      
 166 
     | 
    
         
            +
             
     | 
| 
      
 167 
     | 
    
         
            +
            # 0.1.13 (2014-08-19)
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
            * Improved IRuby.table, supports :maxrows and :maxcols
         
     | 
| 
      
 170 
     | 
    
         
            +
            * IRuby#javascript workaround (https://github.com/ipython/ipython/issues/6259)
         
     | 
| 
      
 171 
     | 
    
         
            +
             
     | 
| 
      
 172 
     | 
    
         
            +
            # 0.1.12 (2014-08-01)
         
     | 
| 
      
 173 
     | 
    
         
            +
             
     | 
| 
      
 174 
     | 
    
         
            +
            * IRuby#table add option maxrows
         
     | 
| 
      
 175 
     | 
    
         
            +
            * powerful display system with format and datatype registry, see #25
         
     | 
| 
      
 176 
     | 
    
         
            +
            * Add IRuby#javascript
         
     | 
| 
      
 177 
     | 
    
         
            +
            * Add IRuby#svg
         
     | 
| 
      
 178 
     | 
    
         
            +
             
     | 
| 
      
 179 
     | 
    
         
            +
            # 0.1.11 (2014-07-08)
         
     | 
| 
      
 180 
     | 
    
         
            +
             
     | 
| 
      
 181 
     | 
    
         
            +
            * Push binding if pry binding stack is empty
         
     | 
| 
      
 182 
     | 
    
         
            +
             
     | 
| 
      
 183 
     | 
    
         
            +
            # 0.1.10 (2014-07-08)
         
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
            * Fix #19 (pp)
         
     | 
| 
      
 186 
     | 
    
         
            +
            * Handle exception when symlink cannot be created
         
     | 
| 
      
 187 
     | 
    
         
            +
            * Fix dependencies and Pry backend
         
     | 
| 
      
 188 
     | 
    
         
            +
             
     | 
| 
      
 189 
     | 
    
         
            +
            # 0.1.9 (2014-02-28)
         
     | 
| 
      
 190 
     | 
    
         
            +
             
     | 
| 
      
 191 
     | 
    
         
            +
            * Check IPython version
         
     | 
| 
      
 192 
     | 
    
         
            +
             
     | 
| 
      
 193 
     | 
    
         
            +
            # 0.1.7/0.1.8
         
     | 
| 
      
 194 
     | 
    
         
            +
             
     | 
| 
      
 195 
     | 
    
         
            +
            * Bugfixes #11, #12, #13
         
     | 
| 
      
 196 
     | 
    
         
            +
             
     | 
| 
      
 197 
     | 
    
         
            +
            # 0.1.6 (2013-10-11)
         
     | 
| 
      
 198 
     | 
    
         
            +
             
     | 
| 
      
 199 
     | 
    
         
            +
            * Print Matrix and GSL::Matrix as LaTeX
         
     | 
| 
      
 200 
     | 
    
         
            +
            * Add check for Pry version
         
     | 
| 
      
 201 
     | 
    
         
            +
             
     | 
| 
      
 202 
     | 
    
         
            +
            # 0.1.5 (2013-10-03)
         
     | 
| 
      
 203 
     | 
    
         
            +
             
     | 
| 
      
 204 
     | 
    
         
            +
            * Implement a rich display system
         
     | 
| 
      
 205 
     | 
    
         
            +
            * Fix error output
         
     | 
| 
      
 206 
     | 
    
         
            +
             
     | 
| 
      
 207 
     | 
    
         
            +
            # 0.1.4 (2013-10-03)
         
     | 
| 
      
 208 
     | 
    
         
            +
             
     | 
| 
      
 209 
     | 
    
         
            +
            * Extract display handler from kernel
         
     | 
| 
      
 210 
     | 
    
         
            +
            * Always return a text/plain response
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
            # 0.1.3 (2013-10-03)
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
            * Implement missing request handlers
         
     | 
| 
      
 215 
     | 
    
         
            +
            * Detect if Bundler is running and set kernel_cmd appropriately
         
     | 
| 
      
 216 
     | 
    
         
            +
            * Improve Pry integration
         
     | 
| 
      
 217 
     | 
    
         
            +
            * Add support for the gems gnuplot, gruff, rmagick and mini_magick
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
            # 0.1.2 (2013-10-02)
         
     | 
| 
      
 220 
     | 
    
         
            +
             
     | 
| 
      
 221 
     | 
    
         
            +
            * Support for Pry added
         
     | 
| 
      
 222 
     | 
    
         
            +
            * Launch `iruby console` if plain `iruby` is started
         
     | 
| 
      
 223 
     | 
    
         
            +
             
     | 
| 
      
 224 
     | 
    
         
            +
            # 0.1.0 (2013-10-02)
         
     | 
| 
      
 225 
     | 
    
         
            +
             
     | 
| 
      
 226 
     | 
    
         
            +
            * Cleanup and rewrite of some parts
         
     | 
    
        data/README.md
    CHANGED
    
    | 
         @@ -31,8 +31,8 @@ If both ffi-rzmq and cztop are installed, ffi-rzmq is used. If you prefer cztop, 
     | 
|
| 
       31 
31 
     | 
    
         
             
            export IRUBY_SESSION_ADAPTER="cztop"
         
     | 
| 
       32 
32 
     | 
    
         
             
            ```
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
            *  
     | 
| 
       35 
     | 
    
         
            -
            * If you want to install the  
     | 
| 
      
 34 
     | 
    
         
            +
            * [Pry][Pry], if you want to use [Pry][Pry] instead of IRB for the code execution backend
         
     | 
| 
      
 35 
     | 
    
         
            +
            * If you want to install the development version of IRuby from the source code, try [specific_install](https://github.com/rdp/specific_install).
         
     | 
| 
       36 
36 
     | 
    
         | 
| 
       37 
37 
     | 
    
         
             
            ```
         
     | 
| 
       38 
38 
     | 
    
         
             
            gem specific_install https://github.com/SciRuby/iruby
         
     | 
| 
         @@ -148,6 +148,19 @@ If you have already used IRuby with a different version, you need to generate a 
     | 
|
| 
       148 
148 
     | 
    
         
             
            $ iruby register --force
         
     | 
| 
       149 
149 
     | 
    
         
             
            ```
         
     | 
| 
       150 
150 
     | 
    
         | 
| 
      
 151 
     | 
    
         
            +
            ## Backends
         
     | 
| 
      
 152 
     | 
    
         
            +
             
     | 
| 
      
 153 
     | 
    
         
            +
            There are two backends: PlainBackend and PryBackend.
         
     | 
| 
      
 154 
     | 
    
         
            +
             
     | 
| 
      
 155 
     | 
    
         
            +
            * PlainBackend is the default backend.  It uses [IRB](https://github.com/ruby/irb).
         
     | 
| 
      
 156 
     | 
    
         
            +
            * PryBackend uses [Pry][Pry].
         
     | 
| 
      
 157 
     | 
    
         
            +
             
     | 
| 
      
 158 
     | 
    
         
            +
            You can switch the backend to PryBackend by running the code below.
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
            ```ruby
         
     | 
| 
      
 161 
     | 
    
         
            +
            IRuby::Kernel.instance.switch_backend!(:pry)
         
     | 
| 
      
 162 
     | 
    
         
            +
            ```
         
     | 
| 
      
 163 
     | 
    
         
            +
             
     | 
| 
       151 
164 
     | 
    
         
             
            ## Notebooks
         
     | 
| 
       152 
165 
     | 
    
         | 
| 
       153 
166 
     | 
    
         
             
            Take a look at the [example notebook](http://nbviewer.ipython.org/urls/raw.github.com/SciRuby/sciruby-notebooks/master/getting_started.ipynb)
         
     | 
| 
         @@ -167,3 +180,5 @@ In February 2021, [IRuby became the canonical repository](https://github.com/Sci 
     | 
|
| 
       167 
180 
     | 
    
         
             
            Copyright (c) IRuby contributors and the Ruby Science Foundation.
         
     | 
| 
       168 
181 
     | 
    
         | 
| 
       169 
182 
     | 
    
         
             
            Licensed under the [MIT](LICENSE) license.
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
            [Pry]: https://github.com/pry/pry
         
     | 
    
        data/iruby.gemspec
    CHANGED
    
    | 
         @@ -17,9 +17,9 @@ Gem::Specification.new do |s| 
     | 
|
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
              s.required_ruby_version = '>= 2.3.0'
         
     | 
| 
       19 
19 
     | 
    
         | 
| 
       20 
     | 
    
         
            -
              s.add_dependency 'bond', '~> 0.5'
         
     | 
| 
       21 
20 
     | 
    
         
             
              s.add_dependency 'data_uri', '~> 0.1'
         
     | 
| 
       22 
21 
     | 
    
         
             
              s.add_dependency 'ffi-rzmq'
         
     | 
| 
      
 22 
     | 
    
         
            +
              s.add_dependency 'irb'
         
     | 
| 
       23 
23 
     | 
    
         
             
              s.add_dependency 'mime-types', '>= 3.3.1'
         
     | 
| 
       24 
24 
     | 
    
         
             
              s.add_dependency 'multi_json', '~> 1.11'
         
     | 
| 
       25 
25 
     | 
    
         | 
    
        data/lib/iruby.rb
    CHANGED
    
    | 
         @@ -1,12 +1,16 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require 'fileutils'
         
     | 
| 
       1 
2 
     | 
    
         
             
            require 'mime/types'
         
     | 
| 
       2 
3 
     | 
    
         
             
            require 'multi_json'
         
     | 
| 
       3 
4 
     | 
    
         
             
            require 'securerandom'
         
     | 
| 
       4 
5 
     | 
    
         
             
            require 'openssl'
         
     | 
| 
       5 
6 
     | 
    
         
             
            require 'tempfile'
         
     | 
| 
       6 
7 
     | 
    
         
             
            require 'set'
         
     | 
| 
      
 8 
     | 
    
         
            +
            require 'stringio'
         
     | 
| 
       7 
9 
     | 
    
         | 
| 
       8 
10 
     | 
    
         
             
            require 'iruby/version'
         
     | 
| 
       9 
11 
     | 
    
         
             
            require 'iruby/jupyter'
         
     | 
| 
      
 12 
     | 
    
         
            +
            require 'iruby/event_manager'
         
     | 
| 
      
 13 
     | 
    
         
            +
            require 'iruby/logger'
         
     | 
| 
       10 
14 
     | 
    
         
             
            require 'iruby/kernel'
         
     | 
| 
       11 
15 
     | 
    
         
             
            require 'iruby/backend'
         
     | 
| 
       12 
16 
     | 
    
         
             
            require 'iruby/ostream'
         
     | 
    
        data/lib/iruby/backend.rb
    CHANGED
    
    | 
         @@ -3,7 +3,7 @@ module IRuby 
     | 
|
| 
       3 
3 
     | 
    
         | 
| 
       4 
4 
     | 
    
         
             
              module History
         
     | 
| 
       5 
5 
     | 
    
         
             
                def eval(code, store_history)
         
     | 
| 
       6 
     | 
    
         
            -
                  b =  
     | 
| 
      
 6 
     | 
    
         
            +
                  b = eval_binding
         
     | 
| 
       7 
7 
     | 
    
         | 
| 
       8 
8 
     | 
    
         
             
                  b.local_variable_set(:_ih, In)  unless b.local_variable_defined?(:_ih)
         
     | 
| 
       9 
9 
     | 
    
         
             
                  b.local_variable_set(:_oh, Out) unless b.local_variable_defined?(:_oh)
         
     | 
| 
         @@ -36,17 +36,38 @@ module IRuby 
     | 
|
| 
       36 
36 
     | 
    
         
             
                prepend History
         
     | 
| 
       37 
37 
     | 
    
         | 
| 
       38 
38 
     | 
    
         
             
                def initialize
         
     | 
| 
       39 
     | 
    
         
            -
                  require ' 
     | 
| 
       40 
     | 
    
         
            -
                   
     | 
| 
       41 
     | 
    
         
            -
                   
     | 
| 
      
 39 
     | 
    
         
            +
                  require 'irb'
         
     | 
| 
      
 40 
     | 
    
         
            +
                  require 'irb/completion'
         
     | 
| 
      
 41 
     | 
    
         
            +
                  IRB.setup(nil)
         
     | 
| 
      
 42 
     | 
    
         
            +
                  @main = TOPLEVEL_BINDING.eval("self").dup
         
     | 
| 
      
 43 
     | 
    
         
            +
                  init_main_object(@main)
         
     | 
| 
      
 44 
     | 
    
         
            +
                  @workspace = IRB::WorkSpace.new(@main)
         
     | 
| 
      
 45 
     | 
    
         
            +
                  @irb = IRB::Irb.new(@workspace)
         
     | 
| 
      
 46 
     | 
    
         
            +
                  @eval_path = @irb.context.irb_path
         
     | 
| 
      
 47 
     | 
    
         
            +
                  IRB.conf[:MAIN_CONTEXT] = @irb.context
         
     | 
| 
      
 48 
     | 
    
         
            +
                end
         
     | 
| 
      
 49 
     | 
    
         
            +
             
     | 
| 
      
 50 
     | 
    
         
            +
                def eval_binding
         
     | 
| 
      
 51 
     | 
    
         
            +
                  @workspace.binding
         
     | 
| 
       42 
52 
     | 
    
         
             
                end
         
     | 
| 
       43 
53 
     | 
    
         | 
| 
       44 
54 
     | 
    
         
             
                def eval(code, store_history)
         
     | 
| 
       45 
     | 
    
         
            -
                   
     | 
| 
      
 55 
     | 
    
         
            +
                  @irb.context.evaluate(code, 0)
         
     | 
| 
      
 56 
     | 
    
         
            +
                  @irb.context.last_value
         
     | 
| 
       46 
57 
     | 
    
         
             
                end
         
     | 
| 
       47 
58 
     | 
    
         | 
| 
       48 
59 
     | 
    
         
             
                def complete(code)
         
     | 
| 
       49 
     | 
    
         
            -
                   
     | 
| 
      
 60 
     | 
    
         
            +
                  IRB::InputCompletor::CompletionProc.call(code)
         
     | 
| 
      
 61 
     | 
    
         
            +
                end
         
     | 
| 
      
 62 
     | 
    
         
            +
             
     | 
| 
      
 63 
     | 
    
         
            +
                private
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
                def init_main_object(main)
         
     | 
| 
      
 66 
     | 
    
         
            +
                  wrapper_module = Module.new
         
     | 
| 
      
 67 
     | 
    
         
            +
                  main.extend(wrapper_module)
         
     | 
| 
      
 68 
     | 
    
         
            +
                  main.define_singleton_method(:include) do |*args|
         
     | 
| 
      
 69 
     | 
    
         
            +
                    wrapper_module.include(*args)
         
     | 
| 
      
 70 
     | 
    
         
            +
                  end
         
     | 
| 
       50 
71 
     | 
    
         
             
                end
         
     | 
| 
       51 
72 
     | 
    
         
             
              end
         
     | 
| 
       52 
73 
     | 
    
         | 
| 
         @@ -64,6 +85,10 @@ module IRuby 
     | 
|
| 
       64 
85 
     | 
    
         
             
                  reset
         
     | 
| 
       65 
86 
     | 
    
         
             
                end
         
     | 
| 
       66 
87 
     | 
    
         | 
| 
      
 88 
     | 
    
         
            +
                def eval_binding
         
     | 
| 
      
 89 
     | 
    
         
            +
                  TOPLEVEL_BINDING
         
     | 
| 
      
 90 
     | 
    
         
            +
                end
         
     | 
| 
      
 91 
     | 
    
         
            +
             
     | 
| 
       67 
92 
     | 
    
         
             
                def eval(code, store_history)
         
     | 
| 
       68 
93 
     | 
    
         
             
                  Pry.current_line = 1
         
     | 
| 
       69 
94 
     | 
    
         
             
                  @pry.last_result = nil
         
     | 
| 
         @@ -96,7 +121,7 @@ module IRuby 
     | 
|
| 
       96 
121 
     | 
    
         
             
                end
         
     | 
| 
       97 
122 
     | 
    
         | 
| 
       98 
123 
     | 
    
         
             
                def reset
         
     | 
| 
       99 
     | 
    
         
            -
                  @pry = Pry.new(output: $stdout, target:  
     | 
| 
      
 124 
     | 
    
         
            +
                  @pry = Pry.new(output: $stdout, target: eval_binding)
         
     | 
| 
       100 
125 
     | 
    
         
             
                end
         
     | 
| 
       101 
126 
     | 
    
         
             
              end
         
     | 
| 
       102 
127 
     | 
    
         
             
            end
         
     | 
    
        data/lib/iruby/command.rb
    CHANGED
    
    | 
         @@ -1,7 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            require 'iruby 
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require 'fileutils'
         
     | 
| 
       4 
     | 
    
         
            -
            require 'multi_json'
         
     | 
| 
      
 1 
     | 
    
         
            +
            require 'iruby'
         
     | 
| 
       5 
2 
     | 
    
         | 
| 
       6 
3 
     | 
    
         
             
            module IRuby
         
     | 
| 
       7 
4 
     | 
    
         
             
              class Command
         
     | 
| 
         @@ -92,7 +89,6 @@ Try `ipython help` for more information. 
     | 
|
| 
       92 
89 
     | 
    
         
             
                end
         
     | 
| 
       93 
90 
     | 
    
         | 
| 
       94 
91 
     | 
    
         
             
                def run_kernel
         
     | 
| 
       95 
     | 
    
         
            -
                  require 'iruby/logger'
         
     | 
| 
       96 
92 
     | 
    
         
             
                  IRuby.logger = MultiLogger.new(*Logger.new(STDOUT))
         
     | 
| 
       97 
93 
     | 
    
         
             
                  STDOUT.sync = true # FIXME: This can make the integration test.
         
     | 
| 
       98 
94 
     | 
    
         | 
| 
         @@ -131,7 +127,7 @@ Try `ipython help` for more information. 
     | 
|
| 
       131 
127 
     | 
    
         
             
                  check_registered_kernel
         
     | 
| 
       132 
128 
     | 
    
         
             
                  check_bundler {|e| STDERR.puts "Could not load bundler: #{e.message}" }
         
     | 
| 
       133 
129 
     | 
    
         | 
| 
       134 
     | 
    
         
            -
                   
     | 
| 
      
 130 
     | 
    
         
            +
                  Process.exec('ipython', *@args)
         
     | 
| 
       135 
131 
     | 
    
         
             
                end
         
     | 
| 
       136 
132 
     | 
    
         | 
| 
       137 
133 
     | 
    
         
             
                def check_registered_kernel
         
     | 
    
        data/lib/iruby/display.rb
    CHANGED
    
    | 
         @@ -1,10 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "set"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
       1 
3 
     | 
    
         
             
            module IRuby
         
     | 
| 
       2 
4 
     | 
    
         
             
              module Display
         
     | 
| 
      
 5 
     | 
    
         
            +
                DEFAULT_MIME_TYPE_FORMAT_METHODS = {
         
     | 
| 
      
 6 
     | 
    
         
            +
                  "text/html" => :to_html,
         
     | 
| 
      
 7 
     | 
    
         
            +
                  "text/markdown" => :to_markdown,
         
     | 
| 
      
 8 
     | 
    
         
            +
                  "image/svg+xml" => :to_svg,
         
     | 
| 
      
 9 
     | 
    
         
            +
                  "image/png" => :to_png,
         
     | 
| 
      
 10 
     | 
    
         
            +
                  "appliation/pdf" => :to_pdf,
         
     | 
| 
      
 11 
     | 
    
         
            +
                  "image/jpeg" => :to_jpeg,
         
     | 
| 
      
 12 
     | 
    
         
            +
                  "text/latex" => [:to_latex, :to_tex],
         
     | 
| 
      
 13 
     | 
    
         
            +
                  # NOTE: Do not include the entry of "application/json" because
         
     | 
| 
      
 14 
     | 
    
         
            +
                  #       all objects can respond to `to_json` due to json library
         
     | 
| 
      
 15 
     | 
    
         
            +
                  # "application/json" => :to_json,
         
     | 
| 
      
 16 
     | 
    
         
            +
                  "application/javascript" => :to_javascript,
         
     | 
| 
      
 17 
     | 
    
         
            +
                  nil => :to_iruby,
         
     | 
| 
      
 18 
     | 
    
         
            +
                  "text/plain" => :inspect
         
     | 
| 
      
 19 
     | 
    
         
            +
                }.freeze
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       3 
21 
     | 
    
         
             
                class << self
         
     | 
| 
      
 22 
     | 
    
         
            +
                  # @private
         
     | 
| 
       4 
23 
     | 
    
         
             
                  def convert(obj, options)
         
     | 
| 
       5 
24 
     | 
    
         
             
                    Representation.new(obj, options)
         
     | 
| 
       6 
25 
     | 
    
         
             
                  end
         
     | 
| 
       7 
26 
     | 
    
         | 
| 
      
 27 
     | 
    
         
            +
                  # @private
         
     | 
| 
       8 
28 
     | 
    
         
             
                  def display(obj, options = {})
         
     | 
| 
       9 
29 
     | 
    
         
             
                    obj = convert(obj, options)
         
     | 
| 
       10 
30 
     | 
    
         
             
                    options = obj.options
         
     | 
| 
         @@ -20,23 +40,48 @@ module IRuby 
     | 
|
| 
       20 
40 
     | 
    
         
             
                      raise 'Invalid mime type' unless exact_mime.include?('/')
         
     | 
| 
       21 
41 
     | 
    
         
             
                    end
         
     | 
| 
       22 
42 
     | 
    
         | 
| 
       23 
     | 
    
         
            -
                    data =  
     | 
| 
       24 
     | 
    
         
            -
             
     | 
| 
       25 
     | 
    
         
            -
                    # Render additional  
     | 
| 
       26 
     | 
    
         
            -
                     
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
                    #  
     | 
| 
       29 
     | 
    
         
            -
                     
     | 
| 
      
 43 
     | 
    
         
            +
                    data = render_mimebundle(obj, exact_mime, fuzzy_mime)
         
     | 
| 
      
 44 
     | 
    
         
            +
             
     | 
| 
      
 45 
     | 
    
         
            +
                    # Render by additional formatters
         
     | 
| 
      
 46 
     | 
    
         
            +
                    render_by_registry(data, obj, exact_mime, fuzzy_mime)
         
     | 
| 
      
 47 
     | 
    
         
            +
             
     | 
| 
      
 48 
     | 
    
         
            +
                    # Render by to_xxx methods
         
     | 
| 
      
 49 
     | 
    
         
            +
                    DEFAULT_MIME_TYPE_FORMAT_METHODS.each do |mime, methods|
         
     | 
| 
      
 50 
     | 
    
         
            +
                      next if mime.nil? && !data.empty? # for to_iruby
         
     | 
| 
      
 51 
     | 
    
         
            +
             
     | 
| 
      
 52 
     | 
    
         
            +
                      next if mime && data.key?(mime)   # do not overwrite
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
                      method = Array(methods).find {|m| obj.respond_to?(m) }
         
     | 
| 
      
 55 
     | 
    
         
            +
                      next if method.nil?
         
     | 
| 
      
 56 
     | 
    
         
            +
             
     | 
| 
      
 57 
     | 
    
         
            +
                      result = obj.send(method)
         
     | 
| 
      
 58 
     | 
    
         
            +
                      case mime
         
     | 
| 
      
 59 
     | 
    
         
            +
                      when nil # to_iruby
         
     | 
| 
      
 60 
     | 
    
         
            +
                        case result
         
     | 
| 
      
 61 
     | 
    
         
            +
                        when nil
         
     | 
| 
      
 62 
     | 
    
         
            +
                          # do nothing
         
     | 
| 
      
 63 
     | 
    
         
            +
                          next
         
     | 
| 
      
 64 
     | 
    
         
            +
                        when Array
         
     | 
| 
      
 65 
     | 
    
         
            +
                          mime, result = result
         
     | 
| 
      
 66 
     | 
    
         
            +
                        else
         
     | 
| 
      
 67 
     | 
    
         
            +
                          warn(("Ignore the result of to_iruby method of %p because " +
         
     | 
| 
      
 68 
     | 
    
         
            +
                                "it does not return a pair of mime-type and formatted representation") % obj)
         
     | 
| 
      
 69 
     | 
    
         
            +
                          next
         
     | 
| 
      
 70 
     | 
    
         
            +
                        end
         
     | 
| 
      
 71 
     | 
    
         
            +
                      end
         
     | 
| 
      
 72 
     | 
    
         
            +
                      data[mime] = result
         
     | 
| 
      
 73 
     | 
    
         
            +
                    end
         
     | 
| 
       30 
74 
     | 
    
         | 
| 
       31 
75 
     | 
    
         
             
                    # As a last resort, interpret string representation of the object
         
     | 
| 
       32 
76 
     | 
    
         
             
                    # as the given mime type.
         
     | 
| 
       33 
     | 
    
         
            -
                    if exact_mime && data. 
     | 
| 
      
 77 
     | 
    
         
            +
                    if exact_mime && !data.key?(exact_mime)
         
     | 
| 
       34 
78 
     | 
    
         
             
                      data[exact_mime] = protect(exact_mime, obj)
         
     | 
| 
       35 
79 
     | 
    
         
             
                    end
         
     | 
| 
       36 
80 
     | 
    
         | 
| 
       37 
81 
     | 
    
         
             
                    data
         
     | 
| 
       38 
82 
     | 
    
         
             
                  end
         
     | 
| 
       39 
83 
     | 
    
         | 
| 
      
 84 
     | 
    
         
            +
                  # @private
         
     | 
| 
       40 
85 
     | 
    
         
             
                  def clear_output(wait = false)
         
     | 
| 
       41 
86 
     | 
    
         
             
                    IRuby::Kernel.instance.session.send(:publish, :clear_output, wait: wait)
         
     | 
| 
       42 
87 
     | 
    
         
             
                  end
         
     | 
| 
         @@ -44,10 +89,39 @@ module IRuby 
     | 
|
| 
       44 
89 
     | 
    
         
             
                  private
         
     | 
| 
       45 
90 
     | 
    
         | 
| 
       46 
91 
     | 
    
         
             
                  def protect(mime, data)
         
     | 
| 
       47 
     | 
    
         
            -
                     
     | 
| 
      
 92 
     | 
    
         
            +
                    ascii?(mime) ? data.to_s : [data.to_s].pack('m0')
         
     | 
| 
       48 
93 
     | 
    
         
             
                  end
         
     | 
| 
       49 
94 
     | 
    
         | 
| 
       50 
     | 
    
         
            -
                   
     | 
| 
      
 95 
     | 
    
         
            +
                  # Each of the following mime types must be a text type,
         
     | 
| 
      
 96 
     | 
    
         
            +
                  # but mime-types library tells us it is a non-text type.
         
     | 
| 
      
 97 
     | 
    
         
            +
                  FORCE_TEXT_TYPES = Set[
         
     | 
| 
      
 98 
     | 
    
         
            +
                    "application/javascript",
         
     | 
| 
      
 99 
     | 
    
         
            +
                    "image/svg+xml"
         
     | 
| 
      
 100 
     | 
    
         
            +
                  ].freeze
         
     | 
| 
      
 101 
     | 
    
         
            +
             
     | 
| 
      
 102 
     | 
    
         
            +
                  def ascii?(mime)
         
     | 
| 
      
 103 
     | 
    
         
            +
                    if FORCE_TEXT_TYPES.include?(mime)
         
     | 
| 
      
 104 
     | 
    
         
            +
                      true
         
     | 
| 
      
 105 
     | 
    
         
            +
                    else
         
     | 
| 
      
 106 
     | 
    
         
            +
                      MIME::Type.new(mime).ascii?
         
     | 
| 
      
 107 
     | 
    
         
            +
                    end
         
     | 
| 
      
 108 
     | 
    
         
            +
                  end
         
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
                  private def render_mimebundle(obj, exact_mime, fuzzy_mime)
         
     | 
| 
      
 111 
     | 
    
         
            +
                    data = {}
         
     | 
| 
      
 112 
     | 
    
         
            +
                    if obj.respond_to?(:to_iruby_mimebundle)
         
     | 
| 
      
 113 
     | 
    
         
            +
                      include_mime = [exact_mime].compact
         
     | 
| 
      
 114 
     | 
    
         
            +
                      formats, metadata = obj.to_iruby_mimebundle(include: include_mime)
         
     | 
| 
      
 115 
     | 
    
         
            +
                      formats.each do |mime, value|
         
     | 
| 
      
 116 
     | 
    
         
            +
                        if fuzzy_mime.nil? || mime.include?(fuzzy_mime)
         
     | 
| 
      
 117 
     | 
    
         
            +
                          data[mime] = value
         
     | 
| 
      
 118 
     | 
    
         
            +
                        end
         
     | 
| 
      
 119 
     | 
    
         
            +
                      end
         
     | 
| 
      
 120 
     | 
    
         
            +
                    end
         
     | 
| 
      
 121 
     | 
    
         
            +
                    data
         
     | 
| 
      
 122 
     | 
    
         
            +
                  end
         
     | 
| 
      
 123 
     | 
    
         
            +
             
     | 
| 
      
 124 
     | 
    
         
            +
                  private def render_by_registry(data, obj, exact_mime, fuzzy_mime)
         
     | 
| 
       51 
125 
     | 
    
         
             
                    # Filter matching renderer by object type
         
     | 
| 
       52 
126 
     | 
    
         
             
                    renderer = Registry.renderer.select { |r| r.match?(obj) }
         
     | 
| 
       53 
127 
     | 
    
         | 
| 
         @@ -68,6 +142,8 @@ module IRuby 
     | 
|
| 
       68 
142 
     | 
    
         
             
                    # Return first render result which has the right mime type
         
     | 
| 
       69 
143 
     | 
    
         
             
                    renderer.each do |r|
         
     | 
| 
       70 
144 
     | 
    
         
             
                      mime, result = r.render(obj)
         
     | 
| 
      
 145 
     | 
    
         
            +
                      next if data.key?(mime)
         
     | 
| 
      
 146 
     | 
    
         
            +
             
     | 
| 
       71 
147 
     | 
    
         
             
                      if mime && result && (!exact_mime || exact_mime == mime) && (!fuzzy_mime || mime.include?(fuzzy_mime))
         
     | 
| 
       72 
148 
     | 
    
         
             
                        data[mime] = protect(mime, result)
         
     | 
| 
       73 
149 
     | 
    
         
             
                        break
         
     | 
| 
         @@ -78,6 +154,19 @@ module IRuby 
     | 
|
| 
       78 
154 
     | 
    
         
             
                  end
         
     | 
| 
       79 
155 
     | 
    
         
             
                end
         
     | 
| 
       80 
156 
     | 
    
         | 
| 
      
 157 
     | 
    
         
            +
                private def render_by_to_iruby(data, obj)
         
     | 
| 
      
 158 
     | 
    
         
            +
                  if obj.respond_to?(:to_iruby)
         
     | 
| 
      
 159 
     | 
    
         
            +
                    result = obj.to_iruby
         
     | 
| 
      
 160 
     | 
    
         
            +
                    mime, rep = case result
         
     | 
| 
      
 161 
     | 
    
         
            +
                                when Array
         
     | 
| 
      
 162 
     | 
    
         
            +
                                  result
         
     | 
| 
      
 163 
     | 
    
         
            +
                                else
         
     | 
| 
      
 164 
     | 
    
         
            +
                                  [nil, result]
         
     | 
| 
      
 165 
     | 
    
         
            +
                                end
         
     | 
| 
      
 166 
     | 
    
         
            +
                    data[mime] = rep
         
     | 
| 
      
 167 
     | 
    
         
            +
                  end
         
     | 
| 
      
 168 
     | 
    
         
            +
                end
         
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
       81 
170 
     | 
    
         
             
                class Representation
         
     | 
| 
       82 
171 
     | 
    
         
             
                  attr_reader :object, :options
         
     | 
| 
       83 
172 
     | 
    
         | 
| 
         @@ -100,6 +189,60 @@ module IRuby 
     | 
|
| 
       100 
189 
     | 
    
         
             
                  end
         
     | 
| 
       101 
190 
     | 
    
         
             
                end
         
     | 
| 
       102 
191 
     | 
    
         | 
| 
      
 192 
     | 
    
         
            +
                class FormatMatcher
         
     | 
| 
      
 193 
     | 
    
         
            +
                  def initialize(&block)
         
     | 
| 
      
 194 
     | 
    
         
            +
                    @block = block
         
     | 
| 
      
 195 
     | 
    
         
            +
                  end
         
     | 
| 
      
 196 
     | 
    
         
            +
             
     | 
| 
      
 197 
     | 
    
         
            +
                  def call(obj)
         
     | 
| 
      
 198 
     | 
    
         
            +
                    @block.(obj)
         
     | 
| 
      
 199 
     | 
    
         
            +
                  end
         
     | 
| 
      
 200 
     | 
    
         
            +
             
     | 
| 
      
 201 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 202 
     | 
    
         
            +
                    "#{self.class.name}[%p]" % @block
         
     | 
| 
      
 203 
     | 
    
         
            +
                  end
         
     | 
| 
      
 204 
     | 
    
         
            +
                end
         
     | 
| 
      
 205 
     | 
    
         
            +
             
     | 
| 
      
 206 
     | 
    
         
            +
                class RespondToFormatMatcher < FormatMatcher
         
     | 
| 
      
 207 
     | 
    
         
            +
                  def initialize(name)
         
     | 
| 
      
 208 
     | 
    
         
            +
                    super() {|obj| obj.respond_to?(name) }
         
     | 
| 
      
 209 
     | 
    
         
            +
                    @name = name
         
     | 
| 
      
 210 
     | 
    
         
            +
                  end
         
     | 
| 
      
 211 
     | 
    
         
            +
             
     | 
| 
      
 212 
     | 
    
         
            +
                  attr_reader :name
         
     | 
| 
      
 213 
     | 
    
         
            +
             
     | 
| 
      
 214 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 215 
     | 
    
         
            +
                    "#{self.class.name}[respond_to?(%p)]" % name
         
     | 
| 
      
 216 
     | 
    
         
            +
                  end
         
     | 
| 
      
 217 
     | 
    
         
            +
                end
         
     | 
| 
      
 218 
     | 
    
         
            +
             
     | 
| 
      
 219 
     | 
    
         
            +
                class TypeFormatMatcher < FormatMatcher
         
     | 
| 
      
 220 
     | 
    
         
            +
                  def initialize(class_block)
         
     | 
| 
      
 221 
     | 
    
         
            +
                    super() do |obj|
         
     | 
| 
      
 222 
     | 
    
         
            +
                      begin
         
     | 
| 
      
 223 
     | 
    
         
            +
                        self.klass === obj
         
     | 
| 
      
 224 
     | 
    
         
            +
                      # We have to rescue all exceptions since constant autoloading could fail with a different error
         
     | 
| 
      
 225 
     | 
    
         
            +
                      rescue Exception
         
     | 
| 
      
 226 
     | 
    
         
            +
                        false
         
     | 
| 
      
 227 
     | 
    
         
            +
                      end
         
     | 
| 
      
 228 
     | 
    
         
            +
                    end
         
     | 
| 
      
 229 
     | 
    
         
            +
                    @class_block = class_block
         
     | 
| 
      
 230 
     | 
    
         
            +
                  end
         
     | 
| 
      
 231 
     | 
    
         
            +
             
     | 
| 
      
 232 
     | 
    
         
            +
                  def klass
         
     | 
| 
      
 233 
     | 
    
         
            +
                    @class_block.()
         
     | 
| 
      
 234 
     | 
    
         
            +
                  end
         
     | 
| 
      
 235 
     | 
    
         
            +
             
     | 
| 
      
 236 
     | 
    
         
            +
                  def inspect
         
     | 
| 
      
 237 
     | 
    
         
            +
                    klass = begin
         
     | 
| 
      
 238 
     | 
    
         
            +
                              @class_block.()
         
     | 
| 
      
 239 
     | 
    
         
            +
                            rescue Exception
         
     | 
| 
      
 240 
     | 
    
         
            +
                              @class_block
         
     | 
| 
      
 241 
     | 
    
         
            +
                            end
         
     | 
| 
      
 242 
     | 
    
         
            +
                    "#{self.class.name}[%p]" % klass
         
     | 
| 
      
 243 
     | 
    
         
            +
                  end
         
     | 
| 
      
 244 
     | 
    
         
            +
                end
         
     | 
| 
      
 245 
     | 
    
         
            +
             
     | 
| 
       103 
246 
     | 
    
         
             
                class Renderer
         
     | 
| 
       104 
247 
     | 
    
         
             
                  attr_reader :match, :mime, :priority
         
     | 
| 
       105 
248 
     | 
    
         | 
| 
         @@ -127,37 +270,22 @@ module IRuby 
     | 
|
| 
       127 
270 
     | 
    
         
             
                    @renderer ||= []
         
     | 
| 
       128 
271 
     | 
    
         
             
                  end
         
     | 
| 
       129 
272 
     | 
    
         | 
| 
       130 
     | 
    
         
            -
                  SUPPORTED_MIMES = %w[
         
     | 
| 
       131 
     | 
    
         
            -
                    text/plain
         
     | 
| 
       132 
     | 
    
         
            -
                    text/html
         
     | 
| 
       133 
     | 
    
         
            -
                    text/latex
         
     | 
| 
       134 
     | 
    
         
            -
                    application/json
         
     | 
| 
       135 
     | 
    
         
            -
                    application/javascript
         
     | 
| 
       136 
     | 
    
         
            -
                    image/png
         
     | 
| 
       137 
     | 
    
         
            -
                    image/jpeg
         
     | 
| 
       138 
     | 
    
         
            -
                    image/svg+xml
         
     | 
| 
       139 
     | 
    
         
            -
                  ]
         
     | 
| 
       140 
     | 
    
         
            -
             
     | 
| 
       141 
273 
     | 
    
         
             
                  def match(&block)
         
     | 
| 
       142 
     | 
    
         
            -
                    @match = block
         
     | 
| 
      
 274 
     | 
    
         
            +
                    @match = FormatMatcher.new(&block)
         
     | 
| 
       143 
275 
     | 
    
         
             
                    priority 0
         
     | 
| 
       144 
276 
     | 
    
         
             
                    nil
         
     | 
| 
       145 
277 
     | 
    
         
             
                  end
         
     | 
| 
       146 
278 
     | 
    
         | 
| 
       147 
279 
     | 
    
         
             
                  def respond_to(name)
         
     | 
| 
       148 
     | 
    
         
            -
                    match  
     | 
| 
      
 280 
     | 
    
         
            +
                    @match = RespondToFormatMatcher.new(name)
         
     | 
| 
      
 281 
     | 
    
         
            +
                    priority 0
         
     | 
| 
      
 282 
     | 
    
         
            +
                    nil
         
     | 
| 
       149 
283 
     | 
    
         
             
                  end
         
     | 
| 
       150 
284 
     | 
    
         | 
| 
       151 
285 
     | 
    
         
             
                  def type(&block)
         
     | 
| 
       152 
     | 
    
         
            -
                    match  
     | 
| 
       153 
     | 
    
         
            -
             
     | 
| 
       154 
     | 
    
         
            -
             
     | 
| 
       155 
     | 
    
         
            -
                      # We have to rescue all exceptions since constant autoloading could fail with a different error
         
     | 
| 
       156 
     | 
    
         
            -
                      rescue Exception
         
     | 
| 
       157 
     | 
    
         
            -
                      rescue #NameError
         
     | 
| 
       158 
     | 
    
         
            -
                        false
         
     | 
| 
       159 
     | 
    
         
            -
                      end
         
     | 
| 
       160 
     | 
    
         
            -
                    end
         
     | 
| 
      
 286 
     | 
    
         
            +
                    @match = TypeFormatMatcher.new(block)
         
     | 
| 
      
 287 
     | 
    
         
            +
                    priority 0
         
     | 
| 
      
 288 
     | 
    
         
            +
                    nil
         
     | 
| 
       161 
289 
     | 
    
         
             
                  end
         
     | 
| 
       162 
290 
     | 
    
         | 
| 
       163 
291 
     | 
    
         
             
                  def priority(p)
         
     | 
| 
         @@ -255,13 +383,24 @@ module IRuby 
     | 
|
| 
       255 
383 
     | 
    
         
             
                    end
         
     | 
| 
       256 
384 
     | 
    
         
             
                  end
         
     | 
| 
       257 
385 
     | 
    
         | 
| 
      
 386 
     | 
    
         
            +
                  format_magick_image = ->(obj) do
         
     | 
| 
      
 387 
     | 
    
         
            +
                    format = obj.format || 'PNG'
         
     | 
| 
      
 388 
     | 
    
         
            +
                    [
         
     | 
| 
      
 389 
     | 
    
         
            +
                      format == 'PNG' ? 'image/png' : 'image/jpeg',
         
     | 
| 
      
 390 
     | 
    
         
            +
                      obj.to_blob {|i| i.format = format }
         
     | 
| 
      
 391 
     | 
    
         
            +
                    ]
         
     | 
| 
      
 392 
     | 
    
         
            +
                  end
         
     | 
| 
      
 393 
     | 
    
         
            +
             
     | 
| 
       258 
394 
     | 
    
         
             
                  match do |obj|
         
     | 
| 
       259 
395 
     | 
    
         
             
                    defined?(Magick::Image) && Magick::Image === obj ||
         
     | 
| 
       260 
396 
     | 
    
         
             
                      defined?(MiniMagick::Image) && MiniMagick::Image === obj
         
     | 
| 
       261 
397 
     | 
    
         
             
                  end
         
     | 
| 
      
 398 
     | 
    
         
            +
                  format 'image', &format_magick_image
         
     | 
| 
      
 399 
     | 
    
         
            +
             
     | 
| 
      
 400 
     | 
    
         
            +
                  type { Gruff::Base }
         
     | 
| 
       262 
401 
     | 
    
         
             
                  format 'image' do |obj|
         
     | 
| 
       263 
     | 
    
         
            -
                     
     | 
| 
       264 
     | 
    
         
            -
                     
     | 
| 
      
 402 
     | 
    
         
            +
                    image = obj.to_image
         
     | 
| 
      
 403 
     | 
    
         
            +
                    format_magick_image.(obj.to_image)
         
     | 
| 
       265 
404 
     | 
    
         
             
                  end
         
     | 
| 
       266 
405 
     | 
    
         | 
| 
       267 
406 
     | 
    
         
             
                  match do |obj|
         
     | 
| 
         @@ -278,39 +417,19 @@ module IRuby 
     | 
|
| 
       278 
417 
     | 
    
         
             
                    end
         
     | 
| 
       279 
418 
     | 
    
         
             
                  end
         
     | 
| 
       280 
419 
     | 
    
         | 
| 
       281 
     | 
    
         
            -
                  type {  
     | 
| 
       282 
     | 
    
         
            -
                  format 'image/png', &:to_blob
         
     | 
| 
       283 
     | 
    
         
            -
             
     | 
| 
       284 
     | 
    
         
            -
                  respond_to :to_html
         
     | 
| 
       285 
     | 
    
         
            -
                  format 'text/html', &:to_html
         
     | 
| 
       286 
     | 
    
         
            -
             
     | 
| 
       287 
     | 
    
         
            -
                  respond_to :to_latex
         
     | 
| 
       288 
     | 
    
         
            -
                  format 'text/latex', &:to_latex
         
     | 
| 
       289 
     | 
    
         
            -
             
     | 
| 
       290 
     | 
    
         
            -
                  respond_to :to_tex
         
     | 
| 
       291 
     | 
    
         
            -
                  format 'text/latex', &:to_tex
         
     | 
| 
       292 
     | 
    
         
            -
             
     | 
| 
       293 
     | 
    
         
            -
                  respond_to :to_javascript
         
     | 
| 
       294 
     | 
    
         
            -
                  format 'text/javascript', &:to_javascript
         
     | 
| 
       295 
     | 
    
         
            -
             
     | 
| 
       296 
     | 
    
         
            -
                  respond_to :to_svg
         
     | 
| 
      
 420 
     | 
    
         
            +
                  type { Rubyvis::Mark }
         
     | 
| 
       297 
421 
     | 
    
         
             
                  format 'image/svg+xml' do |obj|
         
     | 
| 
       298 
     | 
    
         
            -
                    obj.render 
     | 
| 
      
 422 
     | 
    
         
            +
                    obj.render
         
     | 
| 
       299 
423 
     | 
    
         
             
                    obj.to_svg
         
     | 
| 
       300 
424 
     | 
    
         
             
                  end
         
     | 
| 
       301 
425 
     | 
    
         | 
| 
       302 
     | 
    
         
            -
                  respond_to :to_iruby
         
     | 
| 
       303 
     | 
    
         
            -
                  format(&:to_iruby)
         
     | 
| 
       304 
     | 
    
         
            -
             
     | 
| 
       305 
426 
     | 
    
         
             
                  match { |obj| obj.respond_to?(:path) && obj.method(:path).arity == 0 && File.readable?(obj.path) }
         
     | 
| 
       306 
427 
     | 
    
         
             
                  format do |obj|
         
     | 
| 
       307 
428 
     | 
    
         
             
                    mime = MIME::Types.of(obj.path).first.to_s
         
     | 
| 
       308 
     | 
    
         
            -
                     
     | 
| 
      
 429 
     | 
    
         
            +
                    if mime && DEFAULT_MIME_TYPE_FORMAT_METHODS.key?(mime)
         
     | 
| 
      
 430 
     | 
    
         
            +
                      [mime, File.read(obj.path)]
         
     | 
| 
      
 431 
     | 
    
         
            +
                    end
         
     | 
| 
       309 
432 
     | 
    
         
             
                  end
         
     | 
| 
       310 
     | 
    
         
            -
             
     | 
| 
       311 
     | 
    
         
            -
                  type { Object }
         
     | 
| 
       312 
     | 
    
         
            -
                  priority(-1000)
         
     | 
| 
       313 
     | 
    
         
            -
                  format 'text/plain', &:inspect
         
     | 
| 
       314 
433 
     | 
    
         
             
                end
         
     | 
| 
       315 
434 
     | 
    
         
             
              end
         
     | 
| 
       316 
435 
     | 
    
         
             
            end
         
     |