statosio 0.3.4
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 +7 -0
- data/.gitignore +8 -0
- data/.ipynb_checkpoints/[Ruby] statosio to svg-checkpoint.ipynb +1396 -0
- data/.rubocop.yml +13 -0
- data/CHANGELOG.md +5 -0
- data/CODE_OF_CONDUCT.md +84 -0
- data/Gemfile +10 -0
- data/LICENSE.txt +21 -0
- data/README.md +182 -0
- data/Rakefile +8 -0
- data/[Ruby] statosio to svg.ipynb +1459 -0
- data/assets/statosio.rb.png +0 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/jupyter/0-templates/d3.js +19542 -0
- data/jupyter/0-templates/dataset.json +3 -0
- data/jupyter/0-templates/html.txt +30 -0
- data/jupyter/0-templates/ruby.txt +140 -0
- data/jupyter/0-templates/statosio.js +854 -0
- data/jupyter/1-test/boilerplate-test.html +20547 -0
- data/jupyter/1-test/module-test-generate-svg.pdf +1179 -1
- data/jupyter/1-test/module-test-generate.pdf +1179 -1
- data/jupyter/1-test/module-test-html.html +20547 -0
- data/jupyter/2-examples/0-example1.svg +1 -0
- data/jupyter/2-examples/1-example2.pdf +1126 -0
- data/lib/boilerplate.rb +20563 -0
- data/lib/statosio.rb +206 -0
- data/lib/statosio/version.rb +5 -0
- data/statosio.gemspec +40 -0
- metadata +104 -0
data/lib/statosio.rb
ADDED
@@ -0,0 +1,206 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
require_relative 'boilerplate'
|
3
|
+
require_relative "statosio/version"
|
4
|
+
require 'puppeteer'
|
5
|
+
|
6
|
+
module Statosio
|
7
|
+
class Error < StandardError; end
|
8
|
+
|
9
|
+
|
10
|
+
class Generate < Boilerplate
|
11
|
+
def svg( dataset: nil, x: nil, y: nil, options: nil, silent: false )
|
12
|
+
valid = values_validation( dataset: dataset, x: x, y: y, options: options, allow_list: @options_allow_list, silent: silent )
|
13
|
+
if valid
|
14
|
+
values = {}
|
15
|
+
values[:dataset] = dataset
|
16
|
+
values[:x] = x
|
17
|
+
values[:y] = y
|
18
|
+
values[:options] = options
|
19
|
+
render_svg( values )
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
|
24
|
+
def get_options_allow_list
|
25
|
+
@options_allow_list
|
26
|
+
end
|
27
|
+
|
28
|
+
|
29
|
+
def render_prepare( values )
|
30
|
+
values[:y].class.to_s == 'String' ? values[:y] = [ values[:y] ] : ''
|
31
|
+
self.set_markers_value( values )
|
32
|
+
self.set_boilerplate
|
33
|
+
html = self.get_boilerplate
|
34
|
+
end
|
35
|
+
|
36
|
+
|
37
|
+
def render_svg( values )
|
38
|
+
html = self.render_prepare( values )
|
39
|
+
g = {}
|
40
|
+
id = 'd3_statosio'
|
41
|
+
g[:start] = '<div id="' + id + '">'
|
42
|
+
g[:end] = '</div>'
|
43
|
+
|
44
|
+
svg = Puppeteer.launch do | browser |
|
45
|
+
page = browser.pages.last || browser.new_page
|
46
|
+
page.set_content( html )
|
47
|
+
html = page.evaluate( 'document.body.innerHTML' )
|
48
|
+
tmp = html[ html.index( g[:start] ) + g[:start].length, html.length]
|
49
|
+
tmp = tmp[ 0, tmp.index( g[:end] ) ]
|
50
|
+
end
|
51
|
+
return svg
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
def values_validation( dataset: nil, x: nil, y: nil, options: nil, allow_list: nil, silent: false )
|
56
|
+
def check_dataset( dataset, messages, errors )
|
57
|
+
if !dataset.nil?
|
58
|
+
if dataset.class.to_s == 'Array'
|
59
|
+
if dataset[ 0 ].class.to_s == 'Hash' or dataset[ 0 ].class.to_s == 'ActiveSupport::HashWithIndifferentAccess'
|
60
|
+
if dataset[ 0 ].keys.length > 1
|
61
|
+
search = dataset[ 0 ].keys
|
62
|
+
keys = dataset
|
63
|
+
.map { | a | a.keys }
|
64
|
+
.flatten
|
65
|
+
.to_set
|
66
|
+
.to_a
|
67
|
+
if keys.eql? search
|
68
|
+
else
|
69
|
+
errors.push( messages[:dataset][ 4 ] )
|
70
|
+
end
|
71
|
+
else
|
72
|
+
errors.push( messages[:dataset][ 3 ] )
|
73
|
+
end
|
74
|
+
else
|
75
|
+
errors.push( messages[:dataset][ 2 ] )
|
76
|
+
end
|
77
|
+
else
|
78
|
+
errors.push( messages[:dataset][ 1 ] )
|
79
|
+
end
|
80
|
+
else
|
81
|
+
errors.push( messages[:dataset][ 0 ] )
|
82
|
+
end
|
83
|
+
return errors
|
84
|
+
end
|
85
|
+
|
86
|
+
|
87
|
+
def check_x( x, messages, errors )
|
88
|
+
if !x.nil?
|
89
|
+
if x.class.to_s == 'String'
|
90
|
+
else
|
91
|
+
errors.push( messages[:x][ 1 ] )
|
92
|
+
end
|
93
|
+
else
|
94
|
+
errors.push( messages[:x][ 0 ] )
|
95
|
+
end
|
96
|
+
return errors
|
97
|
+
end
|
98
|
+
|
99
|
+
|
100
|
+
def check_y( y, messages, errors )
|
101
|
+
if !y.nil?
|
102
|
+
if y.class.to_s == 'String' or y.class.to_s == 'Array'
|
103
|
+
else
|
104
|
+
errors.push( messages[:y][ 1 ] )
|
105
|
+
end
|
106
|
+
else
|
107
|
+
errors.push( messages[:y][ 0 ] )
|
108
|
+
end
|
109
|
+
return errors
|
110
|
+
end
|
111
|
+
|
112
|
+
|
113
|
+
def check_options( options, messages, allow_list, errors )
|
114
|
+
def str_difference( a, b )
|
115
|
+
a = a.to_s.downcase.split( '_' ).join( '' )
|
116
|
+
b = b.to_s.downcase.split( '_' ).join( '' )
|
117
|
+
longer = [ a.size, b.size ].max
|
118
|
+
same = a
|
119
|
+
.each_char
|
120
|
+
.zip( b.each_char )
|
121
|
+
.select { | a, b | a == b }
|
122
|
+
.size
|
123
|
+
( longer - same ) / a.size.to_f
|
124
|
+
end
|
125
|
+
|
126
|
+
|
127
|
+
if !options.nil?
|
128
|
+
if options.class.to_s == 'Hash'
|
129
|
+
options.keys.each do | key |
|
130
|
+
if allow_list.include?( key.to_s )
|
131
|
+
else
|
132
|
+
tmp = messages[:options][ 2 ][ 0 ]
|
133
|
+
tmp = tmp.gsub( '<--key-->', key.to_s)
|
134
|
+
|
135
|
+
nearest = allow_list
|
136
|
+
.map { | word | { score: str_difference( key, word ), word: word } }
|
137
|
+
.min_by { | item | item[:score] }
|
138
|
+
tmp = tmp.gsub( '<--similar-->', nearest[:word] )
|
139
|
+
errors.push( [ tmp, messages[:options][ 2 ][ 1 ] ] )
|
140
|
+
end
|
141
|
+
end
|
142
|
+
else
|
143
|
+
errors.push( messages[:options][ 1 ] )
|
144
|
+
end
|
145
|
+
else
|
146
|
+
errors.push( messages[:options][ 0 ] )
|
147
|
+
end
|
148
|
+
|
149
|
+
return errors
|
150
|
+
end
|
151
|
+
|
152
|
+
|
153
|
+
def check_silent( silent, messages, errors )
|
154
|
+
value = silent.class.to_s
|
155
|
+
if value == 'FalseClass' or value == 'TrueClass'
|
156
|
+
else
|
157
|
+
errors.push( messages[:silent][ 0 ] )
|
158
|
+
end
|
159
|
+
return errors
|
160
|
+
end
|
161
|
+
|
162
|
+
|
163
|
+
messages = {
|
164
|
+
dataset: [
|
165
|
+
[ "dataset:\t is empty. Expect: \"Array\" [{},{}]", :d0 ],
|
166
|
+
[ "dataset:\t is not class \"Array\"", :d1 ],
|
167
|
+
[ "dataset:\t is not class \"Hash\"", :d2 ],
|
168
|
+
[ "dataset:\t \"Hash\" has less then 2 keys", :d3 ],
|
169
|
+
[ "dataset:\t have diffrent keys", :d4 ]
|
170
|
+
],
|
171
|
+
x: [
|
172
|
+
[ "x:\t\t is empty. Expect: \"String\"", :x0 ],
|
173
|
+
[ "x:\t\t is not Class \"String\"", :x1 ]
|
174
|
+
],
|
175
|
+
y: [
|
176
|
+
[ "y:\t\t is empty. Expect: \"String\"", :y0 ],
|
177
|
+
[ "y:\t\t is not Class \"String\"", :y1 ]
|
178
|
+
],
|
179
|
+
options: [
|
180
|
+
[ "options:\t is empty. Expect: \"Hash\"", :p0 ],
|
181
|
+
[ "options:\t is not Class \"Hash\"", :p1 ],
|
182
|
+
[ "options:\t key: \"<--key-->\" is not a valid parameter, did you mean: \"<--similar-->\"? For more Information visit: https://docs.statosio.com/options/<--similar-->", :p2 ]
|
183
|
+
],
|
184
|
+
silent: [
|
185
|
+
[ "silent:\t is not Class \"Hash\"", :s0 ]
|
186
|
+
]
|
187
|
+
}
|
188
|
+
|
189
|
+
errors = []
|
190
|
+
errors = check_dataset( dataset, messages, errors )
|
191
|
+
errors = check_y( y, messages, errors )
|
192
|
+
errors = check_x( x, messages, errors )
|
193
|
+
errors = check_options( options, messages, allow_list, errors )
|
194
|
+
errors = check_silent( silent, messages, errors )
|
195
|
+
|
196
|
+
if silent == false
|
197
|
+
if errors.length != 0
|
198
|
+
puts errors.length.to_s + ' Errors found: '
|
199
|
+
errors.each { | error | puts( ' - ' + error[ 0 ] ) }
|
200
|
+
end
|
201
|
+
end
|
202
|
+
|
203
|
+
return errors.length == 0
|
204
|
+
end
|
205
|
+
end
|
206
|
+
end
|
data/statosio.gemspec
ADDED
@@ -0,0 +1,40 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require_relative "lib/statosio/version"
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = "statosio"
|
7
|
+
spec.version = Statosio::VERSION
|
8
|
+
spec.authors = ["a6b8"]
|
9
|
+
spec.email = ["hello13plus4.com"]
|
10
|
+
|
11
|
+
spec.summary = "Statosio generate charts in a .svg format."
|
12
|
+
spec.description = "Statosio generate charts in a .svg format. Works with prawn-svg to generate .pdf documents."
|
13
|
+
spec.homepage = "https://d3.statoiso.com"
|
14
|
+
spec.license = "MIT"
|
15
|
+
spec.required_ruby_version = ">= 2.4.0"
|
16
|
+
|
17
|
+
spec.metadata["allowed_push_host"] = "https://rubygems.org"
|
18
|
+
|
19
|
+
spec.metadata["homepage_uri"] = spec.homepage
|
20
|
+
spec.metadata["source_code_uri"] = "https://d3.statoiso.com"
|
21
|
+
spec.metadata["changelog_uri"] = "https://d3.statoiso.com"
|
22
|
+
|
23
|
+
# Specify which files should be added to the gem when it is released.
|
24
|
+
# The `git ls-files -z` loads the files in the RubyGem that have been added into git.
|
25
|
+
spec.files = Dir.chdir(File.expand_path(__dir__)) do
|
26
|
+
`git ls-files -z`.split("\x0").reject { |f| f.match(%r{\A(?:test|spec|features)/}) }
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
spec.bindir = "exe"
|
31
|
+
spec.executables = spec.files.grep(%r{\Aexe/}) { |f| File.basename(f) }
|
32
|
+
spec.require_paths = ["lib"]
|
33
|
+
|
34
|
+
# Uncomment to register a new dependency of your gem
|
35
|
+
spec.add_dependency "json", "~> 2.5.1"
|
36
|
+
spec.add_dependency "puppeteer-ruby", "~> 0.32.3"
|
37
|
+
|
38
|
+
# For more information and examples about making a new gem, checkout our
|
39
|
+
# guide at: https://bundler.io/guides/creating_gem.html
|
40
|
+
end
|
metadata
ADDED
@@ -0,0 +1,104 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: statosio
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.3.4
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- a6b8
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2021-06-05 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: json
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: 2.5.1
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 2.5.1
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: puppeteer-ruby
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: 0.32.3
|
34
|
+
type: :runtime
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: 0.32.3
|
41
|
+
description: Statosio generate charts in a .svg format. Works with prawn-svg to generate
|
42
|
+
.pdf documents.
|
43
|
+
email:
|
44
|
+
- hello13plus4.com
|
45
|
+
executables: []
|
46
|
+
extensions: []
|
47
|
+
extra_rdoc_files: []
|
48
|
+
files:
|
49
|
+
- ".gitignore"
|
50
|
+
- ".ipynb_checkpoints/[Ruby] statosio to svg-checkpoint.ipynb"
|
51
|
+
- ".rubocop.yml"
|
52
|
+
- CHANGELOG.md
|
53
|
+
- CODE_OF_CONDUCT.md
|
54
|
+
- Gemfile
|
55
|
+
- LICENSE.txt
|
56
|
+
- README.md
|
57
|
+
- Rakefile
|
58
|
+
- "[Ruby] statosio to svg.ipynb"
|
59
|
+
- assets/statosio.rb.png
|
60
|
+
- bin/console
|
61
|
+
- bin/setup
|
62
|
+
- jupyter/0-templates/d3.js
|
63
|
+
- jupyter/0-templates/dataset.json
|
64
|
+
- jupyter/0-templates/html.txt
|
65
|
+
- jupyter/0-templates/ruby.txt
|
66
|
+
- jupyter/0-templates/statosio.js
|
67
|
+
- jupyter/1-test/boilerplate-test.html
|
68
|
+
- jupyter/1-test/module-test-generate-svg.pdf
|
69
|
+
- jupyter/1-test/module-test-generate.pdf
|
70
|
+
- jupyter/1-test/module-test-html.html
|
71
|
+
- jupyter/2-examples/0-example1.svg
|
72
|
+
- jupyter/2-examples/1-example2.pdf
|
73
|
+
- lib/boilerplate.rb
|
74
|
+
- lib/statosio.rb
|
75
|
+
- lib/statosio/version.rb
|
76
|
+
- statosio.gemspec
|
77
|
+
homepage: https://d3.statoiso.com
|
78
|
+
licenses:
|
79
|
+
- MIT
|
80
|
+
metadata:
|
81
|
+
allowed_push_host: https://rubygems.org
|
82
|
+
homepage_uri: https://d3.statoiso.com
|
83
|
+
source_code_uri: https://d3.statoiso.com
|
84
|
+
changelog_uri: https://d3.statoiso.com
|
85
|
+
post_install_message:
|
86
|
+
rdoc_options: []
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: 2.4.0
|
94
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
95
|
+
requirements:
|
96
|
+
- - ">="
|
97
|
+
- !ruby/object:Gem::Version
|
98
|
+
version: '0'
|
99
|
+
requirements: []
|
100
|
+
rubygems_version: 3.2.3
|
101
|
+
signing_key:
|
102
|
+
specification_version: 4
|
103
|
+
summary: Statosio generate charts in a .svg format.
|
104
|
+
test_files: []
|