chartjs-ror 3.3.0 → 3.3.1

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: 916dcc5fbe72ead60e7f25633252f0413ad66bf2
4
- data.tar.gz: fe51adc790f27e02ff23664b8b4b9145f97777e5
3
+ metadata.gz: 1698b08968a158347859a536e4a29b93284df938
4
+ data.tar.gz: 9b72390f0e1793e186d89c66cdca001777faee8b
5
5
  SHA512:
6
- metadata.gz: 5aa1fde76053c8e5b315e927b3edcf5b1250b5dcffa79fa038fac39bf4134202fa4ab4aef3625a0ce24e9cb634a38443396d2b86381538d1a624d79a945c9f28
7
- data.tar.gz: 2135bb7d26129e632559d26c4d98b4236621ba94e5918bb9bd15a1bd88964cc8306866037f33d2ac47d6275ba9288329c9dcad8a115c2ecfd90ecd1017556a47
6
+ metadata.gz: 4df9989001bf288c89d9b397cc30dddcdf32225473033343c77194ddd572b20725df71c6df51dab436a4e353c5b0f8a0a966ab87651ef1e0aed0e35c370400d4
7
+ data.tar.gz: c5c332161770825d90134ebfc9ec42c2a02ad49ac888a7fce9ed0b787a04f2e34d1941ef802e0869d792521018b372fbafe8fb37ec3d064d6b20588f845aafca
data/CHANGELOG CHANGED
@@ -1,6 +1,11 @@
1
1
  # CHANGELOG
2
2
 
3
3
 
4
+ ## 3.3.1 - 2017-01-27
5
+
6
+ - Improve conversion of data and options hashes to JavaScript.
7
+
8
+
4
9
  ## 3.3.0 - 2017-01-26
5
10
 
6
11
  - Use Chart.js v2.4.0.
data/README.md CHANGED
@@ -125,6 +125,31 @@ options = { ... }
125
125
  <%= line_chart data, options %>
126
126
  ```
127
127
 
128
+ You can also use underscored symbols for keys, instead of the camelcase versions.
129
+ They will be converted to their lower camelcase counterparts on output.
130
+
131
+ ```ruby
132
+ data = {
133
+ labels: ["January", "February", "March", "April", "May", "June", "July"],
134
+ datasets: [
135
+ {
136
+ label: "My First dataset",
137
+ background_color: "rgba(220,220,220,0.2)",
138
+ border_color: "rgba(220,220,220,1)",
139
+ data: [65, 59, 80, 81, 56, 55, 40]
140
+ },
141
+ {
142
+ label: "My Second dataset",
143
+ background_color: "rgba(151,187,205,0.2)",
144
+ border_color: "rgba(151,187,205,1)",
145
+ data: [28, 48, 40, 19, 86, 27, 90]
146
+ }
147
+ ]
148
+ }
149
+ options = { ... }
150
+ <%= line_chart data, options %>
151
+ ```
152
+
128
153
  ### Options
129
154
 
130
155
  You can put anything in the `options` hash that Chart.js recognises. To pass a JavaScript function as an option value, wrap it in quotation marks to make it a string.
@@ -1,3 +1,6 @@
1
+ require 'json'
2
+ require 'bigdecimal'
3
+
1
4
  module Chartjs
2
5
  module ChartHelpers
3
6
 
@@ -33,16 +36,14 @@ module Chartjs
33
36
  canvas = content_tag :canvas, '', id: element_id, class: css_class, width: width, height: height
34
37
 
35
38
  script = javascript_tag do
36
- # Ensure option string values which are actually JavaScript functions
37
- # are treated as functions.
38
39
  <<-END.squish.html_safe
39
40
  (function() {
40
41
  var initChart = function() {
41
42
  var ctx = document.getElementById(#{element_id.to_json});
42
43
  var chart = new Chart(ctx, {
43
44
  type: "#{camel_case type}",
44
- data: #{data.to_json},
45
- options: #{options.to_json.gsub /"(function.*?})"/, '\1'}
45
+ data: #{to_javascript_string data},
46
+ options: #{to_javascript_string options}
46
47
  });
47
48
  };
48
49
 
@@ -68,7 +69,35 @@ module Chartjs
68
69
 
69
70
  # polar_area -> polarArea
70
71
  def camel_case(string)
71
- string.sub(/_([a-z])/) { $1.upcase }
72
+ string.gsub(/_([a-z])/) { $1.upcase }
73
+ end
74
+
75
+ def to_javascript_string(element)
76
+ case element
77
+ when Hash
78
+ hash_elements = []
79
+ element.each do |key, value|
80
+ hash_elements << camel_case(key.to_s).to_json + ':' + to_javascript_string(value)
81
+ end
82
+ '{' + hash_elements.join(',') + '}'
83
+ when Array
84
+ array_elements = []
85
+ element.each do |value|
86
+ array_elements << to_javascript_string(value)
87
+ end
88
+ '[' + array_elements.join(',') + ']'
89
+ when String
90
+ if element.match(/^\s*function.*}\s*$/m)
91
+ # Raw-copy function definitions to the output without surrounding quotes.
92
+ element
93
+ else
94
+ element.to_json
95
+ end
96
+ when BigDecimal
97
+ element.to_s
98
+ else
99
+ element.to_json
100
+ end
72
101
  end
73
102
 
74
103
  end
@@ -1,3 +1,3 @@
1
1
  module Chartjs
2
- VERSION = "3.3.0"
2
+ VERSION = "3.3.1"
3
3
  end
@@ -0,0 +1,51 @@
1
+ require 'test_helper'
2
+
3
+ require 'chartjs/chart_helpers'
4
+
5
+ class ChartHelpersTest < Minitest::Test
6
+
7
+ class Foo
8
+ include Chartjs::ChartHelpers
9
+
10
+ def to_js(element)
11
+ to_javascript_string element
12
+ end
13
+ end
14
+
15
+ def setup
16
+ @subject = Foo.new
17
+ end
18
+
19
+ def test_to_javascript_string
20
+ assert_equal '"foo"', @subject.to_js('foo')
21
+
22
+ assert_equal '["a",42]', @subject.to_js(['a', 42])
23
+
24
+ assert_equal '{"a":42}', @subject.to_js({'a' => 42})
25
+
26
+ assert_equal '{"a":function(x) { blah; }}', @subject.to_js({'a' => 'function(x) { blah; }'})
27
+
28
+ expected = \
29
+ '{"a":function(x) {
30
+ if (x) {
31
+ foo();
32
+ }
33
+ else {
34
+ bar();
35
+ }
36
+ }
37
+ }'
38
+
39
+ assert_equal expected, @subject.to_js({'a' => <<END})
40
+ function(x) {
41
+ if (x) {
42
+ foo();
43
+ }
44
+ else {
45
+ bar();
46
+ }
47
+ }
48
+ END
49
+ end
50
+
51
+ end
@@ -0,0 +1,3 @@
1
+ $LOAD_PATH.unshift File.expand_path('../../lib', __FILE__)
2
+
3
+ require 'minitest/autorun'
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: chartjs-ror
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.3.0
4
+ version: 3.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andy Stewart
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-26 00:00:00.000000000 Z
11
+ date: 2017-01-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -57,6 +57,8 @@ files:
57
57
  - lib/chartjs/chart_helpers.rb
58
58
  - lib/chartjs/engine.rb
59
59
  - lib/chartjs/version.rb
60
+ - test/chart_helpers_test.rb
61
+ - test/test_helper.rb
60
62
  - vendor/assets/javascripts/Chart.bundle.min.js
61
63
  - vendor/assets/javascripts/Chart.min.js
62
64
  homepage: https://github.com/airblade/chartjs-ror
@@ -82,4 +84,6 @@ rubygems_version: 2.5.1
82
84
  signing_key:
83
85
  specification_version: 4
84
86
  summary: Simplifies using Chart.js in Rails
85
- test_files: []
87
+ test_files:
88
+ - test/chart_helpers_test.rb
89
+ - test/test_helper.rb