jsonschema_serializer 0.0.5 → 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.
- checksums.yaml +4 -4
- data/README.md +7 -1
- data/jsonschema_serializer.gemspec +9 -9
- data/lib/jsonschema_serializer.rb +2 -0
- data/lib/jsonschema_serializer/active_record.rb +16 -4
- data/lib/jsonschema_serializer/builder.rb +2 -0
- data/lib/jsonschema_serializer/version.rb +3 -1
- metadata +50 -18
- data/.gitignore +0 -16
- data/.rspec +0 -3
- data/.rubocop.yml +0 -27
- data/.travis.yml +0 -22
- data/CHANGELOG.md +0 -27
- data/Gemfile +0 -8
- data/Rakefile +0 -6
- data/bin/console +0 -14
- data/bin/setup +0 -8
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 0bf44f052005e55102e26a83b65f8dd7652551e5
|
4
|
+
data.tar.gz: 36455d91f261bc831b86247866d44ff3a22927aa
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: c76364ae191a25e98d85b4c7961230f2f916f94341dd5c6d871e8bc1e67ba313452ee4c95ca8b591faf9ff9f88359ff6f943f55243f3b94caf6353cabb39abad
|
7
|
+
data.tar.gz: 486c1a061008be82fd861369d28a607c3bec312a6403d4fff32e66245a09e02bf7242740378ef67a7a5adfd21d34482194878953b7df5b4fd4433227600284ac
|
data/README.md
CHANGED
@@ -3,8 +3,13 @@
|
|
3
3
|
[](https://travis-ci.org/mberlanda/jsonschema_serializer)
|
4
4
|
[](https://badge.fury.io/rb/jsonschema_serializer)
|
5
5
|
[](https://codeclimate.com/github/mberlanda/jsonschema_serializer/maintainability)
|
6
|
+
[](https://codeclimate.com/github/mberlanda/jsonschema_serializer/test_coverage)
|
6
7
|
|
7
8
|
This purpose of this gem is to generate [JsonSchema](http://json-schema.org/).
|
9
|
+
This can be achieved with a builder class or an `ActiveRecord` wrapper.
|
10
|
+
The gem is available for both Rails 4, 5 or in Ruby standalone projects.
|
11
|
+
|
12
|
+
Since the project is still at an early stage, please do not hesitate to [open issues / feature requests](https://github.com/mberlanda/jsonschema_serializer/issues) or fork this repo for pull requests.
|
8
13
|
|
9
14
|
## Installation
|
10
15
|
|
@@ -79,7 +84,7 @@ schema.to_json
|
|
79
84
|
|
80
85
|
At this stage, a first usage within a Rails application could be a rake task dumping the schemas inside the public folder.
|
81
86
|
|
82
|
-
```
|
87
|
+
```ruby
|
83
88
|
# lib/tasks/jsonschemas.rake
|
84
89
|
require 'fileutils'
|
85
90
|
|
@@ -116,3 +121,4 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
116
121
|
## Contributing
|
117
122
|
|
118
123
|
Bug reports and pull requests are welcome on GitHub at https://github.com/mberlanda/jsonschema_serializer.
|
124
|
+
Please ensure to keep the test coverage at 100% and follow the angularjs [commit message conv.entions](https://gist.github.com/stephenparish/9941e89d80e2bc58a153#subject-line).
|
@@ -9,13 +9,12 @@ Gem::Specification.new do |spec|
|
|
9
9
|
spec.authors = ["Mauro Berlanda"]
|
10
10
|
spec.email = ["mauro.berlanda@gmail.com"]
|
11
11
|
|
12
|
-
spec.summary = %q{
|
12
|
+
spec.summary = %q{Generate JsonSchema in Rails or standalone Ruby}
|
13
13
|
spec.description = <<-EOT
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
The
|
18
|
-
be welcome on the Github repo
|
14
|
+
This gem allows to generate JsonSchema thanks to a Builder class or
|
15
|
+
an ActiveRecord serialization class. It can be used in Rails 4, 5 or
|
16
|
+
Ruby standalone projects.
|
17
|
+
The output validation is done agains json-schema.
|
19
18
|
EOT
|
20
19
|
spec.homepage = "https://github.com/mberlanda/jsonschema_serializer"
|
21
20
|
spec.licenses = ['MIT']
|
@@ -30,9 +29,7 @@ Gem::Specification.new do |spec|
|
|
30
29
|
# "public gem pushes."
|
31
30
|
# end
|
32
31
|
|
33
|
-
spec.files
|
34
|
-
f.match(%r{^(test|spec|features)/})
|
35
|
-
end
|
32
|
+
spec.files = Dir.glob("lib/**/*") + %w(jsonschema_serializer.gemspec README.md)
|
36
33
|
spec.bindir = "exe"
|
37
34
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
38
35
|
spec.require_paths = ["lib"]
|
@@ -40,6 +37,9 @@ Gem::Specification.new do |spec|
|
|
40
37
|
spec.add_development_dependency "bundler", "~> 1.16"
|
41
38
|
spec.add_development_dependency "rake", "~> 10.0"
|
42
39
|
spec.add_development_dependency "rspec", "~> 3.0"
|
40
|
+
spec.add_development_dependency "json-schema", "~> 2.8"
|
41
|
+
spec.add_development_dependency "simplecov", "~> 0.16"
|
42
|
+
spec.add_development_dependency "appraisal", "~> 2.2"
|
43
43
|
|
44
44
|
spec.extra_rdoc_files = ['README.md']
|
45
45
|
spec.rdoc_options << '--title' << 'Jsonschema Serializer' <<
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require_relative 'builder'
|
2
4
|
|
3
5
|
module JsonschemaSerializer
|
@@ -43,7 +45,7 @@ module JsonschemaSerializer
|
|
43
45
|
def format_schema_attributes(klass, builder)
|
44
46
|
builder.title schema_title(klass)
|
45
47
|
required(klass).tap do |required|
|
46
|
-
builder.required
|
48
|
+
builder.required(*required) unless required.empty?
|
47
49
|
end
|
48
50
|
end
|
49
51
|
|
@@ -78,11 +80,12 @@ module JsonschemaSerializer
|
|
78
80
|
# Params:
|
79
81
|
# +columns+:: +Array+ column names as +Symbol+
|
80
82
|
|
81
|
-
#
|
83
|
+
# Filter required class attributes with only/filters attributes
|
82
84
|
# This method can be overridden when inheriting from this class
|
83
85
|
#
|
84
86
|
# Params:
|
85
87
|
# +klass+:: +ActiveRecord::Base+ class name
|
88
|
+
|
86
89
|
def required(klass)
|
87
90
|
required_from_class(klass).tap do |req|
|
88
91
|
return req & @only if @only
|
@@ -90,6 +93,12 @@ module JsonschemaSerializer
|
|
90
93
|
end
|
91
94
|
end
|
92
95
|
|
96
|
+
# Extract required attributes from ActiveRecord class implementation
|
97
|
+
# This method can be overridden when inheriting from this class
|
98
|
+
#
|
99
|
+
# Params:
|
100
|
+
# +klass+:: +ActiveRecord::Base+ class name
|
101
|
+
|
93
102
|
def required_from_class(klass)
|
94
103
|
klass.validators.select do |validator|
|
95
104
|
validator.class.to_s == 'ActiveRecord::Validations::PresenceValidator'
|
@@ -119,7 +128,8 @@ module JsonschemaSerializer
|
|
119
128
|
decimal: :number,
|
120
129
|
float: :number,
|
121
130
|
integer: :integer,
|
122
|
-
text: :string
|
131
|
+
text: :string,
|
132
|
+
varchar: :string
|
123
133
|
}.freeze
|
124
134
|
|
125
135
|
# Format a ActiveRecord::ConnectionAdapters::<Adapter>::Column as an Hash
|
@@ -141,7 +151,9 @@ module JsonschemaSerializer
|
|
141
151
|
# +col+:: +ActiveRecord::ConnectionAdapters::<Adapter>::Column+ column
|
142
152
|
|
143
153
|
def sql_type(col)
|
144
|
-
col.sql_type_metadata.type
|
154
|
+
return col.sql_type_metadata.type if col.respond_to?(:sql_type_metadata)
|
155
|
+
# Rails 4 backward compatibility
|
156
|
+
col.sql_type.downcase.to_sym
|
145
157
|
end
|
146
158
|
end
|
147
159
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jsonschema_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mauro Berlanda
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2018-05-
|
11
|
+
date: 2018-05-25 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,12 +52,53 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '3.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: json-schema
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '2.8'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '2.8'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: simplecov
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.16'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.16'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: appraisal
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '2.2'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '2.2'
|
55
97
|
description: |2
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
The
|
60
|
-
be welcome on the Github repo
|
98
|
+
This gem allows to generate JsonSchema thanks to a Builder class or
|
99
|
+
an ActiveRecord serialization class. It can be used in Rails 4, 5 or
|
100
|
+
Ruby standalone projects.
|
101
|
+
The output validation is done agains json-schema.
|
61
102
|
email:
|
62
103
|
- mauro.berlanda@gmail.com
|
63
104
|
executables: []
|
@@ -65,16 +106,7 @@ extensions: []
|
|
65
106
|
extra_rdoc_files:
|
66
107
|
- README.md
|
67
108
|
files:
|
68
|
-
- ".gitignore"
|
69
|
-
- ".rspec"
|
70
|
-
- ".rubocop.yml"
|
71
|
-
- ".travis.yml"
|
72
|
-
- CHANGELOG.md
|
73
|
-
- Gemfile
|
74
109
|
- README.md
|
75
|
-
- Rakefile
|
76
|
-
- bin/console
|
77
|
-
- bin/setup
|
78
110
|
- jsonschema_serializer.gemspec
|
79
111
|
- lib/jsonschema_serializer.rb
|
80
112
|
- lib/jsonschema_serializer/active_record.rb
|
@@ -106,8 +138,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
138
|
version: '0'
|
107
139
|
requirements: []
|
108
140
|
rubyforge_project:
|
109
|
-
rubygems_version: 2.
|
141
|
+
rubygems_version: 2.6.14
|
110
142
|
signing_key:
|
111
143
|
specification_version: 4
|
112
|
-
summary:
|
144
|
+
summary: Generate JsonSchema in Rails or standalone Ruby
|
113
145
|
test_files: []
|
data/.gitignore
DELETED
data/.rspec
DELETED
data/.rubocop.yml
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
AllCops:
|
2
|
-
TargetRubyVersion: 2.4
|
3
|
-
Exclude:
|
4
|
-
- bin/*
|
5
|
-
- "*.gemspec"
|
6
|
-
- Gemfile
|
7
|
-
- Rakefile
|
8
|
-
|
9
|
-
Metrics/BlockLength:
|
10
|
-
Exclude:
|
11
|
-
- spec/**/*
|
12
|
-
|
13
|
-
Metrics/LineLength:
|
14
|
-
Max: 90
|
15
|
-
|
16
|
-
Style/Documentation:
|
17
|
-
Enabled: true
|
18
|
-
|
19
|
-
Style/FrozenStringLiteralComment:
|
20
|
-
Enabled: false
|
21
|
-
|
22
|
-
Style/ModuleFunction:
|
23
|
-
Exclude:
|
24
|
-
- lib/jsonschema_serializer/active_record.rb
|
25
|
-
|
26
|
-
Style/SymbolArray:
|
27
|
-
EnforcedStyle: brackets
|
data/.travis.yml
DELETED
@@ -1,22 +0,0 @@
|
|
1
|
-
sudo: false
|
2
|
-
|
3
|
-
language: ruby
|
4
|
-
|
5
|
-
jobs:
|
6
|
-
include:
|
7
|
-
- rvm: 2.1.5
|
8
|
-
gemfile: Gemfile
|
9
|
-
- rvm: 2.2.7
|
10
|
-
gemfile: Gemfile
|
11
|
-
- rvm: 2.3.4
|
12
|
-
gemfile: Gemfile
|
13
|
-
- rvm: 2.4.1
|
14
|
-
gemfile: Gemfile
|
15
|
-
- rvm: 2.5.0
|
16
|
-
gemfile: Gemfile
|
17
|
-
- rvm: ruby-head
|
18
|
-
gemfile: Gemfile
|
19
|
-
- rvm: jruby-9.0.5.0
|
20
|
-
gemfile: Gemfile
|
21
|
-
|
22
|
-
before_install: gem install bundler -v 1.16.1
|
data/CHANGELOG.md
DELETED
@@ -1,27 +0,0 @@
|
|
1
|
-
# Changelog
|
2
|
-
|
3
|
-
## v 0.0.5 (2018-05-23)
|
4
|
-
|
5
|
-
- json pretty generation by default
|
6
|
-
- added a Rails rake task example in the README.md
|
7
|
-
- added schema `title` and `required` attributes
|
8
|
-
- refactored `from_active_record` method in `from_model`
|
9
|
-
- manipulate a dup of table columns
|
10
|
-
|
11
|
-
## v 0.0.4 (2018-05-22)
|
12
|
-
|
13
|
-
- corrected `ActiveRecord::ConnectionAdapters::SqlTypeMetadata` reference in `JsonschemaSerializer::ActiveRecord`
|
14
|
-
|
15
|
-
## v 0.0.3 (2018-05-21)
|
16
|
-
|
17
|
-
- improved documentation on existing code base
|
18
|
-
- refactored `JsonschemaSerializer::ActiveRecord` as a `class`
|
19
|
-
|
20
|
-
## v 0.0.2 (2018-05-20)
|
21
|
-
|
22
|
-
- basic rDoc comments for documentation
|
23
|
-
|
24
|
-
## v 0.0.1 (2018-05-20)
|
25
|
-
|
26
|
-
- basic implementation of `JsonschemaSerializer::Builder`
|
27
|
-
- POC implementation of a `JsonschemaSerializer::ActiveRecord` module
|
data/Gemfile
DELETED
data/Rakefile
DELETED
data/bin/console
DELETED
@@ -1,14 +0,0 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
|
-
require "bundler/setup"
|
4
|
-
require "jsonschema_serializer"
|
5
|
-
|
6
|
-
# You can add fixtures and/or initialization code here to make experimenting
|
7
|
-
# with your gem easier. You can also use a different console, if you like.
|
8
|
-
|
9
|
-
# (If you use this, don't forget to add pry to your Gemfile!)
|
10
|
-
# require "pry"
|
11
|
-
# Pry.start
|
12
|
-
|
13
|
-
require "irb"
|
14
|
-
IRB.start(__FILE__)
|