schema_serializer 0.2.4 → 0.2.6
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/.github/workflows/ci.yml +28 -0
- data/.rubocop.yml +26 -21
- data/.ruby-version +1 -1
- data/README.md +1 -1
- data/Rakefile +0 -1
- data/bin/profile +1 -1
- data/lib/generators/schema_serializer/install/install_generator.rb +4 -0
- data/lib/generators/schema_serializer/install/templates/components/index.yml +2 -0
- data/lib/generators/schema_serializer/install/templates/components/schemas/User.yml +12 -0
- data/lib/generators/schema_serializer/install/templates/components/schemas/Users.yml +3 -0
- data/lib/generators/schema_serializer/install/templates/components/schemas/index.yml +4 -0
- data/lib/generators/schema_serializer/install/templates/schema.yml +3 -11
- data/lib/schema_serializer.rb +9 -0
- data/lib/schema_serializer/configuration.rb +1 -1
- data/lib/schema_serializer/constantizer.rb +34 -0
- data/lib/schema_serializer/errors.rb +1 -0
- data/lib/schema_serializer/railtie.rb +2 -1
- data/lib/schema_serializer/serializable.rb +13 -1
- data/lib/schema_serializer/version.rb +1 -1
- data/schema_serializer.gemspec +7 -5
- metadata +20 -15
- data/.travis.yml +0 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 16979d066b051ff98b81083b073753d4f755f7d395c10d100de19d3258fd00fe
|
4
|
+
data.tar.gz: 58bc8904ee191d367bce4cb81c60acf5028276e090c34bed16150a96ba42f398
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7b9cea96ae7da52913b33a7ebe16b249be137861e31d5ea2f84509b40f14b0ceafac7d5fe42f760ba2d3389e11a901bb53c87c6b1f121ee5ed453fa0ca4daa3f
|
7
|
+
data.tar.gz: 3e404e9176704a2220e83dd607672053d4bc7ee6ba1e0f8314150e8e3942f2890ba0735bc7b938ceea921e0a7bfdf7babf74e2657e58ebad1a7ea6e2a3766bdb
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: CI
|
9
|
+
on:
|
10
|
+
push:
|
11
|
+
branches: [ master ]
|
12
|
+
pull_request:
|
13
|
+
branches: [ master ]
|
14
|
+
jobs:
|
15
|
+
test:
|
16
|
+
runs-on: ubuntu-latest
|
17
|
+
steps:
|
18
|
+
- uses: actions/checkout@v2
|
19
|
+
- name: Set up Ruby
|
20
|
+
uses: ruby/setup-ruby@v1
|
21
|
+
with:
|
22
|
+
ruby-version: 2.7.2
|
23
|
+
- name: Install dependencies
|
24
|
+
run: bundle install
|
25
|
+
- name: Run tests
|
26
|
+
run: bundle exec rake spec
|
27
|
+
- name: Run rubocop
|
28
|
+
run: bundle exec rake rubocop
|
data/.rubocop.yml
CHANGED
@@ -1,18 +1,21 @@
|
|
1
1
|
AllCops:
|
2
|
+
NewCops: enable
|
2
3
|
TargetRubyVersion: 2.6
|
3
4
|
Exclude:
|
4
5
|
- "node_modules/**/*"
|
5
6
|
- "vendor/**/*"
|
6
7
|
|
7
|
-
|
8
|
-
EnforcedStyle: consistent
|
9
|
-
|
10
|
-
Layout/IndentFirstHashElement:
|
11
|
-
EnforcedStyle: consistent
|
12
|
-
|
8
|
+
# Private methods indent.
|
13
9
|
Layout/IndentationConsistency:
|
14
10
|
EnforcedStyle: indented_internal_methods
|
15
11
|
|
12
|
+
# Warning: 120 characters
|
13
|
+
# Error: 160 characters
|
14
|
+
# Make the library more restrictive.
|
15
|
+
Layout/LineLength:
|
16
|
+
Max: 120
|
17
|
+
|
18
|
+
# Multi-line indentation with receiver.
|
16
19
|
Layout/MultilineMethodCallIndentation:
|
17
20
|
EnforcedStyle: indented_relative_to_receiver
|
18
21
|
|
@@ -20,6 +23,11 @@ Lint/AmbiguousBlockAssociation:
|
|
20
23
|
Exclude:
|
21
24
|
- "spec/**/*_spec.rb"
|
22
25
|
|
26
|
+
# May define constants within the block in spec.
|
27
|
+
Lint/ConstantDefinitionInBlock:
|
28
|
+
Exclude:
|
29
|
+
- "spec/**/*_spec.rb"
|
30
|
+
|
23
31
|
Lint/InheritException:
|
24
32
|
EnforcedStyle: standard_error
|
25
33
|
|
@@ -41,15 +49,9 @@ Metrics/BlockLength:
|
|
41
49
|
Metrics/CyclomaticComplexity:
|
42
50
|
Max: 10
|
43
51
|
|
44
|
-
Metrics/LineLength:
|
45
|
-
Max: 120
|
46
|
-
|
47
52
|
Metrics/MethodLength:
|
48
53
|
Max: 20
|
49
54
|
|
50
|
-
Naming/UncommunicativeMethodParamName:
|
51
|
-
Enabled: false
|
52
|
-
|
53
55
|
Security/YAMLLoad:
|
54
56
|
Enabled: false
|
55
57
|
|
@@ -65,9 +67,6 @@ Style/AsciiComments:
|
|
65
67
|
Style/BlockDelimiters:
|
66
68
|
Enabled: false
|
67
69
|
|
68
|
-
Style/BracesAroundHashParameters:
|
69
|
-
Enabled: false
|
70
|
-
|
71
70
|
Style/ClassAndModuleChildren:
|
72
71
|
Enabled: false
|
73
72
|
|
@@ -96,6 +95,7 @@ Style/EmptyMethod:
|
|
96
95
|
Style/FormatString:
|
97
96
|
EnforcedStyle: percent
|
98
97
|
|
98
|
+
# Do not use frozen_string_literal comment.
|
99
99
|
Style/FrozenStringLiteralComment:
|
100
100
|
Enabled: false
|
101
101
|
|
@@ -110,6 +110,7 @@ Style/MixinUsage:
|
|
110
110
|
Exclude:
|
111
111
|
- "bin/setup"
|
112
112
|
|
113
|
+
# Use _ when 7 digits or more.
|
113
114
|
Style/NumericLiterals:
|
114
115
|
MinDigits: 7
|
115
116
|
Strict: true
|
@@ -123,38 +124,42 @@ Style/OrAssignment:
|
|
123
124
|
Style/PercentLiteralDelimiters:
|
124
125
|
Enabled: false
|
125
126
|
|
127
|
+
# `has_xxx?` is more readable.
|
126
128
|
Style/PreferredHashMethods:
|
127
129
|
EnforcedStyle: verbose
|
128
130
|
|
131
|
+
# Do not use unnecessary returns. (Allow to return multiple values.)
|
129
132
|
Style/RedundantReturn:
|
130
133
|
AllowMultipleReturnValues: true
|
131
134
|
|
132
|
-
|
133
|
-
Enabled: false
|
134
|
-
|
135
|
+
# Do not specify error class when rescuing StandardError.
|
135
136
|
Style/RescueStandardError:
|
136
137
|
EnforcedStyle: implicit
|
137
138
|
|
139
|
+
# String literals use double quotes.
|
138
140
|
Style/StringLiterals:
|
139
141
|
EnforcedStyle: double_quotes
|
140
142
|
|
143
|
+
# String literal inside the string interpolation use double quotes too.
|
141
144
|
Style/StringLiteralsInInterpolation:
|
142
145
|
EnforcedStyle: double_quotes
|
143
146
|
|
147
|
+
# Percent(`%i(a b)`) and brackets(`[:a, :b]`) are acceptable.
|
144
148
|
Style/SymbolArray:
|
145
149
|
Enabled: false
|
146
150
|
|
147
|
-
|
148
|
-
EnforcedStyle: require_parentheses_when_complex
|
149
|
-
|
151
|
+
# Put a trailing comma in argument list.
|
150
152
|
Style/TrailingCommaInArguments:
|
151
153
|
EnforcedStyleForMultiline: comma
|
152
154
|
|
155
|
+
# Put a trailing comma in Array literal.
|
153
156
|
Style/TrailingCommaInArrayLiteral:
|
154
157
|
EnforcedStyleForMultiline: comma
|
155
158
|
|
159
|
+
# Put a trailing comma in Hash literal.
|
156
160
|
Style/TrailingCommaInHashLiteral:
|
157
161
|
EnforcedStyleForMultiline: comma
|
158
162
|
|
163
|
+
# Percent(`%w(a b)`) and brackets(`["a", "b"]`) are acceptable.
|
159
164
|
Style/WordArray:
|
160
165
|
Enabled: false
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.7.2
|
data/README.md
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
# SchemaSerializer
|
2
2
|
|
3
3
|
[](https://badge.fury.io/rb/schema_serializer)
|
4
|
-
[](https://github.com/i2bskn/schema_serializer/actions?query=workflow%3ACI)
|
5
5
|
|
6
6
|
SchemaSerializer is provide serialization from schema definition to JSON.
|
7
7
|
|
data/Rakefile
CHANGED
data/bin/profile
CHANGED
@@ -5,7 +5,7 @@ require "schema_serializer"
|
|
5
5
|
|
6
6
|
User = Struct.new(:id, :name, :age, :gender, :email, :created_at)
|
7
7
|
User.include SchemaSerializer::Serializable
|
8
|
-
users = Array.new(
|
8
|
+
users = Array.new(1_000_000) { |i|
|
9
9
|
User.new(i.to_s, "abcdefg", rand(80).to_s, rand(2).to_s, "user#{i}@example.com", Time.now)
|
10
10
|
}
|
11
11
|
SchemaSerializer.definition = {
|
@@ -8,6 +8,10 @@ module SchemaSerializer::Generators
|
|
8
8
|
|
9
9
|
def create_example_schema
|
10
10
|
copy_file "schema.yml", "doc/schema.yml"
|
11
|
+
copy_file "components/index.yml", "doc/components/index.yml"
|
12
|
+
copy_file "components/schemas/index.yml", "doc/components/schemas/index.yml"
|
13
|
+
copy_file "components/schemas/User.yml", "doc/components/schemas/User.yml"
|
14
|
+
copy_file "components/schemas/Users.yml", "doc/components/schemas/Users.yml"
|
11
15
|
end
|
12
16
|
end
|
13
17
|
end
|
data/lib/schema_serializer.rb
CHANGED
@@ -5,6 +5,7 @@ require "yaml_ext"
|
|
5
5
|
require "schema_serializer/configuration"
|
6
6
|
require "schema_serializer/definition"
|
7
7
|
require "schema_serializer/schema"
|
8
|
+
require "schema_serializer/constantizer"
|
8
9
|
require "schema_serializer/serializable"
|
9
10
|
require "schema_serializer/errors"
|
10
11
|
require "schema_serializer/version"
|
@@ -22,9 +23,16 @@ class SchemaSerializer
|
|
22
23
|
doc = doc.fetch("components").fetch("schemas")
|
23
24
|
end
|
24
25
|
|
26
|
+
@document_path = path
|
25
27
|
self.definition = doc
|
26
28
|
end
|
27
29
|
|
30
|
+
def reload!
|
31
|
+
raise ReloadError, "Load config using .load_definition" if @document_path.nil?
|
32
|
+
|
33
|
+
load_definition(@document_path)
|
34
|
+
end
|
35
|
+
|
28
36
|
def definition=(define)
|
29
37
|
@definition = define.is_a?(SchemaSerializer::Definition) ? define : SchemaSerializer::Definition.new(define)
|
30
38
|
end
|
@@ -62,6 +70,7 @@ class SchemaSerializer
|
|
62
70
|
end
|
63
71
|
|
64
72
|
def respond_to_missing?(name, _include_private = false)
|
73
|
+
super
|
65
74
|
object.respond_to?(name)
|
66
75
|
end
|
67
76
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
class SchemaSerializer
|
2
|
+
class Constantizer
|
3
|
+
class << self
|
4
|
+
def find(name)
|
5
|
+
return cached_serializers.fetch(name) if cached_serializers.has_key?(name)
|
6
|
+
return nil if non_existent_serializers.include?(name)
|
7
|
+
|
8
|
+
klass = name.safe_constantize
|
9
|
+
if klass.present?
|
10
|
+
cached_serializers[name] = klass
|
11
|
+
return klass
|
12
|
+
end
|
13
|
+
|
14
|
+
non_existent_serializers << name
|
15
|
+
nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def refresh!
|
19
|
+
@non_existent_serializers = []
|
20
|
+
@serializers = {}
|
21
|
+
end
|
22
|
+
|
23
|
+
private
|
24
|
+
|
25
|
+
def non_existent_serializers
|
26
|
+
@non_existent_serializers ||= []
|
27
|
+
end
|
28
|
+
|
29
|
+
def cached_serializers
|
30
|
+
@cached_serializers ||= {}
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -2,7 +2,8 @@ class SchemaSerializer
|
|
2
2
|
class Railtie < ::Rails::Railtie
|
3
3
|
initializer "schema_serializer" do
|
4
4
|
ActiveSupport.on_load(:active_record) do
|
5
|
-
::ActiveRecord::Base.
|
5
|
+
::ActiveRecord::Base.include SchemaSerializer::Serializable
|
6
|
+
::ActiveRecord::Relation.include SchemaSerializer::Serializable
|
6
7
|
end
|
7
8
|
end
|
8
9
|
end
|
@@ -3,7 +3,19 @@ class SchemaSerializer
|
|
3
3
|
def serializer(*args)
|
4
4
|
options = args.last.is_a?(Hash) ? args.pop : {}
|
5
5
|
klass = args.first || options[:class]
|
6
|
-
(klass ||
|
6
|
+
(klass || serializer_class || SchemaSerializer).new(self, options)
|
7
7
|
end
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def serializer_class
|
12
|
+
SchemaSerializer::Constantizer.find("#{serializer_base_class_name}Serializer")
|
13
|
+
end
|
14
|
+
|
15
|
+
def serializer_base_class_name
|
16
|
+
return self.class.name unless defined?(ActiveRecord)
|
17
|
+
|
18
|
+
self.class < ActiveRecord::Relation ? model.name.pluralize : self.class.name
|
19
|
+
end
|
8
20
|
end
|
9
21
|
end
|
data/schema_serializer.gemspec
CHANGED
@@ -20,14 +20,16 @@ Gem::Specification.new do |spec|
|
|
20
20
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
21
|
spec.require_paths = ["lib"]
|
22
22
|
|
23
|
+
spec.required_ruby_version = ">= 2.6"
|
24
|
+
|
23
25
|
spec.add_dependency "activesupport", ">= 5.2.0", "< 6.1"
|
24
26
|
spec.add_dependency "yaml_ext", "0.1.2"
|
25
27
|
|
26
28
|
spec.add_development_dependency "activerecord", ">= 5.2.0", "< 6.1"
|
27
|
-
spec.add_development_dependency "bundler", "~> 2.
|
28
|
-
spec.add_development_dependency "pry", "~> 0.
|
29
|
+
spec.add_development_dependency "bundler", "~> 2.1.4"
|
30
|
+
spec.add_development_dependency "pry", "~> 0.13.1"
|
29
31
|
spec.add_development_dependency "rake"
|
30
|
-
spec.add_development_dependency "rspec", "~> 3.
|
31
|
-
spec.add_development_dependency "rubocop", "~>
|
32
|
-
spec.add_development_dependency "sqlite3", "~> 1.4.
|
32
|
+
spec.add_development_dependency "rspec", "~> 3.10.0"
|
33
|
+
spec.add_development_dependency "rubocop", "~> 1.2.0"
|
34
|
+
spec.add_development_dependency "sqlite3", "~> 1.4.2"
|
33
35
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: schema_serializer
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.2.
|
4
|
+
version: 0.2.6
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- i2bskn
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-12-09 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: activesupport
|
@@ -70,28 +70,28 @@ dependencies:
|
|
70
70
|
requirements:
|
71
71
|
- - "~>"
|
72
72
|
- !ruby/object:Gem::Version
|
73
|
-
version: 2.
|
73
|
+
version: 2.1.4
|
74
74
|
type: :development
|
75
75
|
prerelease: false
|
76
76
|
version_requirements: !ruby/object:Gem::Requirement
|
77
77
|
requirements:
|
78
78
|
- - "~>"
|
79
79
|
- !ruby/object:Gem::Version
|
80
|
-
version: 2.
|
80
|
+
version: 2.1.4
|
81
81
|
- !ruby/object:Gem::Dependency
|
82
82
|
name: pry
|
83
83
|
requirement: !ruby/object:Gem::Requirement
|
84
84
|
requirements:
|
85
85
|
- - "~>"
|
86
86
|
- !ruby/object:Gem::Version
|
87
|
-
version: 0.
|
87
|
+
version: 0.13.1
|
88
88
|
type: :development
|
89
89
|
prerelease: false
|
90
90
|
version_requirements: !ruby/object:Gem::Requirement
|
91
91
|
requirements:
|
92
92
|
- - "~>"
|
93
93
|
- !ruby/object:Gem::Version
|
94
|
-
version: 0.
|
94
|
+
version: 0.13.1
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
96
|
name: rake
|
97
97
|
requirement: !ruby/object:Gem::Requirement
|
@@ -112,42 +112,42 @@ dependencies:
|
|
112
112
|
requirements:
|
113
113
|
- - "~>"
|
114
114
|
- !ruby/object:Gem::Version
|
115
|
-
version: 3.
|
115
|
+
version: 3.10.0
|
116
116
|
type: :development
|
117
117
|
prerelease: false
|
118
118
|
version_requirements: !ruby/object:Gem::Requirement
|
119
119
|
requirements:
|
120
120
|
- - "~>"
|
121
121
|
- !ruby/object:Gem::Version
|
122
|
-
version: 3.
|
122
|
+
version: 3.10.0
|
123
123
|
- !ruby/object:Gem::Dependency
|
124
124
|
name: rubocop
|
125
125
|
requirement: !ruby/object:Gem::Requirement
|
126
126
|
requirements:
|
127
127
|
- - "~>"
|
128
128
|
- !ruby/object:Gem::Version
|
129
|
-
version:
|
129
|
+
version: 1.2.0
|
130
130
|
type: :development
|
131
131
|
prerelease: false
|
132
132
|
version_requirements: !ruby/object:Gem::Requirement
|
133
133
|
requirements:
|
134
134
|
- - "~>"
|
135
135
|
- !ruby/object:Gem::Version
|
136
|
-
version:
|
136
|
+
version: 1.2.0
|
137
137
|
- !ruby/object:Gem::Dependency
|
138
138
|
name: sqlite3
|
139
139
|
requirement: !ruby/object:Gem::Requirement
|
140
140
|
requirements:
|
141
141
|
- - "~>"
|
142
142
|
- !ruby/object:Gem::Version
|
143
|
-
version: 1.4.
|
143
|
+
version: 1.4.2
|
144
144
|
type: :development
|
145
145
|
prerelease: false
|
146
146
|
version_requirements: !ruby/object:Gem::Requirement
|
147
147
|
requirements:
|
148
148
|
- - "~>"
|
149
149
|
- !ruby/object:Gem::Version
|
150
|
-
version: 1.4.
|
150
|
+
version: 1.4.2
|
151
151
|
description: SchemaSerializer is provide serialization from schema definition to JSON.
|
152
152
|
email:
|
153
153
|
- i2bskn@gmail.com
|
@@ -155,11 +155,11 @@ executables: []
|
|
155
155
|
extensions: []
|
156
156
|
extra_rdoc_files: []
|
157
157
|
files:
|
158
|
+
- ".github/workflows/ci.yml"
|
158
159
|
- ".gitignore"
|
159
160
|
- ".rspec"
|
160
161
|
- ".rubocop.yml"
|
161
162
|
- ".ruby-version"
|
162
|
-
- ".travis.yml"
|
163
163
|
- Gemfile
|
164
164
|
- LICENSE
|
165
165
|
- README.md
|
@@ -169,6 +169,10 @@ files:
|
|
169
169
|
- bin/setup
|
170
170
|
- lib/generators/schema_serializer/install/USAGE
|
171
171
|
- lib/generators/schema_serializer/install/install_generator.rb
|
172
|
+
- lib/generators/schema_serializer/install/templates/components/index.yml
|
173
|
+
- lib/generators/schema_serializer/install/templates/components/schemas/User.yml
|
174
|
+
- lib/generators/schema_serializer/install/templates/components/schemas/Users.yml
|
175
|
+
- lib/generators/schema_serializer/install/templates/components/schemas/index.yml
|
172
176
|
- lib/generators/schema_serializer/install/templates/schema.yml
|
173
177
|
- lib/generators/schema_serializer/install/templates/schema_serializer.rb
|
174
178
|
- lib/generators/schema_serializer/serializer/USAGE
|
@@ -176,6 +180,7 @@ files:
|
|
176
180
|
- lib/generators/schema_serializer/serializer/templates/serializer.rb.erb
|
177
181
|
- lib/schema_serializer.rb
|
178
182
|
- lib/schema_serializer/configuration.rb
|
183
|
+
- lib/schema_serializer/constantizer.rb
|
179
184
|
- lib/schema_serializer/definition.rb
|
180
185
|
- lib/schema_serializer/errors.rb
|
181
186
|
- lib/schema_serializer/railtie.rb
|
@@ -195,14 +200,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
195
200
|
requirements:
|
196
201
|
- - ">="
|
197
202
|
- !ruby/object:Gem::Version
|
198
|
-
version: '
|
203
|
+
version: '2.6'
|
199
204
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
205
|
requirements:
|
201
206
|
- - ">="
|
202
207
|
- !ruby/object:Gem::Version
|
203
208
|
version: '0'
|
204
209
|
requirements: []
|
205
|
-
rubygems_version: 3.
|
210
|
+
rubygems_version: 3.1.4
|
206
211
|
signing_key:
|
207
212
|
specification_version: 4
|
208
213
|
summary: SchemaSerializer is provide serialization from schema definition to JSON.
|