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 +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 [![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.
|
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
|