trevl 0.1.0

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 (53) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE +21 -0
  3. data/NOTICE +9 -0
  4. data/README.md +431 -0
  5. data/Rakefile +10 -0
  6. data/assets/trendence-logo.svg +17 -0
  7. data/assets/trevl-logo.svg +20 -0
  8. data/docs/screenshots/01_bar_chart.png +0 -0
  9. data/docs/screenshots/02_column_chart.png +0 -0
  10. data/docs/screenshots/03_line_chart.png +0 -0
  11. data/docs/screenshots/04_pie_chart.png +0 -0
  12. data/docs/screenshots/05_computed_fields.png +0 -0
  13. data/docs/screenshots/06_postprocess_top_n.png +0 -0
  14. data/docs/screenshots/10_multi_series.png +0 -0
  15. data/examples/01_bar_chart.yml +16 -0
  16. data/examples/02_column_chart.yml +19 -0
  17. data/examples/03_line_chart.yml +21 -0
  18. data/examples/04_pie_chart.yml +15 -0
  19. data/examples/05_computed_fields.yml +26 -0
  20. data/examples/06_postprocess_top_n.yml +21 -0
  21. data/examples/07_score_kpi.yml +13 -0
  22. data/examples/08_table.yml +14 -0
  23. data/examples/09_template_inheritance.yml +25 -0
  24. data/examples/10_multi_series.yml +23 -0
  25. data/lib/trevl/auth/bearer_token.rb +23 -0
  26. data/lib/trevl/configuration.rb +24 -0
  27. data/lib/trevl/core_ext/hash.rb +37 -0
  28. data/lib/trevl/data_source/api.rb +86 -0
  29. data/lib/trevl/data_source/base.rb +19 -0
  30. data/lib/trevl/data_source/cube.rb +70 -0
  31. data/lib/trevl/data_source/static.rb +30 -0
  32. data/lib/trevl/data_source.rb +38 -0
  33. data/lib/trevl/errors.rb +9 -0
  34. data/lib/trevl/highcharts_asset.rb +45 -0
  35. data/lib/trevl/html_renderer.rb +91 -0
  36. data/lib/trevl/notebook/display.rb +53 -0
  37. data/lib/trevl/notebook.rb +41 -0
  38. data/lib/trevl/processor.rb +106 -0
  39. data/lib/trevl/renderer/data_fetcher.rb +63 -0
  40. data/lib/trevl/renderer/ref_parser.rb +61 -0
  41. data/lib/trevl/renderer/transform.rb +104 -0
  42. data/lib/trevl/renderer.rb +345 -0
  43. data/lib/trevl/schema/component.json +337 -0
  44. data/lib/trevl/schema/document.json +41 -0
  45. data/lib/trevl/template_store.rb +38 -0
  46. data/lib/trevl/validator.rb +96 -0
  47. data/lib/trevl/version.rb +5 -0
  48. data/lib/trevl.rb +99 -0
  49. data/llms.txt +171 -0
  50. data/notebooks/demo.ipynb +312 -0
  51. data/notebooks/exploration.ipynb +164 -0
  52. data/scripts/generate_screenshots.rb +107 -0
  53. metadata +137 -0
@@ -0,0 +1,107 @@
1
+ #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
3
+
4
+ # Generates PNG screenshots for all TREVL examples.
5
+ # Usage: ruby scripts/generate_screenshots.rb
6
+
7
+ $LOAD_PATH.unshift(File.expand_path("../lib", __dir__))
8
+ require "trevl"
9
+ require "grover"
10
+
11
+ OUTPUT_DIR = File.expand_path("../docs/screenshots", __dir__)
12
+
13
+ EXAMPLE_DATA = {
14
+ "01_bar_chart" => {
15
+ "pirates" => {"data" => [
16
+ {"name" => "Guybrush", "barrels" => 12},
17
+ {"name" => "LeChuck", "barrels" => 47},
18
+ {"name" => "Elaine", "barrels" => 3},
19
+ {"name" => "Stan", "barrels" => 28},
20
+ {"name" => "Murray", "barrels" => 0}
21
+ ]}
22
+ },
23
+ "02_column_chart" => {
24
+ "loot" => {"data" => [
25
+ {"quarter" => "Q1", "doubloons" => 3200},
26
+ {"quarter" => "Q2", "doubloons" => 8100},
27
+ {"quarter" => "Q3", "doubloons" => 5400},
28
+ {"quarter" => "Q4", "doubloons" => 12600}
29
+ ]}
30
+ },
31
+ "03_line_chart" => {
32
+ "monkeys" => {"data" => [
33
+ {"month" => "Jan", "sightings" => 3},
34
+ {"month" => "Feb", "sightings" => 5},
35
+ {"month" => "Mar", "sightings" => 2},
36
+ {"month" => "Apr", "sightings" => 8},
37
+ {"month" => "May", "sightings" => 12},
38
+ {"month" => "Jun", "sightings" => 7}
39
+ ]}
40
+ },
41
+ "04_pie_chart" => {
42
+ "candidates" => {"data" => [
43
+ {"candidate" => "Guybrush Threepwood", "votes" => 42},
44
+ {"candidate" => "Carla the Sword Master", "votes" => 31},
45
+ {"candidate" => "Stan S. Stanman", "votes" => 18},
46
+ {"candidate" => "Murray the Skull", "votes" => 9}
47
+ ]}
48
+ },
49
+ "05_computed_fields" => {
50
+ "pirates" => {"data" => [
51
+ {"name" => "Guybrush", "skill" => 92},
52
+ {"name" => "Carla", "skill" => 98},
53
+ {"name" => "Captain Smirk", "skill" => 75},
54
+ {"name" => "LeChuck", "skill" => 45},
55
+ {"name" => "Stan", "skill" => 62}
56
+ ]}
57
+ },
58
+ "06_postprocess_top_n" => {
59
+ "islands" => {"data" => [
60
+ {"name" => "Monkey Island", "buried" => 42},
61
+ {"name" => "Melee Island", "buried" => 28},
62
+ {"name" => "Booty Island", "buried" => 35},
63
+ {"name" => "Phatt Island", "buried" => 19},
64
+ {"name" => "Scabb Island", "buried" => 31},
65
+ {"name" => "Lucre Island", "buried" => 15},
66
+ {"name" => "Jambalaya Island", "buried" => 22},
67
+ {"name" => "Blood Island", "buried" => 8}
68
+ ]}
69
+ },
70
+ "10_multi_series" => {
71
+ "sales" => {"data" => [
72
+ {"month" => "Jan", "grog" => 340, "rum" => 120},
73
+ {"month" => "Feb", "grog" => 280, "rum" => 150},
74
+ {"month" => "Mar", "grog" => 410, "rum" => 180},
75
+ {"month" => "Apr", "grog" => 520, "rum" => 210},
76
+ {"month" => "May", "grog" => 380, "rum" => 190},
77
+ {"month" => "Jun", "grog" => 600, "rum" => 250}
78
+ ]}
79
+ }
80
+ }
81
+
82
+ SKIP = %w[07_score_kpi 08_table 09_template_inheritance]
83
+
84
+ Dir.glob(File.join(File.expand_path("../examples", __dir__), "*.yml")).sort.each do |path|
85
+ name = File.basename(path, ".yml")
86
+ next if SKIP.include?(name)
87
+
88
+ data = EXAMPLE_DATA[name]
89
+ unless data
90
+ puts "SKIP #{name} (no sample data)"
91
+ next
92
+ end
93
+
94
+ Trevl::DataSource.reset!
95
+ Trevl::DataSource.register("demo", Trevl::DataSource::Static.new(data: data))
96
+
97
+ yaml = File.read(path).sub(/\A(#[^\n]*\n)+/, "")
98
+
99
+ html = Trevl.render_to_html(yaml, width: 800, height: 400)
100
+ png = Grover.new(html, format: "png", viewport: {width: 900, height: 500}).to_png
101
+
102
+ output_path = File.join(OUTPUT_DIR, "#{name}.png")
103
+ File.write(output_path, png)
104
+ puts "OK #{name}.png (#{File.size(output_path)} bytes)"
105
+ end
106
+
107
+ puts "\nDone! Screenshots in #{OUTPUT_DIR}"
metadata ADDED
@@ -0,0 +1,137 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: trevl
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Robin Stammer
8
+ bindir: exe
9
+ cert_chain: []
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
+ dependencies:
12
+ - !ruby/object:Gem::Dependency
13
+ name: execjs
14
+ requirement: !ruby/object:Gem::Requirement
15
+ requirements:
16
+ - - "~>"
17
+ - !ruby/object:Gem::Version
18
+ version: '2.9'
19
+ type: :runtime
20
+ prerelease: false
21
+ version_requirements: !ruby/object:Gem::Requirement
22
+ requirements:
23
+ - - "~>"
24
+ - !ruby/object:Gem::Version
25
+ version: '2.9'
26
+ - !ruby/object:Gem::Dependency
27
+ name: httparty
28
+ requirement: !ruby/object:Gem::Requirement
29
+ requirements:
30
+ - - "~>"
31
+ - !ruby/object:Gem::Version
32
+ version: '0.21'
33
+ type: :runtime
34
+ prerelease: false
35
+ version_requirements: !ruby/object:Gem::Requirement
36
+ requirements:
37
+ - - "~>"
38
+ - !ruby/object:Gem::Version
39
+ version: '0.21'
40
+ - !ruby/object:Gem::Dependency
41
+ name: json_schemer
42
+ requirement: !ruby/object:Gem::Requirement
43
+ requirements:
44
+ - - "~>"
45
+ - !ruby/object:Gem::Version
46
+ version: '2.0'
47
+ type: :runtime
48
+ prerelease: false
49
+ version_requirements: !ruby/object:Gem::Requirement
50
+ requirements:
51
+ - - "~>"
52
+ - !ruby/object:Gem::Version
53
+ version: '2.0'
54
+ description: Parse, render, and display TREVL (Trendence Visualization Language) YAML
55
+ configurations. Connects data sources to Highcharts through declarative YAML.
56
+ email:
57
+ - robin.stammer@trendence.com
58
+ executables: []
59
+ extensions: []
60
+ extra_rdoc_files: []
61
+ files:
62
+ - LICENSE
63
+ - NOTICE
64
+ - README.md
65
+ - Rakefile
66
+ - assets/trendence-logo.svg
67
+ - assets/trevl-logo.svg
68
+ - docs/screenshots/01_bar_chart.png
69
+ - docs/screenshots/02_column_chart.png
70
+ - docs/screenshots/03_line_chart.png
71
+ - docs/screenshots/04_pie_chart.png
72
+ - docs/screenshots/05_computed_fields.png
73
+ - docs/screenshots/06_postprocess_top_n.png
74
+ - docs/screenshots/10_multi_series.png
75
+ - examples/01_bar_chart.yml
76
+ - examples/02_column_chart.yml
77
+ - examples/03_line_chart.yml
78
+ - examples/04_pie_chart.yml
79
+ - examples/05_computed_fields.yml
80
+ - examples/06_postprocess_top_n.yml
81
+ - examples/07_score_kpi.yml
82
+ - examples/08_table.yml
83
+ - examples/09_template_inheritance.yml
84
+ - examples/10_multi_series.yml
85
+ - lib/trevl.rb
86
+ - lib/trevl/auth/bearer_token.rb
87
+ - lib/trevl/configuration.rb
88
+ - lib/trevl/core_ext/hash.rb
89
+ - lib/trevl/data_source.rb
90
+ - lib/trevl/data_source/api.rb
91
+ - lib/trevl/data_source/base.rb
92
+ - lib/trevl/data_source/cube.rb
93
+ - lib/trevl/data_source/static.rb
94
+ - lib/trevl/errors.rb
95
+ - lib/trevl/highcharts_asset.rb
96
+ - lib/trevl/html_renderer.rb
97
+ - lib/trevl/notebook.rb
98
+ - lib/trevl/notebook/display.rb
99
+ - lib/trevl/processor.rb
100
+ - lib/trevl/renderer.rb
101
+ - lib/trevl/renderer/data_fetcher.rb
102
+ - lib/trevl/renderer/ref_parser.rb
103
+ - lib/trevl/renderer/transform.rb
104
+ - lib/trevl/schema/component.json
105
+ - lib/trevl/schema/document.json
106
+ - lib/trevl/template_store.rb
107
+ - lib/trevl/validator.rb
108
+ - lib/trevl/version.rb
109
+ - llms.txt
110
+ - notebooks/demo.ipynb
111
+ - notebooks/exploration.ipynb
112
+ - scripts/generate_screenshots.rb
113
+ homepage: https://trevl.trendence.com
114
+ licenses:
115
+ - MIT
116
+ metadata:
117
+ homepage_uri: https://trevl.trendence.com
118
+ source_code_uri: https://github.com/trendence/trevl
119
+ bug_tracker_uri: https://github.com/trendence/trevl/issues
120
+ rdoc_options: []
121
+ require_paths:
122
+ - lib
123
+ required_ruby_version: !ruby/object:Gem::Requirement
124
+ requirements:
125
+ - - ">="
126
+ - !ruby/object:Gem::Version
127
+ version: 3.1.0
128
+ required_rubygems_version: !ruby/object:Gem::Requirement
129
+ requirements:
130
+ - - ">="
131
+ - !ruby/object:Gem::Version
132
+ version: '0'
133
+ requirements: []
134
+ rubygems_version: 3.6.9
135
+ specification_version: 4
136
+ summary: TREVL visualization language engine
137
+ test_files: []