apexcharts 0.1.8 → 0.1.9

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.
Files changed (71) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +29 -20
  3. data/lib/apex_charts/charts.rb +16 -0
  4. data/lib/{apexcharts/charts/area.rb → apex_charts/charts/area_chart.rb} +1 -1
  5. data/lib/{apexcharts/charts/bar.rb → apex_charts/charts/bar_chart.rb} +1 -1
  6. data/lib/{apexcharts/charts/base.rb → apex_charts/charts/base_chart.rb} +6 -4
  7. data/lib/{apexcharts/charts/bubble.rb → apex_charts/charts/bubble_chart.rb} +2 -2
  8. data/lib/{apexcharts/charts/candlestick.rb → apex_charts/charts/candlestick_chart.rb} +1 -1
  9. data/lib/{apexcharts/charts/cartesian.rb → apex_charts/charts/cartesian_chart.rb} +8 -6
  10. data/lib/{apexcharts/charts/column.rb → apex_charts/charts/column_chart.rb} +3 -1
  11. data/lib/{apexcharts/charts/donut.rb → apex_charts/charts/donut_chart.rb} +1 -1
  12. data/lib/{apexcharts → apex_charts}/charts/features/annotations.rb +7 -5
  13. data/lib/{apexcharts → apex_charts}/charts/features/mixable.rb +1 -1
  14. data/lib/{apexcharts/charts/heatmap.rb → apex_charts/charts/heatmap_chart.rb} +2 -2
  15. data/lib/{apexcharts/charts/line.rb → apex_charts/charts/line_chart.rb} +1 -1
  16. data/lib/{apexcharts/charts/mixed.rb → apex_charts/charts/mixed_charts.rb} +6 -4
  17. data/lib/{apexcharts/charts/pie.rb → apex_charts/charts/pie_chart.rb} +1 -1
  18. data/lib/apex_charts/charts/polar_chart.rb +9 -0
  19. data/lib/{apexcharts/charts/radar.rb → apex_charts/charts/radar_chart.rb} +2 -2
  20. data/lib/{apexcharts/charts/radial_bar.rb → apex_charts/charts/radial_bar_chart.rb} +1 -1
  21. data/lib/{apexcharts/charts/range_bar.rb → apex_charts/charts/range_bar_chart.rb} +1 -1
  22. data/lib/{apexcharts/charts/scatter.rb → apex_charts/charts/scatter_chart.rb} +1 -1
  23. data/lib/{apexcharts/charts/syncing.rb → apex_charts/charts/syncing_charts.rb} +1 -1
  24. data/lib/{apexcharts → apex_charts}/colors.rb +2 -1
  25. data/lib/apex_charts/config/default_options.rb +16 -0
  26. data/lib/{apexcharts/config.rb → apex_charts/configuration.rb} +7 -7
  27. data/lib/{apexcharts → apex_charts}/helper.rb +16 -16
  28. data/lib/{apexcharts/options/annotations.rb → apex_charts/options/annotations_options.rb} +3 -1
  29. data/lib/{apexcharts/options/axis.rb → apex_charts/options/axis_options.rb} +3 -1
  30. data/lib/{apexcharts/options/chart.rb → apex_charts/options/chart_options.rb} +3 -1
  31. data/lib/{apexcharts/options/data_labels.rb → apex_charts/options/data_labels_options.rb} +3 -1
  32. data/lib/{apexcharts → apex_charts}/options/div_attributes.rb +3 -1
  33. data/lib/{apexcharts/options/fill.rb → apex_charts/options/fill_options.rb} +3 -1
  34. data/lib/{apexcharts/options/grid.rb → apex_charts/options/grid_options.rb} +3 -1
  35. data/lib/{apexcharts/options/legend.rb → apex_charts/options/legend_options.rb} +3 -1
  36. data/lib/{apexcharts/options/markers.rb → apex_charts/options/markers_options.rb} +3 -1
  37. data/lib/{apexcharts/options/no_data.rb → apex_charts/options/no_data_options.rb} +3 -1
  38. data/lib/{apexcharts → apex_charts}/options/plot_options.rb +3 -1
  39. data/lib/{apexcharts/options/root.rb → apex_charts/options/root_options.rb} +6 -4
  40. data/lib/{apexcharts/options/states.rb → apex_charts/options/states_options.rb} +3 -1
  41. data/lib/{apexcharts/options/stroke.rb → apex_charts/options/stroke_options.rb} +3 -1
  42. data/lib/{apexcharts/options/theme.rb → apex_charts/options/theme_options.rb} +3 -1
  43. data/lib/{apexcharts/options/title.rb → apex_charts/options/title_subtitle_options.rb} +4 -2
  44. data/lib/{apexcharts/options/tooltip.rb → apex_charts/options/tooltip_options.rb} +3 -1
  45. data/lib/{apexcharts/options/x_axis.rb → apex_charts/options/x_axis_options.rb} +4 -2
  46. data/lib/{apexcharts/options/y_axis.rb → apex_charts/options/y_axis_options.rb} +4 -2
  47. data/lib/{apexcharts → apex_charts}/options_builder.rb +37 -34
  48. data/lib/apex_charts/prefix_with_apex.rb +7 -0
  49. data/lib/{apexcharts → apex_charts}/prefixer.rb +2 -0
  50. data/lib/{apexcharts → apex_charts}/renderer.rb +7 -1
  51. data/lib/apex_charts/series.rb +7 -0
  52. data/lib/{apexcharts/series/bubble.rb → apex_charts/series/bubble_series.rb} +4 -2
  53. data/lib/{apexcharts/series/cartesian.rb → apex_charts/series/cartesian_series.rb} +4 -2
  54. data/lib/{apexcharts/series/polar.rb → apex_charts/series/polar_series.rb} +4 -2
  55. data/lib/{apexcharts → apex_charts}/support/rails.rb +0 -0
  56. data/lib/{apexcharts → apex_charts}/support/sinatra.rb +0 -0
  57. data/lib/{apexcharts → apex_charts}/theme.rb +0 -0
  58. data/lib/{apexcharts → apex_charts}/utils.rb +0 -0
  59. data/lib/{apexcharts → apex_charts}/utils/copy.rb +2 -0
  60. data/lib/{apexcharts → apex_charts}/utils/date_time.rb +2 -0
  61. data/lib/{apexcharts → apex_charts}/utils/hash.rb +2 -0
  62. data/lib/{apexcharts → apex_charts}/version.rb +1 -1
  63. data/lib/apexcharts.rb +3 -3
  64. data/lib/apexcharts/prefix_with_apex.rb +18 -3
  65. data/vendor/assets/javascripts/apexcharts.js +11 -3
  66. metadata +67 -67
  67. data/lib/apexcharts/charts.rb +0 -19
  68. data/lib/apexcharts/charts/polar.rb +0 -7
  69. data/lib/apexcharts/config/default_options.rb +0 -12
  70. data/lib/apexcharts/options/subtitle.rb +0 -9
  71. data/lib/apexcharts/series.rb +0 -7
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ab5fe55affbc927ac35a3b09eda054fc58b4d628559b856b09745a40995435a3
4
- data.tar.gz: 33e80f6bc63b97751eb8d9bb9cfa0ee394c4a857178d8b23ee1b484ab2d31317
3
+ metadata.gz: 737afc5c5ce435bfa18cfe6b7d00f51ffd74c040f8f5f51728dec1711a2514fc
4
+ data.tar.gz: e46f31763675b25c6cf0f010a16423aa2e6249240302af88e793f65277c7a816
5
5
  SHA512:
6
- metadata.gz: 2d4a235395e45ba368b5355611fd43a0118442195f5709ee4f978f293f9f6d422b253690a83a33d0782ea91387a3841eeaa3f4406af16bb5ec9c6fd924166b32
7
- data.tar.gz: 0c55734ce94cd4ed1536b6f7e0b468b77579844431f0780ac97bd8e097ab27b876e50bbfe9b8e9cf6f8801eb50b750870ac9badee625480047962a38ac330aef
6
+ metadata.gz: a4d469bb0d6ccb22595939a9e5305ce8cfb75db59c2e54db786d937c10cf1f07d0cfe342238ab3289fbebad2149b7e3eee0df5c20fcea17230c9eb45fb8b0cee
7
+ data.tar.gz: 67de41d4a272ee5ed1cfd200c20e9d2b2a95300c00d03463a9561000481655af329f6629f1a6a3d1443ef92bffbc33f4593247f983943faa58eae78cbd3e559f
data/README.md CHANGED
@@ -1,5 +1,5 @@
1
1
  <p align="center">
2
- <img src="images/placeholder.png" height="80">
2
+ <img src="images/apexcharts.rb.png" height="150" />
3
3
  </p>
4
4
 
5
5
  <p align="center">
@@ -39,8 +39,11 @@
39
39
 
40
40
  ## Trusted By
41
41
 
42
- <img src="images/users/bilendo.png" title="Use case: enterprise dashboards to visualize account receivables data" width="202" height="40" />
43
- <img src="images/users/ventrata.png" title="Use case: ticket sales for clients (visitor attractions and tour operators)" width="180" height="40" />
42
+ Organization/Company | Use Case
43
+ -----------------------------------------------------------------------|------------------------------------------------------------------
44
+ <img src="/images/users/copient-health.png" width="143" height="40" /> | Reports/charts related to Operating Room utilization statistics
45
+ <img src="/images/users/bilendo.png" width="202" height="40" /> | Enterprise dashboards to visualize account receivables data
46
+ <img src="/images/users/ventrata.png" width="180" height="40" /> | Ticket sales for clients (visitor attractions and tour operators)
44
47
 
45
48
  > If your organization/company uses ApexCharts.RB in production, please comment on
46
49
  > [this issue](https://github.com/styd/apexcharts.rb/issues/34).
@@ -49,7 +52,7 @@
49
52
  ## Supported By
50
53
 
51
54
  <a href="https://www.jetbrains.com/?from=ApexCharts.RB">
52
- <img src="images/supporters/jetbrains.svg" title="Grants 1 License for All Products Pack (worth US$649.00/year)" width="120" height="120" />
55
+ <img src="images/supporters/jetbrains.svg" title="Grants 1 License for All Products Pack" width="120" height="120" />
53
56
  </a>
54
57
 
55
58
 
@@ -58,7 +61,7 @@
58
61
  This README might not be for the version you use.
59
62
  Choose the right README:
60
63
 
61
- > [v0.1.8] | [v0.1.7] | [v0.1.6] | [v0.1.5] | [v0.1.4] | [v0.1.3] | [v0.1.2] | [v0.1.1]
64
+ > [v0.1.9] | [v0.1.8] | [v0.1.7] | [v0.1.6] | [v0.1.5] | [v0.1.4] | [v0.1.3] | [v0.1.2] | [v0.1.1]
62
65
 
63
66
  ## Table of Contents
64
67
 
@@ -249,13 +252,18 @@ Given:
249
252
  <%
250
253
  require 'date'
251
254
 
252
- def ohlc(ary)
253
- [rand(ary.min..ary.max), ary.max, ary.min, rand(ary.min..ary.max)]
255
+ def candlestick_data
256
+ @acc = rand(6570..6650)
257
+ 60.times.map {|i| [Date.today - 60 + i, ohlc] }.to_h
254
258
  end
255
259
 
256
- candlestick_data = 50.times.map do |i|
257
- [Date.today - 50 + i, ohlc(Array.new(2){ rand(6570..6650) })]
258
- end.to_h
260
+ def ohlc
261
+ open = @acc + rand(-20..20)
262
+ high = open + rand(0..100)
263
+ low = open - rand(0..100)
264
+ @acc = close = open + rand(-((high-low)/3)..((high-low)/2))
265
+ [open, high, low, close]
266
+ end
259
267
 
260
268
  candlestick_options = {
261
269
  plot_options: {
@@ -275,9 +283,6 @@ You can make candlestick chart with this:
275
283
  ```
276
284
  ![Example Candlestick Chart](images/candlestick_chart.gif)
277
285
 
278
- Real life candlestick chart probably don't look like that.
279
- That's because I just use random sets of numbers as the data.
280
-
281
286
 
282
287
  #### Mixed Charts
283
288
 
@@ -626,6 +631,12 @@ use it like so:
626
631
  <%= area_chart series, tooltip: {y: {formatter: function(val) { return '$' + parseFloat(val).toLocaleString() }}} %>
627
632
  ```
628
633
 
634
+ Or, without the _functionable-json_ gem, use function as object as follows:
635
+
636
+ ```erb
637
+ <%= area_chart series, tooltip: {y: {formatter: {function: {args: "val", body: "return '$' + parseFloat(val).toLocaleString();"}} }} %>
638
+ ```
639
+
629
640
 
630
641
  ## Reusable Custom Palette
631
642
 
@@ -692,7 +703,7 @@ Besides setting the environtment variable, if you just want a quick prefix, you
692
703
  do this on your _Gemfile_:
693
704
 
694
705
  ```ruby
695
- gem 'apexcharts', require: 'apexcharts/prefix_with_apex'
706
+ gem 'apexcharts', require: 'apex_charts/prefix_with_apex'
696
707
  ```
697
708
 
698
709
  and you'll get `apex_line_chart`, `apex_area_chart`, etc.
@@ -878,18 +889,16 @@ The gem is available as open source under the terms of the
878
889
  [MIT License](https://opensource.org/licenses/MIT).
879
890
 
880
891
 
881
- ## Like the charts?
882
-
883
- Consider donating to the author of [ApexCharts.JS] to support his awesome library.
884
- This project wouldn't be possible without it.
892
+ ## Articles
885
893
 
886
- Become a sponsor on [Patreon](https://patreon.com/junedchhipa).
887
- One time donation on [PayPal](https://paypal.me/junedchhipa)
894
+ - [Rails em 8 minutos: Criando gráficos incríveis com ApexCharts](https://onebitcode.com/graficos-incriveis-no-ruby-on-rails/)
895
+ - [【Rails】 5分でApexChart.jsを導入する方法](https://qiita.com/syukan3/items/aa741df278f628087a3c)
888
896
 
889
897
 
890
898
  [ApexCharts.JS]: https://github.com/apexcharts/apexcharts.js
891
899
 
892
900
 
901
+ [v0.1.9]: https://github.com/styd/apexcharts.rb/blob/v0.1.9/README.md
893
902
  [v0.1.8]: https://github.com/styd/apexcharts.rb/blob/v0.1.8/README.md
894
903
  [v0.1.7]: https://github.com/styd/apexcharts.rb/blob/v0.1.7/README.md
895
904
  [v0.1.6]: https://github.com/styd/apexcharts.rb/blob/v0.1.6/README.md
@@ -0,0 +1,16 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Charts
4
+ %w[
5
+ base cartesian line area bar column scatter
6
+ candlestick heatmap bubble radar polar pie donut
7
+ ].each do |type|
8
+ autoload :"#{type.capitalize}Chart", "apex_charts/charts/#{type}_chart.rb"
9
+ end
10
+
11
+ autoload :RangeBarChart, 'apex_charts/charts/range_bar_chart.rb'
12
+ autoload :RadialBarChart, 'apex_charts/charts/radial_bar_chart.rb'
13
+
14
+ autoload :MixedCharts, 'apex_charts/charts/mixed_charts.rb'
15
+ autoload :SyncingCharts, 'apex_charts/charts/syncing_charts.rb'
16
+ end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class AreaChart < CartesianChart
5
5
  def chart_type
6
6
  'area'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class BarChart < CartesianChart
5
5
  def chart_type
6
6
  'bar'
@@ -1,6 +1,8 @@
1
- module ApexCharts
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Charts
2
4
  class BaseChart
3
- include Utils::Hash
5
+ include ApexCharts::Utils::Hash
4
6
 
5
7
  attr_reader :options, :series, :sample
6
8
 
@@ -10,7 +12,7 @@ module ApexCharts
10
12
  end
11
13
 
12
14
  def render
13
- Renderer.render_default(options)
15
+ ApexCharts::Renderer.render_default(options)
14
16
  end
15
17
 
16
18
  def chart_type; end
@@ -25,7 +27,7 @@ module ApexCharts
25
27
 
26
28
  def build_options(options)
27
29
  deep_merge(
28
- OptionsBuilder.new(sample, options).build_options,
30
+ ApexCharts::OptionsBuilder.new(sample, options).build_options,
29
31
  camelize_keys(
30
32
  {**@series, chart: {type: chart_type}}.compact
31
33
  )
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class BubbleChart < BaseChart
5
5
  def chart_type
6
6
  'bubble'
7
7
  end
8
8
 
9
9
  def series_type
10
- BubbleSeries
10
+ ApexCharts::Series::BubbleSeries
11
11
  end
12
12
  end
13
13
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class CandlestickChart < CartesianChart
5
5
  def chart_type
6
6
  'candlestick'
@@ -1,12 +1,14 @@
1
1
  # frozen_string_literal: true
2
2
 
3
+ require_relative 'features/annotations'
4
+ require_relative 'features/mixable'
3
5
  require_relative '../utils/hash'
4
6
 
5
- module ApexCharts
7
+ module ApexCharts::Charts
6
8
  class CartesianChart < BaseChart
7
- include Annotations
8
- include Mixable
9
- include Utils::Hash
9
+ include Features::Annotations
10
+ include Features::Mixable
11
+ include ApexCharts::Utils::Hash
10
12
 
11
13
  def initialize(outer_self, data, options={}, &block)
12
14
  @outer_self = outer_self
@@ -27,7 +29,7 @@ module ApexCharts
27
29
  end
28
30
 
29
31
  def series_type
30
- CartesianSeries
32
+ ApexCharts::Series::CartesianSeries
31
33
  end
32
34
 
33
35
  def more_options
@@ -74,7 +76,7 @@ module ApexCharts
74
76
  end
75
77
 
76
78
  def handle_time(input)
77
- Utils::DateTime.convert(input)
79
+ ApexCharts::Utils::DateTime.convert(input)
78
80
  end
79
81
  end
80
82
  end
@@ -1,4 +1,6 @@
1
- module ApexCharts
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Charts
2
4
  class ColumnChart < BarChart
3
5
  def more_options
4
6
  {plot_options: {bar: {horizontal: false}}}
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class DonutChart < PolarChart
5
5
  def chart_type
6
6
  'donut'
@@ -1,4 +1,6 @@
1
- module ApexCharts
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Charts::Features
2
4
  module Annotations
3
5
  def annotation(axis, value:, text:, color: nil, **options)
4
6
  @annotations ||= {}
@@ -35,7 +37,7 @@ module ApexCharts
35
37
  axis = axis.to_s.delete_suffix('axis').to_sym
36
38
  case value
37
39
  when Range
38
- value = Utils::DateTime.convert_range(value)
40
+ value = ApexCharts::Utils::DateTime.convert_range(value)
39
41
 
40
42
  case axis
41
43
  when :x
@@ -47,10 +49,10 @@ module ApexCharts
47
49
  end
48
50
  else
49
51
  if axis == :points
50
- value.map! {|x| Utils::DateTime.convert(x) }
52
+ value.map! {|x| ApexCharts::Utils::DateTime.convert(x) }
51
53
  {x: value.first, y: value.last}
52
54
  else
53
- value = Utils::DateTime.convert(value)
55
+ value = ApexCharts::Utils::DateTime.convert(value)
54
56
  {axis => value}
55
57
  end
56
58
  end
@@ -69,6 +71,6 @@ module ApexCharts
69
71
  }
70
72
  end
71
73
 
72
- include Utils::Hash
74
+ include ApexCharts::Utils::Hash
73
75
  end
74
76
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts::Features
4
4
  module Mixable
5
5
  def mixed_series
6
6
  series[:series].each {|d| d.merge!(type: chart_type) }
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class HeatmapChart < BaseChart
5
5
  def chart_type
6
6
  'heatmap'
7
7
  end
8
8
 
9
9
  def series_type
10
- CartesianSeries
10
+ ApexCharts::Series::CartesianSeries
11
11
  end
12
12
  end
13
13
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class LineChart < CartesianChart
5
5
  def chart_type
6
6
  'line'
@@ -1,9 +1,11 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ require_relative 'features/annotations'
4
+
5
+ module ApexCharts::Charts
4
6
  class MixedCharts < BaseChart
5
- include Annotations
6
- include Utils::Hash
7
+ include Features::Annotations
8
+ include ApexCharts::Utils::Hash
7
9
 
8
10
  def initialize(outer_self, options={}, &block)
9
11
  @outer_self = outer_self
@@ -93,7 +95,7 @@ module ApexCharts
93
95
  end
94
96
 
95
97
  def handle_time(input)
96
- Utils::DateTime.convert(input)
98
+ ApexCharts::Utils::DateTime.convert(input)
97
99
  end
98
100
  end
99
101
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class PieChart < PolarChart
5
5
  def chart_type
6
6
  'pie'
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Charts
4
+ class PolarChart < BaseChart
5
+ def series_type
6
+ ApexCharts::Series::PolarSeries
7
+ end
8
+ end
9
+ end
@@ -1,13 +1,13 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class RadarChart < BaseChart
5
5
  def chart_type
6
6
  'radar'
7
7
  end
8
8
 
9
9
  def series_type
10
- CartesianSeries
10
+ ApexCharts::Series::CartesianSeries
11
11
  end
12
12
  end
13
13
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class RadialBarChart < PolarChart
5
5
  def chart_type
6
6
  'radialBar'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class RangeBarChart < BarChart
5
5
  def chart_type
6
6
  'rangeBar'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class ScatterChart < CartesianChart
5
5
  def chart_type
6
6
  'scatter'
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- module ApexCharts
3
+ module ApexCharts::Charts
4
4
  class SyncingCharts
5
5
  def initialize(outer_self, options={}, &block)
6
6
  @outer_self = outer_self
@@ -17,7 +17,8 @@ module ApexCharts
17
17
  def clean(colors)
18
18
  colors = colors.respond_to?(:to_set) ? colors.to_a.flatten : Array(colors)
19
19
  colors.map do |color|
20
- raise "unrecognized color #{color}" unless color.tap(&:upcase!)[/^#[0-9A-F]{6}/]
20
+ color = color.upcase
21
+ raise "unrecognized color #{color}" unless color[/^#[0-9A-F]{6}/]
21
22
 
22
23
  color
23
24
  end