chartjs-ror 3.3.0 → 3.3.1

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 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