schema_serializer 0.0.10 → 0.1.0

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: 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.