rodolfo 1.0.1.pre.pre → 2.0.0.pre.pre
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 +4 -4
- data/bin/rodolfo +3 -41
- data/lib/rodolfo/cli.rb +41 -0
- data/lib/rodolfo/exceptions.rb +19 -0
- data/lib/rodolfo/json_schema.rb +30 -0
- data/lib/{meta.rb → rodolfo/meta.rb} +1 -2
- data/lib/rodolfo/renderer.rb +46 -0
- metadata +10 -13
- data/lib/rodolfo.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: d2b0721e70e5346041cdfbf0c46ee84b67220cc5
|
4
|
+
data.tar.gz: 7a1f3b769ef3aed6dd24bffa95f18d03d86becb6
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: acf315467d8d0de4ba117b64f05d6cec9f03169dbee28dd3b8f84cd6907cbe6abc5850750eb69c6bc517af8268378e71634467e964de1099eae2daf6a2db195f
|
7
|
+
data.tar.gz: 22f66c10d3c83ab6ce896bbedac939717c36a031e9522d46ddbcf3f1e7b047f6f5ea18f43534176c3477c7b18cc85805d12f2f21683e0ca8c8653c978f98e9c8
|
data/bin/rodolfo
CHANGED
@@ -1,44 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
root_path = File.dirname __dir__
|
4
|
-
|
5
|
-
require '
|
6
|
-
|
7
|
-
require File.join(root_path, 'lib', 'rodolfo')
|
8
|
-
|
9
|
-
opts = Slop.parse do |o|
|
10
|
-
o.string '-p', '--package', 'package name'
|
11
|
-
o.on '--schema', 'get the package json schema'
|
12
|
-
o.on '--skip-validation', 'skip json schema validation'
|
13
|
-
o.on '--version', 'print the version' do
|
14
|
-
require File.join(root_path, 'lib', 'meta')
|
15
|
-
STDOUT.write Rodolfo::VERSION
|
16
|
-
exit 0
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
unless opts.package?
|
21
|
-
puts opts
|
22
|
-
exit 1
|
23
|
-
end
|
24
|
-
|
25
|
-
if opts.schema?
|
26
|
-
STDOUT.write Rodolfo::Package.new(opts[:package], {}).schema
|
27
|
-
exit 0
|
28
|
-
end
|
29
|
-
|
30
|
-
data = $stdin.tty? ? {} : JSON.parse($stdin.read, symbolize_names: true)
|
31
|
-
package = Rodolfo::Package.new opts[:package], data
|
32
|
-
|
33
|
-
unless opts.skip_validation? || package.valid?
|
34
|
-
STDOUT.write JSON.dump(package.validation_errors)
|
35
|
-
exit 2
|
36
|
-
end
|
37
|
-
|
38
|
-
begin
|
39
|
-
STDOUT.write package.make
|
40
|
-
exit 0
|
41
|
-
rescue NoMethodError
|
42
|
-
STDOUT.write 'Missing or incorrect data, template can\'t be rendered'
|
43
|
-
exit 2
|
44
|
-
end
|
4
|
+
rodolfo_path = File.join(root_path, 'lib', 'rodolfo')
|
5
|
+
require File.join(rodolfo_path, 'cli')
|
6
|
+
Rodolfo::CLI.start(ARGV)
|
data/lib/rodolfo/cli.rb
ADDED
@@ -0,0 +1,41 @@
|
|
1
|
+
require 'thor'
|
2
|
+
require_relative 'exceptions'
|
3
|
+
require_relative 'meta'
|
4
|
+
require_relative 'renderer'
|
5
|
+
|
6
|
+
module Rodolfo
|
7
|
+
# Rodolfo CLI
|
8
|
+
class CLI < Thor
|
9
|
+
def self.exit_on_failure?
|
10
|
+
true
|
11
|
+
end
|
12
|
+
|
13
|
+
map %w(--version -v) => :__print_version
|
14
|
+
|
15
|
+
desc '--version, -v', 'print the version'
|
16
|
+
def __print_version
|
17
|
+
puts VERSION
|
18
|
+
end
|
19
|
+
|
20
|
+
desc 'schema PACKAGE PATH', 'print the package json schema'
|
21
|
+
def schema(package_path)
|
22
|
+
puts Rodolfo::Renderer.new(package_path, {}).json_schema
|
23
|
+
end
|
24
|
+
|
25
|
+
desc 'render PACKAGE PATH', 'render a rodolfo package path'
|
26
|
+
def render(package_path)
|
27
|
+
data = $stdin.tty? ? {} : JSON.parse($stdin.read, symbolize_names: true)
|
28
|
+
package = Rodolfo::Renderer.new package_path, data
|
29
|
+
STDOUT.write package.render
|
30
|
+
exit 0
|
31
|
+
rescue RenderError, SchemaValidationError => error
|
32
|
+
STDOUT.write error.errors
|
33
|
+
exit 2
|
34
|
+
end
|
35
|
+
|
36
|
+
def help(*args, &block)
|
37
|
+
puts "Rodolfo v#{Rodolfo::VERSION}"
|
38
|
+
super(*args, &block)
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Rodolfo
|
2
|
+
# Package rendering failed
|
3
|
+
class RenderError < RuntimeError
|
4
|
+
attr_reader :errors
|
5
|
+
|
6
|
+
def initialize(errors)
|
7
|
+
@errors = errors
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
# Schema validation failed
|
12
|
+
class SchemaValidationError < RuntimeError
|
13
|
+
attr_reader :errors
|
14
|
+
|
15
|
+
def initialize(errors)
|
16
|
+
@errors = errors
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'json'
|
2
|
+
require 'json-schema'
|
3
|
+
require_relative 'exceptions'
|
4
|
+
|
5
|
+
# Create PDFs from the CLI using Prawn
|
6
|
+
module Rodolfo
|
7
|
+
# Rodolfo Package JSON Schema
|
8
|
+
class JSONSchema
|
9
|
+
def initialize(path)
|
10
|
+
@path = path
|
11
|
+
end
|
12
|
+
|
13
|
+
# Validate the json schema
|
14
|
+
# May raise a SchemaValidationError
|
15
|
+
def validate(data)
|
16
|
+
opts = { errors_as_objects: true, insert_defaults: true,
|
17
|
+
strict: true }
|
18
|
+
errors = JSON::Validator.fully_validate json, data, opts
|
19
|
+
raise SchemaValidationError, errors unless errors.empty?
|
20
|
+
end
|
21
|
+
|
22
|
+
def json
|
23
|
+
@json ||= File.read @path
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_s
|
27
|
+
json
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require 'pathname'
|
2
|
+
require 'prawn'
|
3
|
+
require 'prawn/measurements'
|
4
|
+
require 'prawn/measurement_extensions'
|
5
|
+
require 'prawn/table'
|
6
|
+
|
7
|
+
require_relative 'json_schema'
|
8
|
+
require_relative 'exceptions.rb'
|
9
|
+
|
10
|
+
# Create PDFs from the CLI using Prawn
|
11
|
+
module Rodolfo
|
12
|
+
##
|
13
|
+
# Requires a filesystem folder path which should contain
|
14
|
+
# - schema.json to perform the validation
|
15
|
+
# - data.json as example data (for testing purposes only and valid example)
|
16
|
+
# - template.rb the pdf generator itself
|
17
|
+
#
|
18
|
+
# It renders the the given template validating
|
19
|
+
# the data against that json schema
|
20
|
+
class Renderer
|
21
|
+
attr_reader :data, :validation_errors
|
22
|
+
|
23
|
+
def initialize(path, data)
|
24
|
+
@path = Pathname.new(path).absolute? ? path : File.join(Dir.pwd, path)
|
25
|
+
@data = data
|
26
|
+
@schema = JSONSchema.new File.join(@path, 'schema.json')
|
27
|
+
end
|
28
|
+
|
29
|
+
# Get the package json schema
|
30
|
+
def json_schema
|
31
|
+
@schema.to_s
|
32
|
+
end
|
33
|
+
|
34
|
+
# Render the template
|
35
|
+
# May raises a ValidationError
|
36
|
+
def render
|
37
|
+
@schema.validate(@data)
|
38
|
+
require File.join @path, 'template'
|
39
|
+
Rodolfo::Template.new(@data).render
|
40
|
+
|
41
|
+
rescue NoMethodError
|
42
|
+
msg = 'Missing or incorrect data, template can\'t be rendered'
|
43
|
+
raise RenderError, [msg]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rodolfo
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.0.pre.pre
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Initios
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-11-
|
11
|
+
date: 2016-11-18 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: json-schema
|
@@ -59,25 +59,19 @@ dependencies:
|
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: 0.2.2
|
61
61
|
- !ruby/object:Gem::Dependency
|
62
|
-
name:
|
62
|
+
name: thor
|
63
63
|
requirement: !ruby/object:Gem::Requirement
|
64
64
|
requirements:
|
65
65
|
- - "~>"
|
66
66
|
- !ruby/object:Gem::Version
|
67
|
-
version:
|
68
|
-
- - ">="
|
69
|
-
- !ruby/object:Gem::Version
|
70
|
-
version: 4.4.1
|
67
|
+
version: 0.19.1
|
71
68
|
type: :runtime
|
72
69
|
prerelease: false
|
73
70
|
version_requirements: !ruby/object:Gem::Requirement
|
74
71
|
requirements:
|
75
72
|
- - "~>"
|
76
73
|
- !ruby/object:Gem::Version
|
77
|
-
version:
|
78
|
-
- - ">="
|
79
|
-
- !ruby/object:Gem::Version
|
80
|
-
version: 4.4.1
|
74
|
+
version: 0.19.1
|
81
75
|
- !ruby/object:Gem::Dependency
|
82
76
|
name: aruba
|
83
77
|
requirement: !ruby/object:Gem::Requirement
|
@@ -246,8 +240,11 @@ extensions: []
|
|
246
240
|
extra_rdoc_files: []
|
247
241
|
files:
|
248
242
|
- bin/rodolfo
|
249
|
-
- lib/
|
250
|
-
- lib/rodolfo.rb
|
243
|
+
- lib/rodolfo/cli.rb
|
244
|
+
- lib/rodolfo/exceptions.rb
|
245
|
+
- lib/rodolfo/json_schema.rb
|
246
|
+
- lib/rodolfo/meta.rb
|
247
|
+
- lib/rodolfo/renderer.rb
|
251
248
|
homepage: https://github.com/initios/rodolfo
|
252
249
|
licenses:
|
253
250
|
- MIT
|
data/lib/rodolfo.rb
DELETED
@@ -1,44 +0,0 @@
|
|
1
|
-
require 'json'
|
2
|
-
require 'json-schema'
|
3
|
-
require 'pathname'
|
4
|
-
require 'prawn'
|
5
|
-
require 'prawn/measurements'
|
6
|
-
require 'prawn/measurement_extensions'
|
7
|
-
require 'prawn/table'
|
8
|
-
|
9
|
-
##
|
10
|
-
# Create PDFs from the CLI using Prawn
|
11
|
-
module Rodolfo
|
12
|
-
##
|
13
|
-
# Represents a filesystem folder which should contain
|
14
|
-
# - schema.json to perform the validation
|
15
|
-
# - data.json as example data
|
16
|
-
# - template.rb the pdf generator itself
|
17
|
-
#
|
18
|
-
# It handles methods for manipulate those files and the pdf generation
|
19
|
-
class Package
|
20
|
-
attr_reader :data, :validation_errors
|
21
|
-
|
22
|
-
def initialize(path, data)
|
23
|
-
@path = Pathname.new(path).absolute? ? path : File.join(Dir.pwd, path)
|
24
|
-
opts = { errors_as_objects: true, insert_defaults: true }
|
25
|
-
@validation_errors = JSON::Validator.fully_validate(schema, data, opts)
|
26
|
-
@data = data
|
27
|
-
end
|
28
|
-
|
29
|
-
def schema
|
30
|
-
json_file_path = File.join @path, 'schema.json'
|
31
|
-
File.read json_file_path
|
32
|
-
end
|
33
|
-
|
34
|
-
def valid?
|
35
|
-
@validation_errors.empty?
|
36
|
-
end
|
37
|
-
|
38
|
-
def make
|
39
|
-
template_file_path = File.join @path, 'template'
|
40
|
-
require template_file_path
|
41
|
-
Rodolfo::Template.new(@data).render
|
42
|
-
end
|
43
|
-
end
|
44
|
-
end
|