chartkick-remote 1.1.7 → 1.2.0
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/Gemfile +2 -0
- data/README.md +12 -2
- data/chartkick_remote.gemspec +3 -3
- data/lib/assets/javascripts/jquery.ajax.queue-concurrent.coffee +76 -0
- data/lib/chartkick/remote.rb +1 -0
- data/lib/chartkick/remote/engine.rb +9 -0
- data/lib/chartkick/remote/helper.rb +6 -5
- data/lib/chartkick/remote/version.rb +1 -1
- data/spec/spec_helper.rb +5 -1
- metadata +27 -39
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: d897dcbb67069a41ddad76a8828a6aa6e2fc8dda
         | 
| 4 | 
            +
              data.tar.gz: dce74b0b5ec1594c91fbe7f342c41847b58bea7e
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: 44d17923ceec8eaefeda18d35c763284426a9d58c67e718a002894857942727dc2108315ec24d0a63f76f32e5af9c8976867ed1bd3418ec2ff5a57b07d48d8c2
         | 
| 7 | 
            +
              data.tar.gz: bff84fea3c14c40c9a29c1de7b30dedd699eaae154cd3cf3fc2ebdc49b63e2fa778fdfb47817b54847ac7ed5f55542e687cb14bb8b2f3d8408aad58526aa5768
         | 
    
        data/Gemfile
    CHANGED
    
    
    
        data/README.md
    CHANGED
    
    | @@ -1,4 +1,4 @@ | |
| 1 | 
            -
            # Chartkick Remote [](https://travis-ci.org/dontfidget/chartkick-remote) [](https://codeclimate.com/github/dontfidget/chartkick-remote) [](https://codeclimate.com/github/dontfidget/chartkick-remote)
         | 
| 1 | 
            +
            # Chartkick Remote [](http://badge.fury.io/rb/chartkick-remote) [](https://travis-ci.org/dontfidget/chartkick-remote) [](https://codeclimate.com/github/dontfidget/chartkick-remote) [](https://codeclimate.com/github/dontfidget/chartkick-remote) [](https://gemnasium.com/dontfidget/chartkick-remote)
         | 
| 2 2 |  | 
| 3 3 | 
             
            ## Usage
         | 
| 4 4 |  | 
| @@ -63,12 +63,22 @@ This gem works by *not* executing "remote" blocks when initially rendering your | |
| 63 63 |  | 
| 64 64 | 
             
            ## Handling *Many* Requests at Once
         | 
| 65 65 |  | 
| 66 | 
            -
            Using this methodology, it's easy to write a page that makes many, many json requests, which may swamp your server and possibly even time out if you have a global `timeout` value set for your ajax requests.   | 
| 66 | 
            +
            Using this methodology, it's easy to write a page that makes many, many json requests, which may swamp your server and possibly even time out if you have a global `timeout` value set for your ajax requests.  `chartkick-remote` provides a javascript script, available as a rails asset, that can be used to limit the number of simultaneous assets on your page. 
         | 
| 67 | 
            +
              
         | 
| 68 | 
            +
            You can include it by adding the following to your javascript manifest:
         | 
| 69 | 
            +
             
         | 
| 70 | 
            +
             ```
         | 
| 71 | 
            +
             //= require jquery.ajax.queue-concurrent
         | 
| 72 | 
            +
             ```
         | 
| 73 | 
            +
              
         | 
| 74 | 
            +
            If you include this javascript in this gist on your page, you can then specify the maximum number of allowable requests globally for your page as follows:
         | 
| 67 75 |  | 
| 68 76 | 
             
            ```javascript
         | 
| 69 77 | 
             
              $.ajaxSetup({queue: true, queueMaxConcurrency: 2});
         | 
| 70 78 | 
             
            ```
         | 
| 71 79 |  | 
| 80 | 
            +
            This script is based on @maccman's jquery.ajax.queue.coffee script provides a basic queueing transport layer for ajax requests which I've modified to provide an option to set the maximum number of requests that can be made in parallel.  You can see the modifications with a link to the original at https://gist.github.com/dontfidget/1ad9ab33971b64fe6fef.  
         | 
| 81 | 
            +
             | 
| 72 82 | 
             
            ## Standalone Mode (for debugging)
         | 
| 73 83 |  | 
| 74 84 | 
             
            Sometimes it's useful to be able to be able to debug a single chart at a time even though there may be several on the page.  Use the `standalone` option to add a link to each chart that opens the page in standalone mode, where only the single chart is shown.  
         | 
    
        data/chartkick_remote.gemspec
    CHANGED
    
    | @@ -19,14 +19,14 @@ Gem::Specification.new do |spec| | |
| 19 19 | 
             
              spec.require_paths = ["lib"]
         | 
| 20 20 | 
             
              spec.required_ruby_version = '>= 1.9'
         | 
| 21 21 |  | 
| 22 | 
            +
              spec.add_dependency "chartkick", '~> 1.2'
         | 
| 23 | 
            +
              spec.add_dependency "railties", ">= 3.1"
         | 
| 24 | 
            +
             | 
| 22 25 | 
             
              spec.add_development_dependency "bundler", '~> 1.3'
         | 
| 23 26 | 
             
              spec.add_development_dependency "rake", '~> 10.3'
         | 
| 24 | 
            -
              spec.add_development_dependency "chartkick", '~> 1.2'
         | 
| 25 27 | 
             
              spec.add_development_dependency "activesupport", '~> 4.1'
         | 
| 26 28 | 
             
              spec.add_development_dependency "rspec", '~> 3.0'
         | 
| 27 29 | 
             
              spec.add_development_dependency "rspec-rails", '~> 3.0'
         | 
| 28 | 
            -
              spec.add_development_dependency "pry", '~> 0'
         | 
| 29 | 
            -
              spec.add_development_dependency "pry-doc", '~> 0'
         | 
| 30 30 | 
             
              spec.add_development_dependency "travis-lint", '~> 1.8'
         | 
| 31 31 | 
             
              spec.add_development_dependency "codeclimate-test-reporter", '~> 0.3'
         | 
| 32 32 | 
             
              spec.add_development_dependency "rspec-html-matchers", '~> 0.6.1', '>= 0.6.1'
         | 
| @@ -0,0 +1,76 @@ | |
| 1 | 
            +
            # from https://gist.github.com/dontfidget/1ad9ab33971b64fe6fef
         | 
| 2 | 
            +
            # derived from https://gist.github.com/maccman/5790509
         | 
| 3 | 
            +
             | 
| 4 | 
            +
            $ = jQuery
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            queues  = {}
         | 
| 7 | 
            +
             | 
| 8 | 
            +
            queue = (name) ->
         | 
| 9 | 
            +
              name = 'default' if name is true
         | 
| 10 | 
            +
              queues[name] or= {entries: [], running: 0}
         | 
| 11 | 
            +
             | 
| 12 | 
            +
            next = (name, done) ->
         | 
| 13 | 
            +
              list = queue(name)
         | 
| 14 | 
            +
             | 
| 15 | 
            +
              if done
         | 
| 16 | 
            +
                queue(name).running--
         | 
| 17 | 
            +
             | 
| 18 | 
            +
              unless list.entries.length
         | 
| 19 | 
            +
                return
         | 
| 20 | 
            +
             | 
| 21 | 
            +
              [options, deferred] = list.entries[0]
         | 
| 22 | 
            +
             | 
| 23 | 
            +
              if list.running >= (options.queueMaxConcurrency || 1)
         | 
| 24 | 
            +
                return
         | 
| 25 | 
            +
             | 
| 26 | 
            +
              list.entries.shift()
         | 
| 27 | 
            +
             | 
| 28 | 
            +
              queue(name).running++
         | 
| 29 | 
            +
             | 
| 30 | 
            +
              $.ajax(options)
         | 
| 31 | 
            +
              .always(-> next(name, true))
         | 
| 32 | 
            +
              .done(-> deferred.resolve(arguments...))
         | 
| 33 | 
            +
              .fail(-> deferred.reject(arguments...))
         | 
| 34 | 
            +
             | 
| 35 | 
            +
            push = (name, options) ->
         | 
| 36 | 
            +
              list = queue(name)
         | 
| 37 | 
            +
              deferred = $.Deferred()
         | 
| 38 | 
            +
             | 
| 39 | 
            +
              while options && list.entries.length >= options.queueMaxDepth
         | 
| 40 | 
            +
                [overflowOptions, overflowDeferred] = list.entries.shift()
         | 
| 41 | 
            +
                overflowDeferred.reject null, "queue overflow"
         | 
| 42 | 
            +
             | 
| 43 | 
            +
              list.entries.push([options, deferred])
         | 
| 44 | 
            +
             | 
| 45 | 
            +
              next(name)
         | 
| 46 | 
            +
              deferred.promise()
         | 
| 47 | 
            +
             | 
| 48 | 
            +
            remove = (name, options) ->
         | 
| 49 | 
            +
              list = queue(name)
         | 
| 50 | 
            +
             | 
| 51 | 
            +
              for [value, _], i in list.entries when value is options
         | 
| 52 | 
            +
                list.entries.splice(i, 1)
         | 
| 53 | 
            +
                break
         | 
| 54 | 
            +
             | 
| 55 | 
            +
            $.ajaxTransport '+*', (options) ->
         | 
| 56 | 
            +
              if options.queue
         | 
| 57 | 
            +
                queuedOptions = $.extend({}, options)
         | 
| 58 | 
            +
                queuedOptions.queue = false
         | 
| 59 | 
            +
                queuedOptions.processData = false
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                send: (headers, complete) ->
         | 
| 62 | 
            +
                  push(options.queue, queuedOptions)
         | 
| 63 | 
            +
                  .done (data, textStatus, jqXHR) ->
         | 
| 64 | 
            +
                    complete(jqXHR.status,
         | 
| 65 | 
            +
                      jqXHR.statusText,
         | 
| 66 | 
            +
                      text: jqXHR.responseText,
         | 
| 67 | 
            +
                      jqXHR.getAllResponseHeaders())
         | 
| 68 | 
            +
             | 
| 69 | 
            +
                  .fail (jqXHR, textStatus, errorThrown) ->
         | 
| 70 | 
            +
                    complete(jqXHR.status,
         | 
| 71 | 
            +
                      jqXHR.statusText,
         | 
| 72 | 
            +
                      text: jqXHR.responseText,
         | 
| 73 | 
            +
                      jqXHR.getAllResponseHeaders())
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                abort: ->
         | 
| 76 | 
            +
                  remove(options.queue, queuedOptions)
         | 
    
        data/lib/chartkick/remote.rb
    CHANGED
    
    
| @@ -34,22 +34,23 @@ module Chartkick::Remote | |
| 34 34 | 
             
                    data_source = block.call
         | 
| 35 35 | 
             
                  end
         | 
| 36 36 |  | 
| 37 | 
            +
                  standalone = options.delete(:standalone)
         | 
| 38 | 
            +
             | 
| 37 39 | 
             
                  result = send(:"#{type}_without_remote", data_source, options)
         | 
| 38 40 |  | 
| 39 | 
            -
                  result = apply_standalone_mode(result) if  | 
| 41 | 
            +
                  result = apply_standalone_mode(result, @remote_chart_id) if standalone && remote
         | 
| 40 42 |  | 
| 41 43 | 
             
                  result
         | 
| 42 44 | 
             
                end
         | 
| 43 45 |  | 
| 44 | 
            -
                def apply_standalone_mode(result)
         | 
| 46 | 
            +
                def apply_standalone_mode(result, chart_id)
         | 
| 45 47 | 
             
                  standalone_enabled = params[:_chartkick_remote_standalone].present?
         | 
| 46 | 
            -
             | 
| 47 | 
            -
                  skip = standalone_enabled && controller.params[:_chartkick_remote_chart_id].to_s != @remote_chart_id.to_s
         | 
| 48 | 
            +
                  skip = standalone_enabled && params[:_chartkick_remote_chart_id].to_s != chart_id.to_s
         | 
| 48 49 |  | 
| 49 50 | 
             
                  if skip || !standalone_enabled
         | 
| 50 51 | 
             
                    result = '<div>Skipped by Standalone Mode</div>'.html_safe if standalone_enabled
         | 
| 51 52 | 
             
                    standalone_link = link_to 'Standalone',
         | 
| 52 | 
            -
                                              url_for(params.merge(_chartkick_remote_chart_id:  | 
| 53 | 
            +
                                              url_for(params.merge(_chartkick_remote_chart_id: chart_id,
         | 
| 53 54 | 
             
                                                                   _chartkick_remote_standalone: 1))
         | 
| 54 55 | 
             
                    result += standalone_link.html_safe
         | 
| 55 56 | 
             
                  elsif standalone_enabled && !skip
         | 
    
        data/spec/spec_helper.rb
    CHANGED
    
    
    
        metadata
    CHANGED
    
    | @@ -1,87 +1,87 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: chartkick-remote
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 1. | 
| 4 | 
            +
              version: 1.2.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Andrew S. Brown
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2014- | 
| 11 | 
            +
            date: 2014-08-25 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 | 
            -
              name:  | 
| 14 | 
            +
              name: chartkick
         | 
| 15 15 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 16 16 | 
             
                requirements:
         | 
| 17 17 | 
             
                - - "~>"
         | 
| 18 18 | 
             
                  - !ruby/object:Gem::Version
         | 
| 19 | 
            -
                    version: '1. | 
| 20 | 
            -
              type: : | 
| 19 | 
            +
                    version: '1.2'
         | 
| 20 | 
            +
              type: :runtime
         | 
| 21 21 | 
             
              prerelease: false
         | 
| 22 22 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 23 23 | 
             
                requirements:
         | 
| 24 24 | 
             
                - - "~>"
         | 
| 25 25 | 
             
                  - !ruby/object:Gem::Version
         | 
| 26 | 
            -
                    version: '1. | 
| 26 | 
            +
                    version: '1.2'
         | 
| 27 27 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 28 | 
            -
              name:  | 
| 28 | 
            +
              name: railties
         | 
| 29 29 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 30 30 | 
             
                requirements:
         | 
| 31 | 
            -
                - - " | 
| 31 | 
            +
                - - ">="
         | 
| 32 32 | 
             
                  - !ruby/object:Gem::Version
         | 
| 33 | 
            -
                    version: ' | 
| 34 | 
            -
              type: : | 
| 33 | 
            +
                    version: '3.1'
         | 
| 34 | 
            +
              type: :runtime
         | 
| 35 35 | 
             
              prerelease: false
         | 
| 36 36 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 37 37 | 
             
                requirements:
         | 
| 38 | 
            -
                - - " | 
| 38 | 
            +
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 | 
            -
                    version: ' | 
| 40 | 
            +
                    version: '3.1'
         | 
| 41 41 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            -
              name:  | 
| 42 | 
            +
              name: bundler
         | 
| 43 43 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 44 | 
             
                requirements:
         | 
| 45 45 | 
             
                - - "~>"
         | 
| 46 46 | 
             
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            -
                    version: '1. | 
| 47 | 
            +
                    version: '1.3'
         | 
| 48 48 | 
             
              type: :development
         | 
| 49 49 | 
             
              prerelease: false
         | 
| 50 50 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 51 | 
             
                requirements:
         | 
| 52 52 | 
             
                - - "~>"
         | 
| 53 53 | 
             
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            -
                    version: '1. | 
| 54 | 
            +
                    version: '1.3'
         | 
| 55 55 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 56 | 
            -
              name:  | 
| 56 | 
            +
              name: rake
         | 
| 57 57 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 58 58 | 
             
                requirements:
         | 
| 59 59 | 
             
                - - "~>"
         | 
| 60 60 | 
             
                  - !ruby/object:Gem::Version
         | 
| 61 | 
            -
                    version: ' | 
| 61 | 
            +
                    version: '10.3'
         | 
| 62 62 | 
             
              type: :development
         | 
| 63 63 | 
             
              prerelease: false
         | 
| 64 64 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 65 65 | 
             
                requirements:
         | 
| 66 66 | 
             
                - - "~>"
         | 
| 67 67 | 
             
                  - !ruby/object:Gem::Version
         | 
| 68 | 
            -
                    version: ' | 
| 68 | 
            +
                    version: '10.3'
         | 
| 69 69 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 70 | 
            -
              name:  | 
| 70 | 
            +
              name: activesupport
         | 
| 71 71 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 72 72 | 
             
                requirements:
         | 
| 73 73 | 
             
                - - "~>"
         | 
| 74 74 | 
             
                  - !ruby/object:Gem::Version
         | 
| 75 | 
            -
                    version: ' | 
| 75 | 
            +
                    version: '4.1'
         | 
| 76 76 | 
             
              type: :development
         | 
| 77 77 | 
             
              prerelease: false
         | 
| 78 78 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 79 79 | 
             
                requirements:
         | 
| 80 80 | 
             
                - - "~>"
         | 
| 81 81 | 
             
                  - !ruby/object:Gem::Version
         | 
| 82 | 
            -
                    version: ' | 
| 82 | 
            +
                    version: '4.1'
         | 
| 83 83 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 84 | 
            -
              name: rspec | 
| 84 | 
            +
              name: rspec
         | 
| 85 85 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 86 86 | 
             
                requirements:
         | 
| 87 87 | 
             
                - - "~>"
         | 
| @@ -95,33 +95,19 @@ dependencies: | |
| 95 95 | 
             
                  - !ruby/object:Gem::Version
         | 
| 96 96 | 
             
                    version: '3.0'
         | 
| 97 97 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 98 | 
            -
              name:  | 
| 99 | 
            -
              requirement: !ruby/object:Gem::Requirement
         | 
| 100 | 
            -
                requirements:
         | 
| 101 | 
            -
                - - "~>"
         | 
| 102 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 103 | 
            -
                    version: '0'
         | 
| 104 | 
            -
              type: :development
         | 
| 105 | 
            -
              prerelease: false
         | 
| 106 | 
            -
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 107 | 
            -
                requirements:
         | 
| 108 | 
            -
                - - "~>"
         | 
| 109 | 
            -
                  - !ruby/object:Gem::Version
         | 
| 110 | 
            -
                    version: '0'
         | 
| 111 | 
            -
            - !ruby/object:Gem::Dependency
         | 
| 112 | 
            -
              name: pry-doc
         | 
| 98 | 
            +
              name: rspec-rails
         | 
| 113 99 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| 114 100 | 
             
                requirements:
         | 
| 115 101 | 
             
                - - "~>"
         | 
| 116 102 | 
             
                  - !ruby/object:Gem::Version
         | 
| 117 | 
            -
                    version: '0'
         | 
| 103 | 
            +
                    version: '3.0'
         | 
| 118 104 | 
             
              type: :development
         | 
| 119 105 | 
             
              prerelease: false
         | 
| 120 106 | 
             
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 121 107 | 
             
                requirements:
         | 
| 122 108 | 
             
                - - "~>"
         | 
| 123 109 | 
             
                  - !ruby/object:Gem::Version
         | 
| 124 | 
            -
                    version: '0'
         | 
| 110 | 
            +
                    version: '3.0'
         | 
| 125 111 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 126 112 | 
             
              name: travis-lint
         | 
| 127 113 | 
             
              requirement: !ruby/object:Gem::Requirement
         | 
| @@ -184,7 +170,9 @@ files: | |
| 184 170 | 
             
            - README.md
         | 
| 185 171 | 
             
            - Rakefile
         | 
| 186 172 | 
             
            - chartkick_remote.gemspec
         | 
| 173 | 
            +
            - lib/assets/javascripts/jquery.ajax.queue-concurrent.coffee
         | 
| 187 174 | 
             
            - lib/chartkick/remote.rb
         | 
| 175 | 
            +
            - lib/chartkick/remote/engine.rb
         | 
| 188 176 | 
             
            - lib/chartkick/remote/helper.rb
         | 
| 189 177 | 
             
            - lib/chartkick/remote/remote.rb
         | 
| 190 178 | 
             
            - lib/chartkick/remote/version.rb
         |