chartkick-remote 1.1.7 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 0655801c196c86eb2b4df610851bd01cfe75824a
4
- data.tar.gz: 53b374e3dcf082410e144bb944d0cd39dd22cabe
3
+ metadata.gz: d897dcbb67069a41ddad76a8828a6aa6e2fc8dda
4
+ data.tar.gz: dce74b0b5ec1594c91fbe7f342c41847b58bea7e
5
5
  SHA512:
6
- metadata.gz: bf6ba0aa6def8bbbefbf3422aeb22a9d126b8a4bd6a93c9f1486d3622dfb5cff250baee8d292b890ddb1dd1b74ed8c437bfe740916bd5dfd679a58f3762f5d95
7
- data.tar.gz: 43c8828817139754ba395074d24a92c1bd029b654dc2a058700a4d6971b2c50dbf63747fbe0385247949e7d3504b875053822710511f7c7fafdf78d4a0234b12
6
+ metadata.gz: 44d17923ceec8eaefeda18d35c763284426a9d58c67e718a002894857942727dc2108315ec24d0a63f76f32e5af9c8976867ed1bd3418ec2ff5a57b07d48d8c2
7
+ data.tar.gz: bff84fea3c14c40c9a29c1de7b30dedd699eaae154cd3cf3fc2ebdc49b63e2fa778fdfb47817b54847ac7ed5f55542e687cb14bb8b2f3d8408aad58526aa5768
data/Gemfile CHANGED
@@ -2,3 +2,5 @@ source 'https://rubygems.org'
2
2
 
3
3
  # Specify your gem's dependencies in chartkick.gemspec
4
4
  gemspec
5
+
6
+ eval File.read('Gemfile-custom') if File.exist?('Gemfile-custom')
data/README.md CHANGED
@@ -1,4 +1,4 @@
1
- # Chartkick Remote [![Travis CI Status](https://travis-ci.org/dontfidget/chartkick-remote.png?branch=master)](https://travis-ci.org/dontfidget/chartkick-remote) [![Code Climate](https://codeclimate.com/github/dontfidget/chartkick-remote.png)](https://codeclimate.com/github/dontfidget/chartkick-remote) [![Code Climate](https://codeclimate.com/github/dontfidget/chartkick-remote/coverage.png)](https://codeclimate.com/github/dontfidget/chartkick-remote)
1
+ # Chartkick Remote [![Gem Version](https://badge.fury.io/rb/chartkick-remote.svg)](http://badge.fury.io/rb/chartkick-remote) [![Travis CI Status](https://travis-ci.org/dontfidget/chartkick-remote.png?branch=master)](https://travis-ci.org/dontfidget/chartkick-remote) [![Code Climate](https://codeclimate.com/github/dontfidget/chartkick-remote.png)](https://codeclimate.com/github/dontfidget/chartkick-remote) [![Code Climate](https://codeclimate.com/github/dontfidget/chartkick-remote/coverage.png)](https://codeclimate.com/github/dontfidget/chartkick-remote) [![Dependency Status](https://gemnasium.com/dontfidget/chartkick-remote.svg)](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. @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 (see https://gist.github.com/dontfidget/1ad9ab33971b64fe6fef). If you include the javascript in this gist on your page, you can then specify the maximum number of allowable requests globally for your page as follows:
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.
@@ -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)
@@ -1,5 +1,6 @@
1
1
  require 'chartkick/remote/helper'
2
2
  require 'chartkick/remote/remote'
3
+ require 'chartkick/remote/engine' if defined?(Rails)
3
4
 
4
5
  ActiveSupport.on_load(:action_view) do
5
6
  include Chartkick::Remote::Helper
@@ -0,0 +1,9 @@
1
+ module Chartkick::Remote
2
+ class Engine < ::Rails::Engine
3
+
4
+ initializer "precompile", :group => :all do |app|
5
+ app.config.assets.precompile << 'jquery.ajax.queue-concurrent.js'
6
+ end
7
+
8
+ end
9
+ end
@@ -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 options.delete(:standalone) && remote
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: @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
@@ -1,5 +1,5 @@
1
1
  module Chartkick
2
2
  module Remote
3
- VERSION = "1.1.7"
3
+ VERSION = "1.2.0"
4
4
  end
5
5
  end
data/spec/spec_helper.rb CHANGED
@@ -7,7 +7,11 @@ require 'action_controller'
7
7
  require 'rails/engine'
8
8
  require 'rspec/rails'
9
9
  require 'rspec-html-matchers'
10
- require 'pry'
10
+
11
+ begin
12
+ require 'pry'
13
+ rescue LoadError
14
+ end
11
15
 
12
16
  module Rails
13
17
  def self.application
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.1.7
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-06-30 00:00:00.000000000 Z
11
+ date: 2014-08-25 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: bundler
14
+ name: chartkick
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '1.3'
20
- type: :development
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.3'
26
+ version: '1.2'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rake
28
+ name: railties
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '10.3'
34
- type: :development
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: '10.3'
40
+ version: '3.1'
41
41
  - !ruby/object:Gem::Dependency
42
- name: chartkick
42
+ name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '1.2'
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.2'
54
+ version: '1.3'
55
55
  - !ruby/object:Gem::Dependency
56
- name: activesupport
56
+ name: rake
57
57
  requirement: !ruby/object:Gem::Requirement
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: '4.1'
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: '4.1'
68
+ version: '10.3'
69
69
  - !ruby/object:Gem::Dependency
70
- name: rspec
70
+ name: activesupport
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: '3.0'
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: '3.0'
82
+ version: '4.1'
83
83
  - !ruby/object:Gem::Dependency
84
- name: rspec-rails
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: pry
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