apexcharts 0.1.6 → 0.1.7

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 (59) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +248 -52
  3. data/lib/apexcharts.rb +2 -1
  4. data/lib/apexcharts/charts.rb +11 -18
  5. data/lib/apexcharts/charts/base.rb +19 -18
  6. data/lib/apexcharts/charts/bubble.rb +2 -8
  7. data/lib/apexcharts/charts/cartesian.rb +30 -29
  8. data/lib/apexcharts/charts/donut.rb +0 -1
  9. data/lib/apexcharts/charts/features/annotations.rb +16 -17
  10. data/lib/apexcharts/charts/features/mixable.rb +1 -2
  11. data/lib/apexcharts/charts/heatmap.rb +2 -4
  12. data/lib/apexcharts/charts/mixed.rb +42 -32
  13. data/lib/apexcharts/charts/pie.rb +0 -1
  14. data/lib/apexcharts/charts/polar.rb +2 -9
  15. data/lib/apexcharts/charts/radar.rb +2 -4
  16. data/lib/apexcharts/charts/radial_bar.rb +0 -1
  17. data/lib/apexcharts/charts/syncing.rb +39 -25
  18. data/lib/apexcharts/colors.rb +4 -6
  19. data/lib/apexcharts/config.rb +25 -0
  20. data/lib/apexcharts/config/default_options.rb +12 -0
  21. data/lib/apexcharts/helper.rb +151 -87
  22. data/lib/apexcharts/options/annotations.rb +5 -5
  23. data/lib/apexcharts/options/axis.rb +12 -12
  24. data/lib/apexcharts/options/chart.rb +21 -21
  25. data/lib/apexcharts/options/data_labels.rb +9 -7
  26. data/lib/apexcharts/options/div_attributes.rb +4 -5
  27. data/lib/apexcharts/options/fill.rb +7 -7
  28. data/lib/apexcharts/options/grid.rb +10 -10
  29. data/lib/apexcharts/options/legend.rb +22 -19
  30. data/lib/apexcharts/options/markers.rb +13 -13
  31. data/lib/apexcharts/options/no_data.rb +7 -7
  32. data/lib/apexcharts/options/plot_options.rb +7 -7
  33. data/lib/apexcharts/options/root.rb +30 -30
  34. data/lib/apexcharts/options/states.rb +4 -4
  35. data/lib/apexcharts/options/stroke.rb +7 -7
  36. data/lib/apexcharts/options/subtitle.rb +3 -1
  37. data/lib/apexcharts/options/theme.rb +3 -3
  38. data/lib/apexcharts/options/title.rb +8 -8
  39. data/lib/apexcharts/options/tooltip.rb +17 -17
  40. data/lib/apexcharts/options/x_axis.rb +5 -5
  41. data/lib/apexcharts/options/y_axis.rb +8 -8
  42. data/lib/apexcharts/options_builder.rb +49 -60
  43. data/lib/apexcharts/prefix_with_apex.rb +5 -0
  44. data/lib/apexcharts/prefixer.rb +19 -0
  45. data/lib/apexcharts/renderer.rb +64 -17
  46. data/lib/apexcharts/series.rb +5 -3
  47. data/lib/apexcharts/series/bubble.rb +33 -22
  48. data/lib/apexcharts/series/cartesian.rb +63 -49
  49. data/lib/apexcharts/series/polar.rb +31 -17
  50. data/lib/apexcharts/support/rails.rb +1 -1
  51. data/lib/apexcharts/support/sinatra.rb +9 -0
  52. data/lib/apexcharts/theme.rb +5 -6
  53. data/lib/apexcharts/utils.rb +1 -0
  54. data/lib/apexcharts/utils/copy.rb +9 -0
  55. data/lib/apexcharts/utils/date_time.rb +50 -44
  56. data/lib/apexcharts/utils/hash.rb +2 -3
  57. data/lib/apexcharts/version.rb +1 -1
  58. data/vendor/assets/javascripts/apexcharts.js +2 -2
  59. metadata +27 -7
@@ -1,10 +1,9 @@
1
1
  module ApexCharts
2
2
  class DivAttributes < ::SmartKv
3
3
  optional *%i[
4
- class
5
- id
6
- style
7
- ]
4
+ class
5
+ id
6
+ style
7
+ ]
8
8
  end
9
9
  end
10
-
@@ -1,12 +1,12 @@
1
1
  module ApexCharts
2
2
  class FillOptions < ::SmartKv
3
3
  optional *%i[
4
- colors
5
- gradient
6
- image
7
- opacity
8
- pattern
9
- type
10
- ]
4
+ colors
5
+ gradient
6
+ image
7
+ opacity
8
+ pattern
9
+ type
10
+ ]
11
11
  end
12
12
  end
@@ -1,15 +1,15 @@
1
1
  module ApexCharts
2
2
  class GridOptions < ::SmartKv
3
3
  optional *%i[
4
- borderColor
5
- column
6
- padding
7
- position
8
- row
9
- show
10
- strokeDashArray
11
- xaxis
12
- yaxis
13
- ]
4
+ borderColor
5
+ column
6
+ padding
7
+ position
8
+ row
9
+ show
10
+ strokeDashArray
11
+ xaxis
12
+ yaxis
13
+ ]
14
14
  end
15
15
  end
@@ -1,24 +1,27 @@
1
1
  module ApexCharts
2
2
  class LegendOptions < ::SmartKv
3
3
  optional *%i[
4
- containerMargin
5
- floating
6
- fontFamily
7
- fontSize
8
- formatter
9
- horizontalAlign
10
- itemMargin
11
- labels
12
- markers
13
- offsetX
14
- offsetY
15
- onItemClick
16
- onItemHover
17
- position
18
- show
19
- showForSingleSeries
20
- textAnchor
21
- verticalAlign
22
- ]
4
+ containerMargin
5
+ floating
6
+ fontFamily
7
+ fontSize
8
+ formatter
9
+ height
10
+ horizontalAlign
11
+ itemMargin
12
+ labels
13
+ markers
14
+ offsetX
15
+ offsetY
16
+ onItemClick
17
+ onItemHover
18
+ position
19
+ show
20
+ showForNullSeries
21
+ showForSingleSeries
22
+ showForZeroSeries
23
+ textAnchor
24
+ width
25
+ ]
23
26
  end
24
27
  end
@@ -1,18 +1,18 @@
1
1
  module ApexCharts
2
2
  class MarkersOptions < ::SmartKv
3
3
  optional *%i[
4
- colors
5
- discrete
6
- fillOpacity
7
- hover
8
- offsetX
9
- offsetY
10
- radius
11
- shape
12
- size
13
- strokeColor
14
- strokeOpacity
15
- strokeWidth
16
- ]
4
+ colors
5
+ discrete
6
+ fillOpacity
7
+ hover
8
+ offsetX
9
+ offsetY
10
+ radius
11
+ shape
12
+ size
13
+ strokeColor
14
+ strokeOpacity
15
+ strokeWidth
16
+ ]
17
17
  end
18
18
  end
@@ -1,12 +1,12 @@
1
1
  module ApexCharts
2
2
  class NoDataOptions < ::SmartKv
3
3
  optional *%i[
4
- align
5
- offsetX
6
- offsetY
7
- style
8
- text
9
- verticalAlign
10
- ]
4
+ align
5
+ offsetX
6
+ offsetY
7
+ style
8
+ text
9
+ verticalAlign
10
+ ]
11
11
  end
12
12
  end
@@ -1,12 +1,12 @@
1
1
  module ApexCharts
2
2
  class PlotOptions < ::SmartKv
3
3
  optional *%i[
4
- bar
5
- candlestick
6
- heatmap
7
- pie
8
- radar
9
- radialBar
10
- ]
4
+ bar
5
+ candlestick
6
+ heatmap
7
+ pie
8
+ radar
9
+ radialBar
10
+ ]
11
11
  end
12
12
  end
@@ -6,36 +6,36 @@ require_relative 'states'
6
6
  module ApexCharts
7
7
  class RootOptions < ::SmartKv
8
8
  optional *%i[
9
- annotations
10
- brushTarget
11
- chart
12
- chartId
13
- colors
14
- dataLabels
15
- fill
16
- grid
17
- group
18
- labels
19
- legend
20
- markers
21
- noData
22
- plotOptions
23
- responsive
24
- series
25
- states
26
- stroke
27
- subtitle
28
- theme
29
- title
30
- tooltip
31
- var
32
- xaxis
33
- xtitle
34
- xtype
35
- yaxis
36
- ytitle
37
- ytype
38
- ],
9
+ annotations
10
+ brushTarget
11
+ chart
12
+ chartId
13
+ colors
14
+ dataLabels
15
+ fill
16
+ grid
17
+ group
18
+ labels
19
+ legend
20
+ markers
21
+ noData
22
+ plotOptions
23
+ responsive
24
+ series
25
+ states
26
+ stroke
27
+ subtitle
28
+ theme
29
+ title
30
+ tooltip
31
+ var
32
+ xaxis
33
+ xtitle
34
+ xtype
35
+ yaxis
36
+ ytitle
37
+ ytype
38
+ ],
39
39
  *DivAttributes.optional_keys,
40
40
  *ChartOptions.optional_keys,
41
41
  *StrokeOptions.optional_keys,
@@ -1,9 +1,9 @@
1
1
  module ApexCharts
2
2
  class StatesOptions < ::SmartKv
3
3
  optional *%i[
4
- active
5
- hover
6
- normal
7
- ]
4
+ active
5
+ hover
6
+ normal
7
+ ]
8
8
  end
9
9
  end
@@ -1,12 +1,12 @@
1
1
  module ApexCharts
2
2
  class StrokeOptions < ::SmartKv
3
3
  optional *%i[
4
- colors
5
- curve
6
- dashArray
7
- lineCap
8
- show
9
- width
10
- ]
4
+ colors
5
+ curve
6
+ dashArray
7
+ lineCap
8
+ show
9
+ width
10
+ ]
11
11
  end
12
12
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require_relative 'title'
2
4
 
3
5
  module ApexCharts
4
6
  class SubtitleOptions < TitleOptions
5
- optional *%i[ ]
7
+ optional
6
8
  end
7
9
  end
@@ -1,8 +1,8 @@
1
1
  module ApexCharts
2
2
  class ThemeOptions < ::SmartKv
3
3
  optional *%i[
4
- monochrome
5
- palette
6
- ]
4
+ monochrome
5
+ palette
6
+ ]
7
7
  end
8
8
  end
@@ -1,13 +1,13 @@
1
1
  module ApexCharts
2
2
  class TitleOptions < ::SmartKv
3
3
  optional *%i[
4
- align
5
- floating
6
- margin
7
- offsetX
8
- offsetY
9
- style
10
- text
11
- ]
4
+ align
5
+ floating
6
+ margin
7
+ offsetX
8
+ offsetY
9
+ style
10
+ text
11
+ ]
12
12
  end
13
13
  end
@@ -1,22 +1,22 @@
1
1
  module ApexCharts
2
2
  class TooltipOptions < ::SmartKv
3
3
  optional *%i[
4
- custom
5
- enabled
6
- fillSeriesColor
7
- fixed
8
- followCursor
9
- intersect
10
- inverseOrder
11
- items
12
- marker
13
- onDatasetHover
14
- shared
15
- style
16
- theme
17
- x
18
- y
19
- z
20
- ]
4
+ custom
5
+ enabled
6
+ fillSeriesColor
7
+ fixed
8
+ followCursor
9
+ intersect
10
+ inverseOrder
11
+ items
12
+ marker
13
+ onDatasetHover
14
+ shared
15
+ style
16
+ theme
17
+ x
18
+ y
19
+ z
20
+ ]
21
21
  end
22
22
  end
@@ -3,10 +3,10 @@ require_relative 'axis'
3
3
  module ApexCharts
4
4
  class XAxisOptions < AxisOptions
5
5
  optional *%i[
6
- categories
7
- position
8
- range
9
- tickPlacement
10
- ]
6
+ categories
7
+ position
8
+ range
9
+ tickPlacement
10
+ ]
11
11
  end
12
12
  end
@@ -3,13 +3,13 @@ require_relative 'axis'
3
3
  module ApexCharts
4
4
  class YAxisOptions < AxisOptions
5
5
  optional *%i[
6
- decimalsInFloat
7
- forceNiceScale
8
- logarithmic
9
- opposite
10
- seriesName
11
- show
12
- showAlways
13
- ]
6
+ decimalsInFloat
7
+ forceNiceScale
8
+ logarithmic
9
+ opposite
10
+ seriesName
11
+ show
12
+ showAlways
13
+ ]
14
14
  end
15
15
  end
@@ -19,14 +19,17 @@ require_relative 'options/y_axis'
19
19
 
20
20
  module ApexCharts
21
21
  class OptionsBuilder
22
+ include Utils::Hash
23
+ include Utils::DateTime
24
+
22
25
  attr_reader :built
23
26
 
24
- def initialize(x_sample, options)
25
- @options = Utils::Hash.camelize_keys(options)
27
+ def initialize(sample, options)
28
+ @options = camelize_keys(options)
26
29
  if options[:plotOptions]&.[](:bar)&.[](:horizontal)
27
- @ytype = Utils::DateTime.type(x_sample)
30
+ @ytype = type(sample)
28
31
  else
29
- @xtype = Utils::DateTime.type(x_sample)
32
+ @xtype = type(sample)
30
33
  end
31
34
  @built = {}
32
35
  end
@@ -36,6 +39,10 @@ module ApexCharts
36
39
 
37
40
  build_chart
38
41
  build_div
42
+ build_general_options
43
+ end
44
+
45
+ def build_general_options
39
46
  build_annotations
40
47
  build_colors
41
48
  build_data_labels
@@ -69,25 +76,18 @@ module ApexCharts
69
76
 
70
77
  def build_annotations
71
78
  annotations = @options.delete :annotations
72
- @built[:annotations] = if annotations.is_a? Hash
73
- AnnotationsOptions.check annotations.compact
74
- end
79
+ @built[:annotations] = (
80
+ AnnotationsOptions.check annotations.compact if annotations.is_a? Hash
81
+ )
75
82
  end
76
83
 
77
84
  def build_chart
78
- @built[:chart] = if target = @options.delete(:brushTarget)
79
- {
80
- brush: {
81
- enabled: true,
82
- target: target.to_s
83
- },
84
- selection: {
85
- enabled: true
86
- }
87
- }
88
- else
89
- {}
90
- end
85
+ @built[:chart] =
86
+ if target = @options.delete(:brushTarget)
87
+ {brush: {enabled: true, target: target.to_s}, selection: {enabled: true}}
88
+ else
89
+ {}
90
+ end
91
91
 
92
92
  @built[:chart].merge!({
93
93
  id: @options[:chartId] || @options[:id],
@@ -102,9 +102,10 @@ module ApexCharts
102
102
  }.compact)
103
103
 
104
104
  chart = @options.delete :chart
105
- if chart.is_a? Hash
106
- @built[:chart].merge! ChartOptions.check(chart.compact)
107
- end
105
+
106
+ return unless chart.is_a? Hash
107
+
108
+ @built[:chart].merge! ChartOptions.check(chart.compact)
108
109
  end
109
110
 
110
111
  def build_colors
@@ -116,11 +117,12 @@ module ApexCharts
116
117
  def build_data_labels
117
118
  data_labels = @options.delete :dataLabels
118
119
  return if data_labels.nil?
120
+
119
121
  @built[:dataLabels] = if [true, false].include? data_labels
120
- {enabled: data_labels}
121
- elsif data_labels.is_a? Hash
122
- DataLabelsOptions.check data_labels.compact
123
- end
122
+ {enabled: data_labels}
123
+ elsif data_labels.is_a? Hash
124
+ DataLabelsOptions.check data_labels.compact
125
+ end
124
126
  end
125
127
 
126
128
  def build_fill
@@ -170,17 +172,15 @@ module ApexCharts
170
172
  def build_no_data
171
173
  no_data = @options.delete :noData
172
174
  @built[:noData] = if no_data.is_a? String
173
- {text: no_data}
174
- elsif no_data.is_a? Hash
175
- NoDataOptions.check no_data.compact
176
- end
175
+ {text: no_data}
176
+ elsif no_data.is_a? Hash
177
+ NoDataOptions.check no_data.compact
178
+ end
177
179
  end
178
180
 
179
181
  def build_plot_options
180
182
  plot_options = @options.delete :plotOptions
181
- @built[:plotOptions] = if plot_options.is_a? Hash
182
- PlotOptions.check plot_options.compact
183
- end
183
+ @built[:plotOptions] = (PlotOptions.check plot_options.compact if plot_options.is_a? Hash)
184
184
  end
185
185
 
186
186
  def build_responsive
@@ -191,15 +191,13 @@ module ApexCharts
191
191
 
192
192
  def build_states
193
193
  @built[:states] = {
194
- normal: filter_type_hash(@options.delete :normal),
195
- hover: filter_type_hash(@options.delete :hover),
196
- active: filter_type_hash(@options.delete :active)
194
+ normal: filter_type_hash(@options.delete(:normal)),
195
+ hover: filter_type_hash(@options.delete(:hover)),
196
+ active: filter_type_hash(@options.delete(:active))
197
197
  }.compact
198
198
 
199
199
  states = @options.delete :states
200
- if states.is_a? Hash
201
- @built[:states].merge! StatesOptions.check(states.compact)
202
- end
200
+ @built[:states].merge! StatesOptions.check(states.compact) if states.is_a? Hash
203
201
 
204
202
  @built[:states] = nil if @built[:states].empty?
205
203
  end
@@ -210,7 +208,7 @@ module ApexCharts
210
208
 
211
209
  stroke = @options.delete :stroke
212
210
  if [true, false].include? stroke
213
- @built[:stroke].merge!({show: stroke})
211
+ @built[:stroke].merge!(show: stroke)
214
212
  elsif stroke.is_a? Hash
215
213
  @built[:stroke].merge! StrokeOptions.check(stroke.compact)
216
214
  end
@@ -264,14 +262,12 @@ module ApexCharts
264
262
  def build_xaxis
265
263
  xaxis = @options.delete :xaxis
266
264
  @built[:xaxis] = {
267
- type: @options.delete(:xtype){ @xtype },
265
+ type: @options.delete(:xtype) { @xtype },
268
266
  title: {
269
267
  text: @options.delete(:xtitle)
270
268
  }.compact
271
269
  }.compact
272
- if @built[:xaxis][:title].empty?
273
- @built[:xaxis].delete(:title)
274
- end
270
+ @built[:xaxis].delete(:title) if @built[:xaxis][:title].empty?
275
271
 
276
272
  if xaxis.is_a? String
277
273
  @built[:xaxis][:title] = {text: xaxis}
@@ -279,19 +275,19 @@ module ApexCharts
279
275
  XAxisOptions.check xaxis
280
276
  @built[:xaxis].merge! xaxis
281
277
  end
278
+
279
+ @built[:xaxis] = nil if @built[:xaxis].empty?
282
280
  end
283
281
 
284
282
  def build_yaxis
285
283
  yaxis = @options.delete :yaxis
286
284
  @built[:yaxis] = [{
287
- type: @options.delete(:ytype){ @ytype },
285
+ type: @options.delete(:ytype) { @ytype },
288
286
  title: {
289
287
  text: @options.delete(:ytitle)
290
288
  }.compact
291
289
  }.compact]
292
- if @built[:yaxis][0][:title].empty?
293
- @built[:yaxis][0].delete(:title)
294
- end
290
+ @built[:yaxis][0].delete(:title) if @built[:yaxis][0][:title].empty?
295
291
 
296
292
  if yaxis.is_a? String
297
293
  @built[:yaxis][0][:title] = {text: yaxis}
@@ -299,26 +295,19 @@ module ApexCharts
299
295
  YAxisOptions.check yaxis
300
296
  @built[:yaxis][0].merge! yaxis
301
297
  end
302
- end
303
298
 
304
- def type(x)
305
- if DateTime.iso8601(x).iso8601 == x
306
- 'datetime'
307
- elsif Date.iso8601(x).iso8601 = x
308
- 'datetime'
309
- end
310
- rescue
311
- 'numeric'
299
+ @built[:yaxis] = nil if @built[:yaxis].all?(&:empty?)
312
300
  end
313
301
 
314
302
  def enabled(options)
315
- boolean_to_hash(options) do |options|
316
- {enabled: options}
303
+ boolean_to_hash(options) do |opts|
304
+ {enabled: opts}
317
305
  end
318
306
  end
319
307
 
320
308
  def boolean_to_hash(options)
321
309
  return if options.nil?
310
+
322
311
  if [true, false].include? options
323
312
  yield(options)
324
313
  elsif options.is_a?(Hash)