apexcharts 0.1.10 → 0.1.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +89 -33
  3. data/lib/apex_charts/charts.rb +1 -0
  4. data/lib/apex_charts/charts/box_plot_chart.rb +8 -0
  5. data/lib/apex_charts/config/schema.rb +20 -0
  6. data/lib/apex_charts/configuration.rb +2 -0
  7. data/lib/apex_charts/helper.rb +9 -11
  8. data/lib/apex_charts/options/default/annotations_options.rb +14 -0
  9. data/lib/apex_charts/options/default/chart_options.rb +33 -0
  10. data/lib/apex_charts/options/default/data_labels_options.rb +18 -0
  11. data/lib/apex_charts/options/default/fill_options.rb +14 -0
  12. data/lib/apex_charts/options/default/grid_options.rb +17 -0
  13. data/lib/apex_charts/options/default/helper_options.rb +22 -0
  14. data/lib/apex_charts/options/default/legend_options.rb +33 -0
  15. data/lib/apex_charts/options/default/markers_options.rb +26 -0
  16. data/lib/apex_charts/options/default/no_data_options.rb +14 -0
  17. data/lib/apex_charts/options/default/plot_options.rb +19 -0
  18. data/lib/apex_charts/options/default/root_options.rb +38 -0
  19. data/lib/apex_charts/options/default/states_options.rb +11 -0
  20. data/lib/apex_charts/options/default/stroke_options.rb +14 -0
  21. data/lib/apex_charts/options/default/theme_options.rb +11 -0
  22. data/lib/apex_charts/options/default/title_subtitle_options.rb +15 -0
  23. data/lib/apex_charts/options/default/tooltip_options.rb +25 -0
  24. data/lib/apex_charts/options/default/x_axis_options.rb +27 -0
  25. data/lib/apex_charts/options/default/y_axis_options.rb +28 -0
  26. data/lib/apex_charts/options/dry_schema/annotations_options.rb +22 -0
  27. data/lib/apex_charts/options/dry_schema/annotations_options/annotation_label.rb +24 -0
  28. data/lib/apex_charts/options/dry_schema/annotations_options/image_annotations.rb +15 -0
  29. data/lib/apex_charts/options/dry_schema/annotations_options/point_annotations.rb +33 -0
  30. data/lib/apex_charts/options/dry_schema/annotations_options/text_annotations.rb +26 -0
  31. data/lib/apex_charts/options/dry_schema/annotations_options/x_axis_annotations.rb +20 -0
  32. data/lib/apex_charts/options/dry_schema/annotations_options/y_axis_annotations.rb +21 -0
  33. data/lib/apex_charts/options/dry_schema/chart_options.rb +35 -0
  34. data/lib/apex_charts/options/dry_schema/data_labels_options.rb +37 -0
  35. data/lib/apex_charts/options/dry_schema/fill_options.rb +34 -0
  36. data/lib/apex_charts/options/dry_schema/general_schema/drop_shadow.rb +14 -0
  37. data/lib/apex_charts/options/dry_schema/general_schema/function.rb +12 -0
  38. data/lib/apex_charts/options/dry_schema/grid_options.rb +19 -0
  39. data/lib/apex_charts/options/dry_schema/helper_options.rb +22 -0
  40. data/lib/apex_charts/options/dry_schema/legend_options.rb +61 -0
  41. data/lib/apex_charts/options/dry_schema/markers_options.rb +34 -0
  42. data/lib/apex_charts/options/dry_schema/markers_options/discrete_point.rb +13 -0
  43. data/lib/apex_charts/options/dry_schema/no_data_options.rb +16 -0
  44. data/lib/apex_charts/options/dry_schema/plot_options.rb +231 -0
  45. data/lib/apex_charts/options/dry_schema/root_options.rb +42 -0
  46. data/lib/apex_charts/options/dry_schema/schema.rb +32 -0
  47. data/lib/apex_charts/options/dry_schema/states_options.rb +22 -0
  48. data/lib/apex_charts/options/dry_schema/states_options/filter.rb +10 -0
  49. data/lib/apex_charts/options/dry_schema/stroke_options.rb +21 -0
  50. data/lib/apex_charts/options/dry_schema/theme_options.rb +18 -0
  51. data/lib/apex_charts/options/dry_schema/title_subtitle_options.rb +22 -0
  52. data/lib/apex_charts/options/dry_schema/tooltip_options.rb +27 -0
  53. data/lib/apex_charts/options/dry_schema/x_axis_options.rb +30 -0
  54. data/lib/apex_charts/options/dry_schema/y_axis_options.rb +30 -0
  55. data/lib/apex_charts/options_builder.rb +51 -38
  56. data/lib/apex_charts/theme.rb +0 -16
  57. data/lib/apex_charts/version.rb +2 -2
  58. data/vendor/assets/javascripts/apexcharts.js +5 -5
  59. metadata +58 -27
  60. data/lib/apex_charts/options/annotations_options.rb +0 -15
  61. data/lib/apex_charts/options/chart_options.rb +0 -32
  62. data/lib/apex_charts/options/data_labels_options.rb +0 -18
  63. data/lib/apex_charts/options/div_attributes.rb +0 -11
  64. data/lib/apex_charts/options/fill_options.rb +0 -14
  65. data/lib/apex_charts/options/grid_options.rb +0 -17
  66. data/lib/apex_charts/options/legend_options.rb +0 -32
  67. data/lib/apex_charts/options/markers_options.rb +0 -24
  68. data/lib/apex_charts/options/no_data_options.rb +0 -14
  69. data/lib/apex_charts/options/plot_options.rb +0 -16
  70. data/lib/apex_charts/options/root_options.rb +0 -47
  71. data/lib/apex_charts/options/states_options.rb +0 -11
  72. data/lib/apex_charts/options/stroke_options.rb +0 -14
  73. data/lib/apex_charts/options/theme_options.rb +0 -11
  74. data/lib/apex_charts/options/title_subtitle_options.rb +0 -15
  75. data/lib/apex_charts/options/tooltip_options.rb +0 -25
  76. data/lib/apex_charts/options/x_axis_options.rb +0 -26
  77. data/lib/apex_charts/options/y_axis_options.rb +0 -28
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'schema'
4
+ require_relative 'helper_options'
5
+ require_relative 'chart_options'
6
+ require_relative 'stroke_options'
7
+ require_relative 'states_options'
8
+
9
+ module ApexCharts::Options
10
+ module DrySchema
11
+ class RootOptions < Schema
12
+ define do
13
+ optional(:annotations)
14
+ optional(:chart)
15
+ optional(:colors)
16
+ optional(:dataLabels)
17
+ optional(:fill)
18
+ optional(:grid)
19
+ optional(:labels)
20
+ optional(:legend)
21
+ optional(:markers)
22
+ optional(:noData)
23
+ optional(:plotOptions)
24
+ optional(:responsive)
25
+ optional(:series)
26
+ optional(:states)
27
+ optional(:stroke)
28
+ optional(:subtitle)
29
+ optional(:theme)
30
+ optional(:title)
31
+ optional(:tooltip)
32
+ optional(:xaxis)
33
+ optional(:yaxis)
34
+
35
+ (HelperOptions.keys + ChartOptions.keys +
36
+ StrokeOptions.keys + StatesOptions.keys).each do |key|
37
+ optional(key)
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -0,0 +1,32 @@
1
+ require 'dry/schema'
2
+
3
+ Dry::Schema.config.validate_keys = true
4
+
5
+ module ApexCharts::Options
6
+ module DrySchema
7
+ class Schema < ::Dry::Schema::Params
8
+ class << self
9
+ def check(hash)
10
+ return hash if production?
11
+
12
+ schema = new[hash]
13
+ if schema.failure?
14
+ raise schema.errors.to_h.inspect
15
+ else
16
+ hash
17
+ end
18
+ end
19
+
20
+ def keys
21
+ definition.send(:key_map).map{|key| key.name.to_sym }
22
+ end
23
+
24
+ private
25
+
26
+ def production?
27
+ (ENV['APP_ENV'] || ENV['RAILS_ENV'] || ENV['RACK_ENV']) == "production"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ require_relative 'states_options/filter'
4
+
5
+ module ApexCharts::Options
6
+ module DrySchema
7
+ class StatesOptions < Schema
8
+ define do
9
+ optional(:active).hash do
10
+ optional(:allowMultipleDataPointsSelection) { bool? }
11
+ optional(:filter).hash(Filter)
12
+ end
13
+ optional(:hover).hash do
14
+ optional(:filter).hash(Filter)
15
+ end
16
+ optional(:normal).hash do
17
+ optional(:filter).hash(Filter)
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Options
4
+ module DrySchema
5
+ Filter = ::Dry::Schema.Params do
6
+ optional(:type) { str? }
7
+ optional(:value) { int? | float? }
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,21 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Options
4
+ module DrySchema
5
+ class StrokeOptions < Schema
6
+ define do
7
+ optional(:colors) { array? & each { str? } }
8
+ optional(:curve) {
9
+ included_in?(%w[smooth straight stepline]) |
10
+ (array? & each {
11
+ included_in? %w[smooth straight stepline]
12
+ })
13
+ }
14
+ optional(:dashArray) { int? | float? | (array? & each { int? | float? }) }
15
+ optional(:lineCap) { included_in? %w[butt square round] }
16
+ optional(:show) { bool? }
17
+ optional(:width) { int? | float? | (array? & each { int? | float? }) }
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,18 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Options
4
+ module DrySchema
5
+ class ThemeOptions < Schema
6
+ define do
7
+ optional(:mode).value(included_in?: %w[light dark])
8
+ optional(:monochrome).hash do
9
+ optional(:enabled) { bool? }
10
+ optional(:color) { str? }
11
+ optional(:shadeTo).value(included_in?: %w[light dark])
12
+ optional(:shadeIntensity) { int? | float? }
13
+ end
14
+ optional(:palette) { str? }
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,22 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Options
4
+ module DrySchema
5
+ class TitleSubtitleOptions < Schema
6
+ define do
7
+ optional(:align) { included_in? %w[left center right] }
8
+ optional(:floating) { bool? }
9
+ optional(:margin) { int? | float? }
10
+ optional(:offsetX) { int? | float? }
11
+ optional(:offsetY) { int? | float? }
12
+ optional(:style).hash do
13
+ optional(:color) { str? }
14
+ optional(:fontFamily) { str? }
15
+ optional(:fontSize) { str? }
16
+ optional(:fontWeight) { str? | int? | float? }
17
+ end
18
+ optional(:text) { str? }
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,27 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Options
4
+ module DrySchema
5
+ class TooltipOptions < Schema
6
+ define do
7
+ optional(:custom)
8
+ optional(:enabled)
9
+ optional(:enabledOnSeries)
10
+ optional(:fillSeriesColor)
11
+ optional(:fixed)
12
+ optional(:followCursor)
13
+ optional(:intersect)
14
+ optional(:inverseOrder)
15
+ optional(:items)
16
+ optional(:marker)
17
+ optional(:onDatasetHover)
18
+ optional(:shared)
19
+ optional(:style)
20
+ optional(:theme)
21
+ optional(:x)
22
+ optional(:y)
23
+ optional(:z)
24
+ end
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Options
4
+ module DrySchema
5
+ class XAxisOptions < Schema
6
+ define do
7
+ optional(:axisBorder)
8
+ optional(:axisTicks)
9
+ optional(:categories)
10
+ optional(:overwriteCategories)
11
+ optional(:crosshairs)
12
+ optional(:floating)
13
+ optional(:decimalsInFloat)
14
+ optional(:labels)
15
+ optional(:max)
16
+ optional(:min)
17
+ optional(:position)
18
+ optional(:range)
19
+ optional(:tickAmount)
20
+ optional(:tickPlacement)
21
+ optional(:title)
22
+ optional(:tooltip)
23
+ optional(:type)
24
+ optional(:offsetX)
25
+ optional(:offsetY)
26
+ optional(:sorted)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module ApexCharts::Options
4
+ module DrySchema
5
+ class YAxisOptions < Schema
6
+ define do
7
+ optional(:axisBorder)
8
+ optional(:axisTicks)
9
+ optional(:crosshairs)
10
+ optional(:decimalsInFloat)
11
+ optional(:floating)
12
+ optional(:forceNiceScale)
13
+ optional(:labels)
14
+ optional(:logarithmic)
15
+ optional(:max)
16
+ optional(:min)
17
+ optional(:opposite)
18
+ optional(:reversed)
19
+ optional(:seriesName)
20
+ optional(:show)
21
+ optional(:showAlways)
22
+ optional(:showForNullSeries)
23
+ optional(:tickAmount)
24
+ optional(:title)
25
+ optional(:tooltip)
26
+ optional(:type)
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,21 +1,22 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'smart_kv'
4
- require_relative 'options/root_options'
5
- require_relative 'options/annotations_options'
6
- require_relative 'options/data_labels_options'
7
- require_relative 'options/fill_options'
8
- require_relative 'options/grid_options'
9
- require_relative 'options/legend_options'
10
- require_relative 'options/markers_options'
11
- require_relative 'options/no_data_options'
12
- require_relative 'options/plot_options'
13
- require_relative 'options/states_options'
14
- require_relative 'options/title_subtitle_options'
15
- require_relative 'options/theme_options'
16
- require_relative 'options/tooltip_options'
17
- require_relative 'options/x_axis_options'
18
- require_relative 'options/y_axis_options'
3
+ %w(default dry_schema).each do |schema_dir|
4
+ require_relative "options/#{schema_dir}/root_options"
5
+ require_relative "options/#{schema_dir}/annotations_options"
6
+ require_relative "options/#{schema_dir}/data_labels_options"
7
+ require_relative "options/#{schema_dir}/fill_options"
8
+ require_relative "options/#{schema_dir}/grid_options"
9
+ require_relative "options/#{schema_dir}/legend_options"
10
+ require_relative "options/#{schema_dir}/markers_options"
11
+ require_relative "options/#{schema_dir}/no_data_options"
12
+ require_relative "options/#{schema_dir}/plot_options"
13
+ require_relative "options/#{schema_dir}/states_options"
14
+ require_relative "options/#{schema_dir}/title_subtitle_options"
15
+ require_relative "options/#{schema_dir}/theme_options"
16
+ require_relative "options/#{schema_dir}/tooltip_options"
17
+ require_relative "options/#{schema_dir}/x_axis_options"
18
+ require_relative "options/#{schema_dir}/y_axis_options"
19
+ end
19
20
 
20
21
  module ApexCharts
21
22
  class OptionsBuilder
@@ -35,7 +36,7 @@ module ApexCharts
35
36
  end
36
37
 
37
38
  def build_options
38
- Options::RootOptions.check @options
39
+ options_class(:Root).check @options
39
40
 
40
41
  build_chart
41
42
  build_div
@@ -78,14 +79,19 @@ module ApexCharts
78
79
  def build_annotations
79
80
  annotations = @options.delete :annotations
80
81
  @built[:annotations] = (
81
- Options::AnnotationsOptions.check annotations.compact if annotations.is_a? Hash
82
+ if annotations.is_a? Hash
83
+ options_class(:Annotations).check annotations.compact
84
+ end
82
85
  )
83
86
  end
84
87
 
85
88
  def build_chart
86
89
  @built[:chart] =
87
90
  if target = @options.delete(:brushTarget)
88
- {brush: {enabled: true, target: target.to_s}, selection: {enabled: true}}
91
+ {
92
+ brush: {enabled: true, target: target.to_s},
93
+ selection: {enabled: true}
94
+ }
89
95
  else
90
96
  {}
91
97
  end
@@ -106,7 +112,7 @@ module ApexCharts
106
112
 
107
113
  return unless chart.is_a? Hash
108
114
 
109
- @built[:chart].merge! Options::ChartOptions.check(chart.compact)
115
+ @built[:chart].merge! options_class(:Chart).check(chart.compact)
110
116
  end
111
117
 
112
118
  def build_colors
@@ -122,7 +128,7 @@ module ApexCharts
122
128
  @built[:dataLabels] = if [true, false].include? data_labels
123
129
  {enabled: data_labels}
124
130
  elsif data_labels.is_a? Hash
125
- Options::DataLabelsOptions.check data_labels.compact
131
+ options_class(:DataLabels).check data_labels.compact
126
132
  end
127
133
  end
128
134
 
@@ -137,7 +143,7 @@ module ApexCharts
137
143
  @built[:fill] = if fill.is_a? String
138
144
  {type: fill}
139
145
  elsif fill.is_a? Hash
140
- Options::FillOptions.check fill.compact
146
+ options_class(:Fill).check fill.compact
141
147
  end
142
148
  end
143
149
 
@@ -146,7 +152,7 @@ module ApexCharts
146
152
  @built[:grid] = if [true, false].include? grid
147
153
  {show: grid}
148
154
  elsif grid.is_a? Hash
149
- Options::GridOptions.check grid.compact
155
+ options_class(:Grid).check grid.compact
150
156
  end
151
157
  end
152
158
 
@@ -163,7 +169,7 @@ module ApexCharts
163
169
  elsif legend.is_a? String
164
170
  {show: true, position: legend}
165
171
  elsif legend.is_a? Hash
166
- Options::LegendOptions.check legend.compact
172
+ options_class(:Legend).check legend.compact
167
173
  end
168
174
  end
169
175
 
@@ -172,7 +178,7 @@ module ApexCharts
172
178
  @built[:markers] = if markers.is_a? String
173
179
  {shape: markers}
174
180
  elsif markers.is_a? Hash
175
- Options::MarkersOptions.check markers.compact
181
+ options_class(:Markers).check markers.compact
176
182
  end
177
183
  end
178
184
 
@@ -181,7 +187,7 @@ module ApexCharts
181
187
  @built[:noData] = if no_data.is_a? String
182
188
  {text: no_data}
183
189
  elsif no_data.is_a? Hash
184
- Options::NoDataOptions.check no_data.compact
190
+ options_class(:NoData).check no_data.compact
185
191
  end
186
192
  end
187
193
 
@@ -190,7 +196,7 @@ module ApexCharts
190
196
  return unless plot_options.is_a? Hash
191
197
 
192
198
  @built[:plotOptions] =
193
- Options::PlotOptions.check plot_options.compact
199
+ options_class(:Plot).check plot_options.compact
194
200
  end
195
201
 
196
202
  def build_responsive
@@ -207,7 +213,7 @@ module ApexCharts
207
213
  }.compact
208
214
 
209
215
  states = @options.delete :states
210
- @built[:states].merge! Options::StatesOptions.check(states.compact) if states.is_a? Hash
216
+ @built[:states].merge! options_class(:States).check(states.compact) if states.is_a? Hash
211
217
 
212
218
  @built[:states] = nil if @built[:states].empty?
213
219
  end
@@ -220,7 +226,7 @@ module ApexCharts
220
226
  if [true, false].include? stroke
221
227
  @built[:stroke].merge!(show: stroke)
222
228
  elsif stroke.is_a? Hash
223
- @built[:stroke].merge! Options::StrokeOptions.check(stroke.compact)
229
+ @built[:stroke].merge! options_class(:Stroke).check(stroke.compact)
224
230
  end
225
231
 
226
232
  @built[:stroke] = nil if @built[:stroke].empty?
@@ -231,7 +237,7 @@ module ApexCharts
231
237
  @built[:subtitle] = if subtitle.is_a? String
232
238
  {text: subtitle}
233
239
  elsif subtitle.is_a? Hash
234
- Options::TitleSubtitleOptions.check subtitle.compact
240
+ options_class(:TitleSubtitle).check subtitle.compact
235
241
  end
236
242
  end
237
243
 
@@ -240,14 +246,14 @@ module ApexCharts
240
246
  @built[:theme] = if theme.is_a? String
241
247
  case theme
242
248
  when 'random'
243
- resolve_theme(Theme::Local.all_palettes.sample)
249
+ resolve_theme(Theme.all_palettes.sample)
244
250
  when 'monochrome'
245
251
  {monochrome: {enabled: true}}
246
252
  else
247
253
  resolve_theme(theme)
248
254
  end
249
255
  elsif theme.is_a? Hash
250
- Options::ThemeOptions.check theme.compact
256
+ options_class(:Theme).check theme.compact
251
257
  end
252
258
  end
253
259
 
@@ -256,7 +262,7 @@ module ApexCharts
256
262
  @built[:title] = if title.is_a? String
257
263
  {text: title}
258
264
  elsif title.is_a? Hash
259
- Options::TitleSubtitleOptions.check title.compact
265
+ options_class(:TitleSubtitle).check title.compact
260
266
  end
261
267
  end
262
268
 
@@ -265,7 +271,7 @@ module ApexCharts
265
271
  @built[:tooltip] = if [true, false].include? tooltip
266
272
  {enabled: tooltip}
267
273
  elsif tooltip.is_a? Hash
268
- Options::TooltipOptions.check tooltip.compact
274
+ options_class(:Tooltip).check tooltip.compact
269
275
  end
270
276
  end
271
277
 
@@ -282,7 +288,7 @@ module ApexCharts
282
288
  if xaxis.is_a? String
283
289
  @built[:xaxis][:title] = {text: xaxis}
284
290
  elsif xaxis.is_a? Hash
285
- Options::XAxisOptions.check xaxis
291
+ options_class(:XAxis).check xaxis
286
292
  @built[:xaxis].merge! xaxis
287
293
  end
288
294
 
@@ -302,13 +308,15 @@ module ApexCharts
302
308
  if yaxis.is_a? String
303
309
  @built[:yaxis][0][:title] = {text: yaxis}
304
310
  elsif yaxis.is_a? Hash
305
- Options::YAxisOptions.check yaxis
311
+ options_class(:YAxis).check yaxis
306
312
  @built[:yaxis][0].merge! yaxis
307
313
  end
308
314
 
309
315
  @built[:yaxis] = nil if @built[:yaxis].all?(&:empty?)
310
316
  end
311
317
 
318
+ private
319
+
312
320
  def enabled(options)
313
321
  boolean_to_hash(options) do |opts|
314
322
  {enabled: opts}
@@ -336,10 +344,15 @@ module ApexCharts
336
344
  def resolve_theme(theme)
337
345
  if Theme::PALETTES.include? theme
338
346
  {palette: theme}
339
- elsif Theme::Local.palette_names.include? theme
340
- @built[:colors] = Theme::Local.get_colors(theme)
347
+ elsif Theme.palette_names.include? theme
348
+ @built[:colors] = Theme.get_colors(theme)
341
349
  nil
342
350
  end
343
351
  end
352
+
353
+ def options_class(name)
354
+ schema = ApexCharts.config.schema
355
+ ApexCharts.const_get "Options::#{schema}::#{name}Options"
356
+ end
344
357
  end
345
358
  end