schema_serializer 0.2.4 → 0.2.6

Sign up to get free protection for your applications and to get access to all the features.
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