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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7914525cee8225376bf03508351a44a4390e902b632f79bebfe02090360edabb
4
- data.tar.gz: b1f3ecc4f8def7a57328f07ae27ecb1aef9bf4978d303e32548e9e3e87fa001f
3
+ metadata.gz: 16979d066b051ff98b81083b073753d4f755f7d395c10d100de19d3258fd00fe
4
+ data.tar.gz: 58bc8904ee191d367bce4cb81c60acf5028276e090c34bed16150a96ba42f398
5
5
  SHA512:
6
- metadata.gz: 55fae4ec059c7678f7bafbe0e6587b6364c9399ffb116a95338dc90a7438a4cfc7b83d5437d7b95a8b125b17d1abe88c85f674cd173b6e79dbe473ea00415842
7
- data.tar.gz: c7cc06fb4ac73182796ac6c953ef8f5516db39cb67733d3332bc35c6663882954b1659cd4790811f88f80271adf6977d1b1b484a5ee79bf86812eb1f7dfbd80f
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
@@ -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
- Layout/IndentFirstArrayElement:
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
- Style/RedundantSelf:
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
- Style/TernaryParentheses:
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
@@ -1 +1 @@
1
- 2.6.4
1
+ 2.7.2
data/README.md CHANGED
@@ -1,7 +1,7 @@
1
1
  # SchemaSerializer
2
2
 
3
3
  [![Gem Version](https://badge.fury.io/rb/schema_serializer.svg)](https://badge.fury.io/rb/schema_serializer)
4
- [![Build Status](https://travis-ci.org/i2bskn/schema_serializer.svg?branch=master)](https://travis-ci.org/i2bskn/schema_serializer)
4
+ [![CI](https://github.com/i2bskn/schema_serializer/workflows/CI/badge.svg?branch=master)](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
@@ -5,5 +5,4 @@ require "rubocop/rake_task"
5
5
  RSpec::Core::RakeTask.new(:spec)
6
6
  RuboCop::RakeTask.new
7
7
 
8
- task default: :spec
9
8
  task :default => %i(spec rubocop)
@@ -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(10000) { |i|
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
@@ -0,0 +1,2 @@
1
+ schemas:
2
+ $ref: ./schemas/index.yml
@@ -0,0 +1,12 @@
1
+ type: object
2
+ required:
3
+ - id
4
+ - name
5
+ properties:
6
+ id:
7
+ type: integer
8
+ name:
9
+ type: string
10
+ age:
11
+ nullable: true
12
+ type: integer
@@ -0,0 +1,3 @@
1
+ type: array
2
+ items:
3
+ $ref: "#/components/schemas/User"
@@ -0,0 +1,4 @@
1
+ User:
2
+ $ref: ./User.yml
3
+ Users:
4
+ $ref: ./Users.yml
@@ -1,11 +1,3 @@
1
- Pet:
2
- required:
3
- - id
4
- - name
5
- properties:
6
- id:
7
- type: integer
8
- name:
9
- type: string
10
- tag:
11
- type: string
1
+ openapi: "3.0.0"
2
+ components:
3
+ $ref: ./components/index.yml
@@ -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
@@ -12,7 +12,7 @@ class SchemaSerializer
12
12
  end
13
13
 
14
14
  def merge(options)
15
- options.keys.each { |key| send("#{key}=", options[key]) }
15
+ options.each_key { |key| send("#{key}=", options[key]) }
16
16
  self
17
17
  end
18
18
 
@@ -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
@@ -3,4 +3,5 @@ class SchemaSerializer
3
3
  class SchemaNotFound < BaseError; end
4
4
  class RequiredNotDefined < BaseError; end
5
5
  class NullValue < BaseError; end
6
+ class ReloadError < BaseError; end
6
7
  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.send(:include, SchemaSerializer::Serializable)
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 || "#{self.class.name}Serializer".safe_constantize || SchemaSerializer).new(self, options)
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
@@ -1,3 +1,3 @@
1
1
  class SchemaSerializer
2
- VERSION = "0.2.4".freeze
2
+ VERSION = "0.2.6".freeze
3
3
  end
@@ -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.0.2"
28
- spec.add_development_dependency "pry", "~> 0.12.2"
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.8.0"
31
- spec.add_development_dependency "rubocop", "~> 0.74.0"
32
- spec.add_development_dependency "sqlite3", "~> 1.4.0"
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
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: 2019-10-18 00:00:00.000000000 Z
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.0.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.0.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.12.2
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.12.2
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.8.0
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.8.0
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: 0.74.0
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: 0.74.0
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.0
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.0
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: '0'
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.0.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.
@@ -1,9 +0,0 @@
1
- ---
2
- sudo: false
3
- language: ruby
4
- cache: bundler
5
- rvm:
6
- - 2.6.4
7
- before_install: gem install bundler -v 2.0.2
8
- script:
9
- - bundle exec rake