schema_serializer 0.0.10 → 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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7b6bc2cff5526334dace598f45ed47da1f0d8f317ee0f975dedcd40d27608d77
4
- data.tar.gz: 50669a20d59a8b6a981fbeb10a4511cf8df415ef38d681635113f5771fef341a
3
+ metadata.gz: ce8b784d53825c2ff0a5f82ac095857c27d44114c4323643d80007584ec91b5b
4
+ data.tar.gz: 82c3df51ee031ad3467921f36f1b99084b720ad4600d884f33bfc125b9b28dd1
5
5
  SHA512:
6
- metadata.gz: 2d492f118474bedb29c1a2b495de2a06342385240d72c88bd640cdf55e34f0def671022f1fe801bb408af71c6c96ecf7e668ebc87eafb984c04498eeda723ec6
7
- data.tar.gz: 159d83ee1b6b638b6c9f0c5f5fa8944e1cbb022f04ee0902a060fd27f5fc6ce902de3b0ef92f635330b8905291ef8b27919f0970802a8ab76f994febed35b9a4
6
+ metadata.gz: 775feba8344022256123867edf0f94eb08c0b8912ab43e079962c60cca0f32d31145cd50e7d1bba5c50e9cb5cad675f0ea011b40ecd8d60191dff58426c93639
7
+ data.tar.gz: 1e48cce1a7b7bd4856eaa218239213a4864bc17969376b1aad55dc9bb30e1764af96ce75155f2fdbf9bdc4c455572325dc60c4f040fe26b4390bf67ee23f6815
data/.gitignore CHANGED
@@ -7,3 +7,5 @@
7
7
  /spec/reports/
8
8
  /tmp/
9
9
  /Gemfile.lock
10
+
11
+ .rspec_status
data/.rubocop.yml CHANGED
@@ -1,29 +1,21 @@
1
1
  AllCops:
2
+ TargetRubyVersion: 2.6
2
3
  Exclude:
3
4
  - "node_modules/**/*"
4
5
  - "vendor/**/*"
5
- - "db/schema.rb"
6
6
 
7
- Layout/ExtraSpacing:
8
- Exclude:
9
- - "db/migrate/*.rb"
10
-
11
- Layout/IndentArray:
7
+ Layout/IndentFirstArrayElement:
12
8
  EnforcedStyle: consistent
13
9
 
14
- Layout/IndentHash:
10
+ Layout/IndentFirstHashElement:
15
11
  EnforcedStyle: consistent
16
12
 
17
13
  Layout/IndentationConsistency:
18
- Enabled: true
19
- EnforcedStyle: rails
14
+ EnforcedStyle: indented_internal_methods
20
15
 
21
16
  Layout/MultilineMethodCallIndentation:
22
17
  EnforcedStyle: indented_relative_to_receiver
23
18
 
24
- Layout/SpaceInsideBlockBraces:
25
- SpaceBeforeBlockParameters: false
26
-
27
19
  Lint/AmbiguousBlockAssociation:
28
20
  Exclude:
29
21
  - "spec/**/*_spec.rb"
@@ -38,17 +30,12 @@ Lint/UnusedMethodArgument:
38
30
  Enabled: false
39
31
 
40
32
  Metrics/AbcSize:
41
- Max: 25
33
+ Max: 24
42
34
 
43
35
  Metrics/BlockLength:
44
36
  Exclude:
45
- - "Rakefile"
46
- - "**/*.rake"
47
37
  - "spec/**/*.rb"
48
38
  - "Gemfile"
49
- - "config/environments/*.rb"
50
- - "config/routes.rb"
51
- - "config/routes/**/*.rb"
52
39
  - "*.gemspec"
53
40
 
54
41
  CyclomaticComplexity:
@@ -56,20 +43,13 @@ CyclomaticComplexity:
56
43
 
57
44
  Metrics/LineLength:
58
45
  Max: 120
59
- Exclude:
60
- - "db/migrate/*.rb"
61
46
 
62
47
  Metrics/MethodLength:
63
48
  Max: 20
64
- Exclude:
65
- - "db/migrate/*.rb"
66
49
 
67
50
  Naming/UncommunicativeMethodParamName:
68
51
  Enabled: false
69
52
 
70
- Performance/Casecmp:
71
- Enabled: false
72
-
73
53
  Security/YAMLLoad:
74
54
  Enabled: false
75
55
 
@@ -121,7 +101,6 @@ Style/FrozenStringLiteralComment:
121
101
 
122
102
  Style/HashSyntax:
123
103
  Exclude:
124
- - "**/*.rake"
125
104
  - "Rakefile"
126
105
 
127
106
  Style/MultilineBlockChain:
@@ -130,7 +109,6 @@ Style/MultilineBlockChain:
130
109
  Style/MixinUsage:
131
110
  Exclude:
132
111
  - "bin/setup"
133
- - "bin/update"
134
112
 
135
113
  Style/NumericLiterals:
136
114
  MinDigits: 7
@@ -142,6 +120,9 @@ Style/NumericPredicate:
142
120
  Style/OrAssignment:
143
121
  Enabled: false
144
122
 
123
+ Style/PercentLiteralDelimiters:
124
+ Enabled: false
125
+
145
126
  Style/PreferredHashMethods:
146
127
  EnforcedStyle: verbose
147
128
 
@@ -160,6 +141,9 @@ Style/StringLiterals:
160
141
  Style/StringLiteralsInInterpolation:
161
142
  EnforcedStyle: double_quotes
162
143
 
144
+ Style/SymbolArray:
145
+ Enabled: false
146
+
163
147
  Style/TernaryParentheses:
164
148
  EnforcedStyle: require_parentheses_when_complex
165
149
 
@@ -172,5 +156,5 @@ Style/TrailingCommaInArrayLiteral:
172
156
  Style/TrailingCommaInHashLiteral:
173
157
  EnforcedStyleForMultiline: comma
174
158
 
175
- Style/YodaCondition:
176
- EnforcedStyle: equality_operators_only
159
+ Style/WordArray:
160
+ Enabled: false
data/.travis.yml CHANGED
@@ -1,5 +1,10 @@
1
+ ---
1
2
  sudo: false
2
3
  language: ruby
4
+ cache: bundler
3
5
  rvm:
4
- - 2.5.1
5
- before_install: gem install bundler -v 1.16.2
6
+ - 2.6.3
7
+ before_install: gem install bundler -v 2.0.2
8
+ script:
9
+ - bundle exec rake spec
10
+ - bundle exec rubocop
data/Gemfile CHANGED
@@ -1,6 +1,6 @@
1
1
  source "https://rubygems.org"
2
2
 
3
- git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
3
+ git_source(:github) { |repo_name| "https://github.com/#{repo_name}" }
4
4
 
5
5
  # Specify your gem's dependencies in schema_serializer.gemspec
6
6
  gemspec
data/README.md CHANGED
@@ -1,5 +1,8 @@
1
1
  # SchemaSerializer
2
2
 
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)
5
+
3
6
  SchemaSerializer is provide serialization from schema definition to JSON.
4
7
 
5
8
  ## Installation
@@ -12,32 +15,58 @@ gem "schema_serializer"
12
15
 
13
16
  And then execute:
14
17
 
18
+ ```bash
19
+ $ bundle install
15
20
  ```
16
- $ bundle
21
+
22
+ Create config file(Only Rails) with:
23
+
24
+ ```bash
25
+ $ bundle exec rails generate schema_serializer:install
17
26
  ```
18
27
 
28
+ The following file will be created.
29
+
30
+ - `config/initializers/schema_serializer.rb`
31
+ - `doc/schema.yml`
32
+
19
33
  ## Usage
20
34
 
35
+ ### Create a serializer template with Rails Generator
36
+
37
+ Create a serializer template in `app/serializers/user_serializer.rb`.
38
+
39
+ ```bash
40
+ $ bundle exec rails g schema_serializer:serializer User
21
41
  ```
22
- SchemaSerializer.definition = {
23
- "User" => {
24
- "required" => ["id", "name"],
25
- "properties" => {
26
- "id" => {
27
- "type" => "integer",
28
- },
29
- "name" => {
30
- "type" => "string",
31
- },
32
- "age" => {
33
- "type" => "number",
34
- "nullable" => true,
35
- },
36
- }
37
- }
38
- }
39
-
40
- User.take.as_json
42
+
43
+ ### Serializer Definitions
44
+
45
+ Serializer Definitions are describe in the `doc/schema.yml`.
46
+
47
+ ```yaml
48
+ User:
49
+ required:
50
+ - id
51
+ - name
52
+ properties:
53
+ id:
54
+ type: integer
55
+ name:
56
+ type: string
57
+ age:
58
+ type: integer
59
+ nullable: true
60
+ ```
61
+
62
+ ### Serialization
63
+
64
+ ```ruby
65
+ user = User.take
66
+ SchemaSerializer.new(user).as_json.to_json
67
+
68
+ # Only ActiveRecord Object
69
+ user.serializer.as_json.to_json
41
70
  ```
42
71
 
43
72
  ## Development
data/Rakefile CHANGED
@@ -1,10 +1,6 @@
1
1
  require "bundler/gem_tasks"
2
- require "rake/testtask"
2
+ require "rspec/core/rake_task"
3
3
 
4
- Rake::TestTask.new(:test) do |t|
5
- t.libs << "test"
6
- t.libs << "lib"
7
- t.test_files = FileList["test/**/*_test.rb"]
8
- end
4
+ RSpec::Core::RakeTask.new(:spec)
9
5
 
10
- task default: :test
6
+ task default: :spec
data/bin/profile ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require "bundler/setup"
4
+ require "schema_serializer"
5
+
6
+ User = Struct.new(:id, :name, :age, :gender, :email, :created_at)
7
+ User.include SchemaSerializer::Serializable
8
+ users = Array.new(10000) { |i|
9
+ User.new(i.to_s, "abcdefg", rand(80).to_s, rand(2).to_s, "user#{i}@example.com", Time.now)
10
+ }
11
+ SchemaSerializer.definition = {
12
+ "User" => {
13
+ "required" => %w(id name),
14
+ "properties" => {
15
+ "id" => { "type" => "integer" },
16
+ "name" => { "type" => "string" },
17
+ "age" => { "type" => "integer" },
18
+ "gender" => { "type" => "integer" },
19
+ "email" => { "type" => "string" },
20
+ "created_at" => { "type" => "string" },
21
+ },
22
+ },
23
+ }
24
+
25
+ start_at = Time.now
26
+ users.each do |user|
27
+ user.serializer.as_json
28
+ end
29
+ elapsed = Time.now - start_at
30
+ puts elapsed
data/bin/setup CHANGED
@@ -3,4 +3,4 @@ set -euo pipefail
3
3
  IFS=$'\n\t'
4
4
  set -vx
5
5
 
6
- bundle install --path .bundle
6
+ bundle install --path .bundle -j 4
@@ -1,7 +1 @@
1
- # Uncomment following if use OpenAPI 3 specification.
2
- # require "schema_serializer/definition/from_openapi3_parser"
3
- # SchemaSerializer.definition = SchemaSerializer::Definition::FromOpenapi3Parser.build(
4
- # Openapi3Parser.load_file(Rails.root.join("doc/schema.yml"))
5
- # )
6
-
7
- SchemaSerializer.definition = YAML.load_file(Rails.root.join("doc/schema.yml"))
1
+ SchemaSerializer.load_definition(Rails.root.join("doc/schema.yml"))
@@ -10,7 +10,7 @@ class SchemaSerializer::Definition
10
10
  private
11
11
 
12
12
  def schemas_to_hash(schemas)
13
- schemas.each_with_object({}) {|(name, node), obj|
13
+ schemas.each_with_object({}) { |(name, node), obj|
14
14
  obj[name.to_s] = node_to_hash(node)
15
15
  }
16
16
  end
@@ -22,7 +22,7 @@ class SchemaSerializer::Definition
22
22
  obj["items"] = node_to_hash(node.items)
23
23
  when "object", nil
24
24
  obj["required"] = node.required&.node_data || []
25
- obj["properties"] = node.properties.each_with_object({}) {|(name, property), properties|
25
+ obj["properties"] = node.properties.each_with_object({}) { |(name, property), properties|
26
26
  properties[name.to_s] = node_to_hash(property)
27
27
  }
28
28
  end
@@ -3,7 +3,7 @@ class SchemaSerializer
3
3
  attr_reader :schemas
4
4
 
5
5
  def initialize(hash)
6
- @schemas = hash.each_with_object({}) {|(name, schema), obj|
6
+ @schemas = hash.each_with_object({}) { |(name, schema), obj|
7
7
  obj[name.to_s] = Schema.new(schema)
8
8
  }
9
9
  end
@@ -11,7 +11,7 @@ class SchemaSerializer
11
11
  @items = self.class.new(hash.fetch("items"))
12
12
  when "object", nil
13
13
  @required = hash["required"] || []
14
- @properties = hash.fetch("properties").each_with_object({}) {|(column, property), obj|
14
+ @properties = hash.fetch("properties").each_with_object({}) { |(column, property), obj|
15
15
  obj[column] = self.class.new(property)
16
16
  }
17
17
  end
@@ -30,11 +30,12 @@ class SchemaSerializer
30
30
  when "boolean"
31
31
  !object.nil?
32
32
  when "array"
33
- object.map {|item| items.serialize(item) }
33
+ object.map { |item| items.serialize(item) }
34
34
  else
35
35
  not_enough_columns = required - properties.keys
36
36
  raise RequiredNotDefined, not_enough_columns.join(", ") unless not_enough_columns.empty?
37
- properties.each_with_object({}) {|(column, schema), obj|
37
+
38
+ properties.each_with_object({}) { |(column, schema), obj|
38
39
  obj[column] = schema.serialize(get_value(object, column))
39
40
  }
40
41
  end
@@ -1,3 +1,3 @@
1
1
  class SchemaSerializer
2
- VERSION = "0.0.10".freeze
2
+ VERSION = "0.1.0".freeze
3
3
  end
@@ -14,6 +14,10 @@ class SchemaSerializer
14
14
  class << self
15
15
  attr_reader :definition
16
16
 
17
+ def load_definition(path)
18
+ self.definition = YamlExt.load(path)
19
+ end
20
+
17
21
  def definition=(define)
18
22
  @definition = define.is_a?(SchemaSerializer::Definition) ? define : SchemaSerializer::Definition.new(define)
19
23
  end
@@ -17,17 +17,20 @@ Gem::Specification.new do |spec|
17
17
  f.match(%r{^(test|spec|features)/})
18
18
  end
19
19
  spec.bindir = "exe"
20
- spec.executables = spec.files.grep(%r{^exe/}) {|f| File.basename(f) }
20
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
21
21
  spec.require_paths = ["lib"]
22
22
 
23
- spec.add_dependency "activesupport"
23
+ spec.add_dependency "activesupport", ">= 5.2.0"
24
+ spec.add_dependency "yaml_ext", "0.1.0"
24
25
 
25
- spec.add_development_dependency "activerecord"
26
- spec.add_development_dependency "bundler", "~> 1.16"
27
- spec.add_development_dependency "minitest", "~> 5.0"
28
- spec.add_development_dependency "openapi3_parser"
29
- spec.add_development_dependency "pry"
30
- spec.add_development_dependency "rake", "~> 10.0"
31
- spec.add_development_dependency "rubocop"
32
- spec.add_development_dependency "sqlite3"
26
+ spec.add_development_dependency "activerecord", ">= 5.2.0"
27
+ spec.add_development_dependency "bundler", "~> 2.0.2"
28
+ spec.add_development_dependency "pry", "~> 0.12.2"
29
+ 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"
33
+
34
+ # optional
35
+ spec.add_development_dependency "openapi3_parser", "~> 0.5.2"
33
36
  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.0.10
4
+ version: 0.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - i2bskn
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-01-05 00:00:00.000000000 Z
11
+ date: 2019-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -16,58 +16,72 @@ dependencies:
16
16
  requirements:
17
17
  - - ">="
18
18
  - !ruby/object:Gem::Version
19
- version: '0'
19
+ version: 5.2.0
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - ">="
25
25
  - !ruby/object:Gem::Version
26
- version: '0'
26
+ version: 5.2.0
27
+ - !ruby/object:Gem::Dependency
28
+ name: yaml_ext
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - '='
32
+ - !ruby/object:Gem::Version
33
+ version: 0.1.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - '='
39
+ - !ruby/object:Gem::Version
40
+ version: 0.1.0
27
41
  - !ruby/object:Gem::Dependency
28
42
  name: activerecord
29
43
  requirement: !ruby/object:Gem::Requirement
30
44
  requirements:
31
45
  - - ">="
32
46
  - !ruby/object:Gem::Version
33
- version: '0'
47
+ version: 5.2.0
34
48
  type: :development
35
49
  prerelease: false
36
50
  version_requirements: !ruby/object:Gem::Requirement
37
51
  requirements:
38
52
  - - ">="
39
53
  - !ruby/object:Gem::Version
40
- version: '0'
54
+ version: 5.2.0
41
55
  - !ruby/object:Gem::Dependency
42
56
  name: bundler
43
57
  requirement: !ruby/object:Gem::Requirement
44
58
  requirements:
45
59
  - - "~>"
46
60
  - !ruby/object:Gem::Version
47
- version: '1.16'
61
+ version: 2.0.2
48
62
  type: :development
49
63
  prerelease: false
50
64
  version_requirements: !ruby/object:Gem::Requirement
51
65
  requirements:
52
66
  - - "~>"
53
67
  - !ruby/object:Gem::Version
54
- version: '1.16'
68
+ version: 2.0.2
55
69
  - !ruby/object:Gem::Dependency
56
- name: minitest
70
+ name: pry
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '5.0'
75
+ version: 0.12.2
62
76
  type: :development
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '5.0'
82
+ version: 0.12.2
69
83
  - !ruby/object:Gem::Dependency
70
- name: openapi3_parser
84
+ name: rake
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - ">="
@@ -81,61 +95,61 @@ dependencies:
81
95
  - !ruby/object:Gem::Version
82
96
  version: '0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: pry
98
+ name: rspec
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
- - - ">="
101
+ - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '0'
103
+ version: 3.8.0
90
104
  type: :development
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
- - - ">="
108
+ - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '0'
110
+ version: 3.8.0
97
111
  - !ruby/object:Gem::Dependency
98
- name: rake
112
+ name: rubocop
99
113
  requirement: !ruby/object:Gem::Requirement
100
114
  requirements:
101
115
  - - "~>"
102
116
  - !ruby/object:Gem::Version
103
- version: '10.0'
117
+ version: 0.74.0
104
118
  type: :development
105
119
  prerelease: false
106
120
  version_requirements: !ruby/object:Gem::Requirement
107
121
  requirements:
108
122
  - - "~>"
109
123
  - !ruby/object:Gem::Version
110
- version: '10.0'
124
+ version: 0.74.0
111
125
  - !ruby/object:Gem::Dependency
112
- name: rubocop
126
+ name: sqlite3
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
- - - ">="
129
+ - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: '0'
131
+ version: 1.4.0
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
- - - ">="
136
+ - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: '0'
138
+ version: 1.4.0
125
139
  - !ruby/object:Gem::Dependency
126
- name: sqlite3
140
+ name: openapi3_parser
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
- - - ">="
143
+ - - "~>"
130
144
  - !ruby/object:Gem::Version
131
- version: '0'
145
+ version: 0.5.2
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
- - - ">="
150
+ - - "~>"
137
151
  - !ruby/object:Gem::Version
138
- version: '0'
152
+ version: 0.5.2
139
153
  description: SchemaSerializer is provide serialization from schema definition to JSON.
140
154
  email:
141
155
  - i2bskn@gmail.com
@@ -151,6 +165,7 @@ files:
151
165
  - README.md
152
166
  - Rakefile
153
167
  - bin/console
168
+ - bin/profile
154
169
  - bin/setup
155
170
  - lib/generators/schema_serializer/install/USAGE
156
171
  - lib/generators/schema_serializer/install/install_generator.rb
@@ -187,8 +202,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
187
202
  - !ruby/object:Gem::Version
188
203
  version: '0'
189
204
  requirements: []
190
- rubyforge_project:
191
- rubygems_version: 2.7.6
205
+ rubygems_version: 3.0.3
192
206
  signing_key:
193
207
  specification_version: 4
194
208
  summary: SchemaSerializer is provide serialization from schema definition to JSON.